The Java gRPC implementation. HTTP/2 based RPC
Java Other
zpencer Fix jdk10 support in travis (#4653)
For jdk10: disable errorprone and fix javadoc warnings
Latest commit 37e6f5f Jul 19, 2018
Permalink
Failed to load latest commit information.
.github all: update github issue template Nov 17, 2017
all all: add gradle format checker Jun 12, 2018
alts alts: add call credential security level attribute (#4657) Jul 19, 2018
android-interop-testing Start 1.15.0 development cycle (#4650) Jul 18, 2018
android Start 1.15.0 development cycle (#4650) Jul 18, 2018
auth all: add gradle format checker Jun 12, 2018
benchmarks compiler,stub: update RpcMethod docs and usage Jul 13, 2018
buildscripts buildscripts: remove grpc-java-releasing docker container Jul 11, 2018
compiler Start 1.15.0 development cycle (#4650) Jul 18, 2018
context context/core/netty: Add @CheckReturnValue to Context May 15, 2018
core Start 1.15.0 development cycle (#4650) Jul 18, 2018
cronet Start 1.15.0 development cycle (#4650) Jul 18, 2018
documentation Start 1.15.0 development cycle (#4650) Jul 18, 2018
examples buildscript: fix jdk-switcher bug always always setting jdk8 (#4652) Jul 18, 2018
gae-interop-testing all: add gradle format checker Jun 12, 2018
gradle/wrapper Bump to Gradle 4.7 May 17, 2018
grpclb compiler,stub: update RpcMethod docs and usage Jul 13, 2018
interop-testing compiler,stub: update RpcMethod docs and usage Jul 13, 2018
netty netty: Fix regression in Java 9 ALPN support Jul 10, 2018
okhttp Propagate EquivalentAddressGroup attributes to transports Jul 9, 2018
protobuf-lite protobuf{,lite,nano}: make more classes final Jun 19, 2018
protobuf-nano protobuf{,lite,nano}: make more classes final Jun 19, 2018
protobuf protobuf{,lite,nano}: make more classes final Jun 19, 2018
services services: binlog status code, msg, details (#4551) Jul 17, 2018
stub compiler,stub: update RpcMethod docs and usage Jul 13, 2018
testing-proto compiler,stub: update RpcMethod docs and usage Jul 13, 2018
testing Propagate EquivalentAddressGroup attributes to transports Jul 9, 2018
.gitattributes Add native support for Protobuf Lite Mar 22, 2016
.gitignore Partial fix for fresh Intellij import Dec 15, 2017
.travis.yml Fix jdk10 support in travis (#4653) Jul 19, 2018
AUTHORS all: update to Apache 2 licence May 31, 2017
BUILD.bazel all: normalize copyright header May 3, 2018
COMPILING.md COMPILING.md: Added note for IntelliJ building (#3958) Jan 11, 2018
CONTRIBUTING.md Update CONTRIBUTING.md to CNCF CLA Dec 11, 2017
LICENSE fix LICENSE file (#3107) Jun 20, 2017
NOTICE.txt all: normalize copyright header May 3, 2018
README.md Update README to reference 1.13.1 (#4580) Jun 21, 2018
RELEASING.md RELEASING.md: Remove manual artifact documentation Jul 12, 2018
SECURITY.md examples: replace client certificate in trust store in 'Hello world e… Jun 13, 2018
WORKSPACE all: rename Bazel workspace to io_grpc_grpc_java Feb 22, 2018
build.gradle Fix jdk10 support in travis (#4653) Jul 19, 2018
codecov.yml Disable codecov comment and changes status May 2, 2016
gradlew all: update to gradle 4.0.1 Jul 12, 2017
gradlew.bat all: update to gradle 3.2 Nov 23, 2016
java_grpc_library.bzl Bazel: Fix compilation in Java 9 Apr 26, 2018
repositories.bzl core: update opencensus to 0.12.3. (#4530) Jun 4, 2018
run-test-client.sh interop-testing: -PskipCodegen requires =true Nov 1, 2016
run-test-server.sh interop-testing: -PskipCodegen requires =true Nov 1, 2016
settings.gradle all: add gradle format checker Jun 12, 2018

README.md

gRPC-Java - An RPC library and framework

gRPC-Java works with JDK 6. gRPC-Java clients are supported on Android API levels 14 and up (Ice Cream Sandwich and later). Deploying gRPC servers on an Android device is not supported.

TLS usage typically requires using Java 8, or Play Services Dynamic Security Provider on Android. Please see the Security Readme.

Homepage: grpc.io
Mailing List: grpc-io@googlegroups.com

Join the chat at https://gitter.im/grpc/grpc Build Status Coverage Status

Download

Download the JARs. Or for Maven with non-Android, add to your pom.xml:

<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty</artifactId>
  <version>1.13.1</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.13.1</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.13.1</version>
</dependency>

Or for Gradle with non-Android, add to your dependencies:

compile 'io.grpc:grpc-netty:1.13.1'
compile 'io.grpc:grpc-protobuf:1.13.1'
compile 'io.grpc:grpc-stub:1.13.1'

For Android client, use grpc-okhttp instead of grpc-netty and grpc-protobuf-lite or grpc-protobuf-nano instead of grpc-protobuf:

compile 'io.grpc:grpc-okhttp:1.13.1'
compile 'io.grpc:grpc-protobuf-lite:1.13.1'
compile 'io.grpc:grpc-stub:1.13.1'

Development snapshots are available in Sonatypes's snapshot repository.

For protobuf-based codegen, you can put your proto files in the src/main/proto and src/test/proto directories along with an appropriate plugin.

For protobuf-based codegen integrated with the Maven build system, you can use protobuf-maven-plugin (Eclipse and NetBeans users should also look at os-maven-plugin's IDE documentation):

<build>
  <extensions>
    <extension>
      <groupId>kr.motd.maven</groupId>
      <artifactId>os-maven-plugin</artifactId>
      <version>1.5.0.Final</version>
    </extension>
  </extensions>
  <plugins>
    <plugin>
      <groupId>org.xolstice.maven.plugins</groupId>
      <artifactId>protobuf-maven-plugin</artifactId>
      <version>0.5.1</version>
      <configuration>
        <protocArtifact>com.google.protobuf:protoc:3.5.1-1:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.13.1:exe:${os.detected.classifier}</pluginArtifact>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>compile-custom</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

For protobuf-based codegen integrated with the Gradle build system, you can use protobuf-gradle-plugin:

apply plugin: 'java'
apply plugin: 'com.google.protobuf'

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
    // gradle versions
    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.3'
  }
}

protobuf {
  protoc {
    artifact = "com.google.protobuf:protoc:3.5.1-1"
  }
  plugins {
    grpc {
      artifact = 'io.grpc:protoc-gen-grpc-java:1.13.1'
    }
  }
  generateProtoTasks {
    all()*.plugins {
      grpc {}
    }
  }
}

How to Build

If you are making changes to gRPC-Java, see the compiling instructions.

Navigating Around the Source

Here's a quick readers' guide to the code to help folks get started. At a high level there are three distinct layers to the library: Stub, Channel & Transport.

Stub

The Stub layer is what is exposed to most developers and provides type-safe bindings to whatever datamodel/IDL/interface you are adapting. gRPC comes with a plugin to the protocol-buffers compiler that generates Stub interfaces out of .proto files, but bindings to other datamodel/IDL should be trivial to add and are welcome.

Key Interfaces

Stream Observer

Channel

The Channel layer is an abstraction over Transport handling that is suitable for interception/decoration and exposes more behavior to the application than the Stub layer. It is intended to be easy for application frameworks to use this layer to address cross-cutting concerns such as logging, monitoring, auth etc. Flow-control is also exposed at this layer to allow more sophisticated applications to interact with it directly.

Common

Client

Server

Transport

The Transport layer does the heavy lifting of putting and taking bytes off the wire. The interfaces to it are abstract just enough to allow plugging in of different implementations. Transports are modeled as Stream factories. The variation in interface between a server Stream and a client Stream exists to codify their differing semantics for cancellation and error reporting.

Note the transport layer API is considered internal to gRPC and has weaker API guarantees than the core API under package io.grpc.

gRPC comes with three Transport implementations:

  1. The Netty-based transport is the main transport implementation based on Netty. It is for both the client and the server.
  2. The OkHttp-based transport is a lightweight transport based on OkHttp. It is mainly for use on Android and is for client only.
  3. The inProcess transport is for when a server is in the same process as the client. It is useful for testing.

Common

Client

Server

Examples

The examples and the Android example are standalone projects that showcase the usage of gRPC.

Tools

APIs annotated with @Internal are for internal use by the gRPC library and should not be used by gRPC users. APIs annotated with @ExperimentalApi are subject to change in future releases, and library code that other projects may depend on should not use these APIs. We recommend using the grpc-java-api-checker (an Error Prone plugin) to check for usages of @ExperimentalApi and @Internal in any library code that depends on gRPC. It may also be used to check for @Internal usage or unintended @ExperimentalApi consumption in non-library code.