The official Java implementation of gRPC, a high-performance, HTTP/2-based remote procedure call (RPC) framework.
gRPC-Java is the official Java implementation of the gRPC framework, a high-performance, open-source remote procedure call (RPC) system. It allows Java and Android applications to efficiently communicate with services using HTTP/2 and Protocol Buffers, solving the challenges of building scalable, type-safe distributed systems.
Java and Android developers building microservices, distributed systems, or client-server applications that require efficient, type-safe inter-service communication.
Developers choose gRPC-Java for its performance (thanks to HTTP/2 and Protocol Buffers), strong typing, multi-transport support (including Android-optimized transports), and its status as the official, well-supported Java implementation of the gRPC standard.
The Java gRPC implementation. HTTP/2 based RPC
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Leverages HTTP/2 for multiplexed streams and header compression, enabling efficient bidirectional communication and reduced latency compared to HTTP/1.1, as highlighted in the README's feature list.
Uses Protocol Buffers as the default IDL for service contracts, ensuring compile-time type checking and efficient serialization, which minimizes runtime errors and boosts performance.
Supports multiple transports like Netty for general Java, OkHttp for Android, and in-process for testing, allowing platform-specific optimizations as detailed in the High-level Components section.
Separates Stub, Channel, and Transport layers, making it easy to add interceptors for cross-cutting concerns like logging and auth without modifying core service logic, per the README's architecture explanation.
Requires minSdkVersion 23 and additional setup for TLS with Play Services Dynamic Security Provider, limiting support for older Android versions and adding complexity for mobile developers.
Setting up protobuf codegen with Maven or Gradle requires additional plugins like protobuf-maven-plugin, increasing initial configuration effort and potential for build errors.
APIs annotated with @ExperimentalApi are subject to change, leading to potential breaking changes in dependent code and requiring tools like grpc-java-api-checker for compliance.