Quarkus

June 1, 2026 · View on GitHub

Build Maven Central License

Documentation: https://docs.quarkiverse.io/quarkus-grpc-zero/dev (after registration with Quarkiverse docs) or see the docs/ module in this repository.


What

gRPC Zero is a drop-in replacement for io.quarkus:quarkus-grpc-codegen, with one major difference:

It removes the need for native protoc executables and plugins. Instead, everything runs directly on the JVM as a single, portable Java dependency.

io.quarkus:quarkus-grpc-codegen is what the io.quarkus:quarkus-grpc extension uses to generate proto messages and services.


Why

The traditional quarkus-grpc-codegen module relies on platform-specific binaries (protoc and plugins). This approach introduces several challenges:

  • OS/architecture compatibility issues: binaries must be shipped for every possible environment.
  • External dependencies: requires tools that may not be available in constrained or hermetic build environments.
  • Maintenance overhead: keeping native executables up to date across platforms is difficult.

gRPC Zero solves these problems by providing:

  • Self-contained code generation: no native tools required.
  • Full portability: identical behavior on any JVM.
  • Lightweight dependency: ~1.1 MB at the time of writing.
  • Consistent results: passes all Quarkus integration tests with no regressions.

The result is a safer, smaller, more reliable way to enable gRPC codegen in Quarkus projects.


How

Instead of downloading native protoc binaries, gRPC Zero uses protobuf4j to run protoc plugins in-process on the JVM:

  1. Collect .proto files from the project and optional Maven dependencies.
  2. Parse descriptors and resolve imports through protobuf4j.
  3. Run the Java, grpc-java, Mutiny, and optional Kotlin plugins without external processes.
  4. Post-process generated sources for Quarkus compatibility.

See How It Works for the full pipeline.


Getting Started

To enable gRPC code generation in your Quarkus project, add the dependency:

<dependency>
  <groupId>io.quarkiverse.grpc.zero</groupId>
  <artifactId>quarkus-grpc-zero</artifactId>
  <version>VERSION</version>
</dependency>

If you are migrating from io.quarkus:quarkus-grpc, first exclude the original codegen dependency.

    <dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-grpc</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-grpc-codegen</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Also ensure your quarkus-maven-plugin configuration includes the generate-code goal:

<plugin>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-maven-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>build</goal>
        <goal>generate-code</goal>
      </goals>
    </execution>
  </executions>
</plugin>

See Getting Started for more detail.


Configuration

Build-time properties are documented in Configuration Reference.

To skip code generation:

-Dquarkus.zero.grpc.codegen.skip=true

Or in application.properties:

quarkus.zero.grpc.codegen.skip=true

The JVM-only alternative is -Dgrpc.zero.codegen.skip=true.

Thanks

This project is building on the shoulders of giants. Special thanks to: