Comparing gRPC Libraries for Spring

Compares the two major libraries for applying gRPC in a Spring environment.

Overview

There are two major libraries for applying gRPC in a Spring environment:

  • net.devh:grpc-server-spring-boot-starter
  • org.springframework.grpc:spring-grpc-spring-boot-starter

Both integrate gRPC with Spring, but differ significantly in origin, design, support model, and future direction.

Library Comparison

Item net.devh Spring gRPC
Origin Community third-party library Official Spring project
Stability Widely used for a long time Early stage and evolving quickly
Modern Spring support Limited Spring Boot 3 and Native support Spring Boot 3, AOT, and Native support
Architecture Wraps gRPC server and client features Provides Spring-oriented gRPC abstractions
Client style Generated Stubs with annotation-based injection Channel factory and Spring Beans
Extensibility Traditional gRPC patterns Spring ecosystem integrations
Long-term direction Stable maintenance Likely to become the Spring standard

Background

net.devh

  • Long-standing third-party library created by the community
  • Started during the Spring Boot 1.x and 2.x era
  • Mature and used in many production systems
  • Not developed by the Spring team
  • Maintained, but with fewer new features

Spring gRPC

  • Official Spring project
  • Designed for Spring Framework 6 and Spring Boot 3
  • Managed by the Spring team
  • Integrates with AOT, Native Image, and Observability

Architecture

net.devh

  • Wraps the original Netty-based gRPC server in a Spring style
  • Provides @GrpcService and @GrpcClient
  • Manages Stubs and channels directly
@GrpcService
public class HelloServiceImpl extends HelloServiceGrpc.HelloServiceImplBase { ... }

@GrpcClient("myService")
private HelloServiceGrpc.HelloServiceBlockingStub stub;

Spring gRPC

  • Reinterprets gRPC through Spring concepts
  • Uses channel abstractions, server abstractions, and Bean configuration
  • Designed to work with Spring AOT, GraalVM, Observability, and other ecosystem features
@Service
class HelloServiceImpl : HelloServiceGrpcKt.HelloServiceCoroutineImplBase()

@Bean
fun helloStub(factory: GrpcChannelFactory) =
    HelloServiceGrpcKt.HelloServiceCoroutineStub(factory.createChannel("local"))

Operational Considerations

Item net.devh Spring gRPC
Maturity Very high Early stage
Enterprise usage Common Increasing
Spring Boot 3 and AOT Partially limited Fully supported
Documentation Primarily GitHub wiki Official Spring documentation
Extensibility Traditional gRPC mechanisms Spring-native extensions

Which Should You Choose?

Choose net.devh When Immediate Stability Matters

  • Strong compatibility with existing and large-scale projects
  • Extensive documentation and examples
  • Proven approach

Choose Spring gRPC for Modern Spring Projects

  • Optimized for Spring Boot 3.x and Spring Framework 6.x
  • Evolves closely with the Spring ecosystem
  • Suitable for AOT and GraalVM Native Image

Do Not Mix Them

The libraries manage servers and Stubs differently and should not coexist in one application.

Conclusion

net.devh

  • Third-party project
  • Mature and stable
  • A solution from the Spring Boot 1.x and 2.x era

Spring gRPC

  • Official Spring project
  • Supports modern Boot 3, Spring 6, Native, and Observability features
  • Likely to become the standard Spring gRPC solution