# gRPC-Java — High-Performance RPC Framework for JVM Applications > gRPC-Java is the official Java implementation of gRPC, providing a high-performance, open-source RPC framework that uses Protocol Buffers for serialization and HTTP/2 for transport across JVM-based services. ## Install Save in your project root: # gRPC-Java — High-Performance RPC Framework for JVM Applications ## Quick Use ```bash # Add gRPC dependencies to build.gradle implementation "io.grpc:grpc-netty-shaded:1.68.0" implementation "io.grpc:grpc-protobuf:1.68.0" implementation "io.grpc:grpc-stub:1.68.0" # Generate Java code from .proto files using the protoc plugin protoc --java_out=src/main/java --grpc-java_out=src/main/java service.proto ``` ## Introduction gRPC-Java brings Google's high-performance RPC framework to the JVM ecosystem. It enables services written in Java, Kotlin, Scala, or any JVM language to communicate efficiently using Protocol Buffers over HTTP/2, supporting unary calls, server streaming, client streaming, and bidirectional streaming patterns out of the box. ## What gRPC-Java Does - Generates type-safe client stubs and server base classes from .proto service definitions - Supports all four gRPC communication patterns: unary, server-streaming, client-streaming, and bidirectional streaming - Provides built-in load balancing, retries, and deadline propagation - Integrates with Netty, OkHttp, and in-process transports for different deployment scenarios - Offers interceptor APIs for cross-cutting concerns like authentication, logging, and tracing ## Architecture Overview gRPC-Java uses the protoc compiler with a Java plugin to generate stub classes from .proto files. The runtime consists of a Channel abstraction for client-side connections and a Server builder for hosting services. Transport layers (Netty for servers, OkHttp for Android) handle HTTP/2 framing, while the stub layer manages serialization and call semantics. Interceptors chain around both client and server calls for middleware functionality. ## Self-Hosting & Configuration - Add the protobuf Gradle or Maven plugin to auto-generate code from .proto files during build - Configure server port and thread pools via `ServerBuilder.forPort(8080).addService(new MyService()).build()` - Enable TLS by providing certificate and key files to the server builder - Set up client channels with `ManagedChannelBuilder.forAddress("host", 8080).usePlaintext().build()` - Use `GrpcServerProperties` in Spring Boot with the grpc-spring-boot-starter for framework integration ## Key Features - HTTP/2-based transport with multiplexed streams and header compression - Pluggable authentication via call credentials supporting OAuth2, JWT, and custom schemes - Built-in health checking protocol for load balancer integration - Android support through the OkHttp transport layer - Reflection service for runtime schema discovery and tools like grpcurl ## Comparison with Similar Tools - **gRPC-Go** — Go implementation with goroutine-per-stream model; gRPC-Java uses Netty event loops for higher throughput on JVM - **Spring WebFlux** — Reactive HTTP framework; gRPC-Java provides contract-first RPC with stronger typing via Protobuf - **Apache Thrift** — Similar RPC framework supporting more serialization formats but with less active development - **Connect-RPC** — Browser-friendly gRPC alternative with simpler HTTP semantics; gRPC-Java targets backend-to-backend communication - **REST/JSON APIs** — More widely understood but lack the type safety, streaming, and performance of binary Protobuf over HTTP/2 ## FAQ **Q: Can I use gRPC-Java with Kotlin?** A: Yes. The generated Java stubs work directly from Kotlin, and the grpc-kotlin project provides coroutine-based APIs for idiomatic Kotlin usage. **Q: How does gRPC-Java handle errors?** A: gRPC uses Status codes (OK, NOT_FOUND, INTERNAL, etc.) with optional metadata. The StatusRuntimeException carries this information on the client side. **Q: Is gRPC-Java suitable for Android apps?** A: Yes. Use the OkHttp transport (`grpc-okhttp`) which is optimized for mobile with smaller binary size and lower resource usage. **Q: How do I add authentication?** A: Implement CallCredentials for per-call tokens or use TLS mutual authentication. Server-side interceptors can validate tokens on every incoming call. ## Sources - https://github.com/grpc/grpc-java - https://grpc.io/docs/languages/java/ --- Source: https://tokrepo.com/en/workflows/asset-974d7b8a Author: AI Open Source