Skip to content

Releases: grpc/grpc

Development Release 0.12.0

14 Jan 22:54
Compare
Choose a tag to compare
Pre-release

Release 0.12.0

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

c-core:

  • gpr_timespec is now platform agnostic (#4397)
  • Windows support:
  • C core can be build on Windows x64
  • We are no longer using _USE_32BIT_TIME_T
  • Better support for VS2015, nuget packages are now VS2015 ready.
  • Migrated to OpenSSL 1.0.2d nuget package.
  • API breakage grpc_credentials objects.
  • grpc_credentials have been deleted.
  • We now have grpc_channel_credentials that can be set on a channel.
  • And grpc_call_credentials that can be set on a call.
  • These credentials can be composed using:
    - grpc_composite_channel_credentials_create which takes a grpc_channel_credentials and grpc_call_credentials as parameters and return a grpc_channel_credentials.
    - grpc_composite_call_credentials_create which take two grpc_call_credentials as parameters and return a grpc_call_credentials.

cpp:

  • API breakage Credentials objects.
  • Credentials class has been deleted.
  • We now have ChannelCredentials that can be set on a channel.
  • And CallCredentials that can be set on a call (i.e. ClientContext in C++).
  • These credentials can be composed using:
    - CompositeChannelCredentials which takes a ChannelCredentials and CallCredentials as parameters and return a ChannelCredentials.
    - CompositeCallCredentials which take two CallCredentials as parameters and return a CallCredentials.

python:

  • API breakage Credentials objects.
  • Credentials class has been deleted.
  • We now have ChannelCredentials that can be set on a channel.
  • And CallCredentials that can be set on a call
  • These credentials can be composed using
    - composite_call_credentials to combine two CallCredentials objects into a single CallCredentials
    - composite_channel_credentials to combine a ChannelCredentials and a CallCredentials into a ChannelCredentials
  • API breakage: secure_channel now takes a ChannelCredentials rather than a Credentials.
  • Added auth plugin API. This allows construction of a CallCredentials object based around a behavior that is evaluated per-call, passed the call’s metadata, and returns the metadata to use for the call instead.

ruby:

  • API breakage Credentials objects.
  • Credentials class has been deleted.
  • We now have ChannelCredentials that can be set on a channel
  • And CallCredentials that can be set on a call
  • These credentials can be composed using
    - ChannelCredentials#compose, which takes any number of CallCredentials and returns a ChannelCredentials
    - CallCredentials#compose, which takes any number of CallCredentials and returns a CallCredentials.
  • API breakage: Channel and ClientStub constructors now accept the ChannelCredentials argument as the last mandatory positional argument instead of an optional keyword argument. Alternatively, the symbol :this_channel_is_insecure can be passed to indicate that credentials are needed.
  • Added auth plugin API. This allows for CallCredentials to be created with a proc that adds arbitrary metadata.
  • Now throws an error if passed invalid metadata keys or values

php:

  • API breakage Credentials objects.
  • Credentials class has been deleted.
  • We now have ChannelCredentials that can be set on a channel
  • And CallCredentials that can be set on a call
  • These credentials can be composed using
    - ChannelCredentials::createComposite, which takes a ChannelCredentials and a CallCredentials and returns a ChannelCredentials
    - CallCredentials::createComposite, which takes 2 CallCredentials and returns a CallCredentials.
  • Added auth plugin API. This allows for CallCredentials to be created with a callback function that adds arbitrary metadata. (#4394)
  • Applications can now specify primary user agent string in a spec-compliant way (#4090)
  • Implemented all remaining regular and auth interop tests (#3758, #3854)
  • Validate and normalize metadata keys (#3790)
  • Added more unit test code coverage (#3900)

csharp:

  • New plugin-enabled auth API has been introduced.
  • Applications can now specify primary user agent string in a spec-compliant way (#4365)
  • Use ConfigureAwait(false) in await statements where needed (#4292)
  • grpc.native.csharp package renamed to comply with dnu tool rules (#3749)
  • Misc:
  • Code coverage now generated for C# (currently at 90%).
  • Implemented C# performance worker to conduct performance tests.
  • Added simple support for performance instrumentation to facilitate future optimization efforts.

node:

  • Bundled C core with Node library. Node gRPC now has no external dependencies.
  • API breakage Credentials class
  • The Credentials class has been deleted, and replaced with the credentials submodule
  • We now have ChannelCredentials that can be set on a channel. They are returned by credentials.CreateSsl
  • And CallCredentials that can be set on a call. They are returned by credentials.createFromMetadataGenerator and credentials.createFromGoogleCredential.
  • These credentials can be composed using
    - credentials.combineChannelCredentials, which takes a ChannelCredentials and any number of CallCredentials, and returns a ChannelCredentials
    - credentials.combineCallCredentials, which takes any number of CallCredentials and returns a CallCredentials.
  • Added auth plugin credentials API. This allows for CallCredentials to be created with callbacks that add arbitrary metadata.

Development Release 0.11.1

23 Sep 01:02
Compare
Choose a tag to compare
Pre-release

Release 0.11.1

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

This release fixes issues that were found in the 0.11.0 release:

c-core:

  • Solved an issue where events could be processed with a long delay, especially during the establishment of a connection. See #3203, #3319, #3332, and #3350.
  • Removed some superfluous log messages.
  • Fixed an issue with the processing of auth metadata where call data of the server auth filter could be used after being freed. See #3286, #3291.
  • Fixed a bug where cancellation ops could be sent to the client auth filter. See #3390.
  • Fixed the Makefile so the BUILDDIR variable can be pointing at either an absolute or a relative directory.

cpp:

  • The file grpc++/grpc++.h will now be installed on the system by make install.

python:

  • Fatal bug fix in channel implementation.
  • Python documentation generation script is fixed.
  • Updated external dependencies.

php:

  • Added code examples for Apache and Nginx/PHP-FPM.

csharp:

  • Adjustments in Grpc.Core.Logging.ILogger interface. See #3374.
  • Fix in C# interop client.
  • Updated namespace of routeguide example.

node:

  • Fixed a server crash when a client disconnects during a call.
  • Fixed a couple of memory leaks.
  • Updated nan dependency to 2.0 for compatibility with Node 4.0.

Beta Release 0.11.0

09 Sep 18:40
Compare
Choose a tag to compare
Beta Release 0.11.0 Pre-release
Pre-release

Release 0.11.0: BETA

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Beta release of github.com/grpc/grpc.

As of this release, we expect no major API changes to any gRPC implementation.

Known issues:

  • Windows: some extraneous log messages are printed, but they should not impact functionality nor stability (see #3289 and #3290)
  • Memory corruption may occur on the server when using server-side authentication. If you are using server-side authentication and this is affecting you, a patch is available at 1fe38ff
  • PHP extension is unstable with Apache/Nginx, we are actively working to resolve that. See issue #2275.

c-core:

  • Added void* reserved arguments to public facing API’s for future expansion.
  • Windows builds have been greatly stabilized.
  • Fixed zero-poll-time completion queue usage.
  • Fixed cases where flow control could permanently stall a stream.
  • Support default host name discovery by name resolvers.
  • Expose peer address for grpc_call objects.
  • Added support for different name resolvers.
  • Switched channel target strings to be URI’s instead of host:port pairs.
  • Support for automatic propagation of context from incoming server calls to outgoing client calls.
  • Removed testing fake_security credentials.
  • Support CLOCK_MONOTONIC and CLOCK_REALTIME as sources of time (and provide equivalents on Mac, Windows).
  • Reject invalid metadata on send.
  • Renamed insecure functions to include ‘insecure’ in their name.
  • Added compression support.
  • Introduced a lock free incoming request path for servers.
  • Added server-side authentication metadata processing for users to plug-in their own authentication system.
  • Removed legacy service accounts credentials for google auth. These are superseded by service account jwt access credentials which do not need explicit scopes.
  • Added SSL server credentials option to force client SSL authentication.
  • Census - Added API framework for:
  • Tracing
  • Context
  • Tagging
  • Views
  • Resource Usage
  • Aggregated Statistics

cpp:

  • Various public API cleanup.
  • Added string_ref class to public API.
  • Added channel state API, server async rpc finish detection API.
  • Added server-side auth metadata processor (see core).
  • Dynamic-sized thread pool at server.
  • Added iterator for auth context.
  • Added accessors for peer address to context objects.
  • Removed legacy service accounts credentials for google auth. These are superseded by service account jwt access credentials which do not need explicit scopes.
  • Added Doxygen-style documentation to public API.
  • Added SSL server credentials option to force client SSL authentication.

python:

  • Added beta API in grpc.beta package (early adopter API unchanged and still available in grpc.early_adopter package).
  • Future-returning asynchronous RPC invocation attribute renamed from “async” to “future”.
  • Server port specification now done in “add_insecure_port” and “add_secure_port” methods, and servers may serve on arbitrarily many ports.
  • Lifecycles for stubs may optionally be left to Python’s GC.
  • Full metadata support.
  • Full status code and details support.
  • Flow control.
  • Status code conformance with rest of gRPC.
  • Servers afford immediate shut-down semantics.
  • Tests moved from grpcio distribution to grpcio_test distribution.

ruby:

  • Updated the gem file, ensuring the interop and sample binaries are stored correctly.
  • Pruned unneeded dependencies.
  • Made the logger implementation pluggable.
  • Updated server shutdown to fix bugs and improves its consistency.
  • Added a health check server.
  • Made the security explicit during channel construction.
  • Updated the secure rpc server api allow it support multiple certificates.
  • Added a context propagation API.

php:

  • Current version is 0.6.0.
  • Added per-message compression API.
  • Added connectivity state API.
  • Exposed per-call host override option.
  • Added user agent, channel target, and call peer.

csharp:

  • Current version is 0.7.0.
  • Added support for proto3.
  • Assemblies in NuGet packages are now signed.
  • Full API support for metadata (request headers, response headers, response trailers).
  • GrpcEnvironment.Initialize() and Shutdown() are now implicit and have been removed from the API.
  • Grpc.Auth now uses Google.Apis.Auth library for OAuth2 and JWT based auth. That brings full support for Application Default Credentials.
  • Added API support for deadlines.
  • Added per-message compression API.
  • Added context-propagation API.
  • Miscellaneous public API polishing (channels, servers, security etc.)
  • Stability fixes on both Linux and Windows.

objective-c:

  • Breaking changes:
  • SingleValueHandler and StreamHandler were shortened to SingleHandler and EventHandler respectively.
  • The way to make non-SSL connections now spells clearly that the connection is insecure, instead of just subtly implying it.
  • GRPCDelegateWrapper is now part of the Rx library (as GRXConcurrentWriteable), and independent of gRPC (or RPC systems in general).
  • GRPCMethodName is now part of the ProtoRPC library (as ProtoMethod). With this, the GRPCClient library is now completely independent of protocol buffers. For consistency with the protobuf syntax, its “interface” property is now called “service”.
  • GRXWriter is now an “abstract” class that writers have to inherit, instead of a protocol to which they have to conform. This way all writers get automatically extended with categories like transformations, or timeout. This also lets us add a helper class to simplify implementing a writer.
  • Related to headers and trailers:
    - The request and response metadata properties of a GRPCCall object don’t expose multiple values for the same header name anymore. This simplifies the usage of the common use case.
    - The “-bin” trick used to send and receive headers with binary values isn’t hidden anymore, for consistency with the other implementations of gRPC (all of which were exposing it): Now request headers with NSData values need a name ending in “-bin”, and the suffix isn’t stripped from the names of response metadata with binary values.
    - Request header names and values are now validated, and can’t be modified after an RPC is started. Not all methods of NSMutableDictionary are yet exposed again for them.
    - The dictionary of request headers can’t be set; instead it is initialized with the GRPCCall object (and can still be mutated).
    - Response headers and trailers are now different properties of the RPC object. This lets one access the response headers (e.g. using KVO) before the first response message is received, which is important for some use cases.
  • Non-breaking additions:
  • The domain and codes of NSError objects returned by the library are now part of the public API, and documented.
  • Connecting to test SSL servers is supported now.
  • New OAuth2 helpers ease setting an access token for an RPC and retrieving the challenge header if authentication failed.
  • Bazel can now be used instead of Cocoapods, if a BUILD file for OpenSSL is provided by the user.
  • When an RPC fails, the NSError object passed to the writeable now carries the response headers and trailers of the call. This simplifies error-handling code.
  • Fixes:
  • The names of the files generated by protoc have now correct casing, which is needed in Linux.
  • [GRXWriter emptyWriter] now returns a new non-started writer every time.
  • Fixed a race condition triggered when an RPC ended prematurely.
  • Stopped using a Cocoa method not supported by iOS 6.
  • Response trailers are now set.

node:

  • Changed Server construction interface.
  • Changed server metadata handling to per-method.
  • Added per-message compression API.
  • Changed Client construction and Server port binding to require credentials objects.
  • Added Credentials.createInsecure and ServerCredentials.createInsecure to explicitly construct unsecured Clients and bind servers to unsecured ports.
  • Added grpc.waitForClientReady.
  • Added API for propagating parent call information to delegate gRPC calls on servers.
  • Changed Server#listen to Server#start.
  • Replaced Server#shutdown with asynchronous Server#tryShutdown and synchronous Server#forceShutdown.
  • Changed ServerCredentials.createSsl API to allow multiple key/cert pairs, and added a parameter.
  • Added a Metadata class, and changed all APIs to use it instead of bare objects.

Development Release 0.10.2

27 Aug 01:48
Compare
Choose a tag to compare
Pre-release

Release 0.10.2

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

c-core:

Fixed a test bug affecting build of debian packages on 32-bit systems (#2950)

Development Release 0.10.1

31 Jul 03:21
Compare
Choose a tag to compare
Pre-release

Release 0.10.1

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

c-core:

  • Several stability fixes on Windows (#1650, #2708)
  • Silencing some unnecessary log messages on Windows (issue #2402)

cpp:

  • Better stability on Windows because of fixes in c-core

csharp:

  • Current version is 0.6.1
  • Better stability on Windows because of fixes in c-core

Development Release 0.10.0

10 Jul 06:17
Compare
Choose a tag to compare
Pre-release

Release 0.10.0

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

c-core:

  • Removed the backup poller.
  • Now exports dependency information for pkg-config.
  • Close file descriptors when they are no longer in use on POSIX based systems.
  • Client configuration infrastructure implemented.
  • Miscellaneous stability bug fixes.
  • JWT verifier library (without caching for now).
  • HTTP2 transport can now parse and write concurrently.
  • Fixed memory leak on Windows (#2125).
  • ALPN is no longer a mandatory feature, meaning that OpenSSL 1.0.1 is now the lowest required version.

cpp:

  • Status API update.
  • Support raw access token credentials.
  • Support register service to a host.
  • Support metadata in grpc_cli tool.
  • C++ library can be compiled without protobuf.
  • Adding support for AuthContext both client and server side.

python:

  • #1558 Raises batching semantics from the C API layer into Python.
  • #2249 Fixes initial metadata being sent with terminal metadata from the server.
  • #2034 Ensures C89 compatibility for the C API layer.

php:

  • Alpha Release version 0.5.1.
  • Released as Packagist package and PECL extension.
  • Simple homebrew/linuxbrew installation.
  • Hello World and Route Guide tutorials.
  • #2222 Fixes PHP extension bug on MacOS.

csharp:

  • Rewrote and simplified API for channel options (formerly channel args).
  • Stopped using PInvoke native-to-managed callbacks in most cases (performance boost + simplicity).
  • Added host and port constructor overload for new channels (#1992).
  • Replaced Microsoft.Bcl.Immutable NuGet dependency by System.Collections.Immutable.
  • Better stability on Linux.

objective-c:

  • Trailing metadata support.
  • Metadata API surface simplified.
  • Bazel support.
  • Changed some function and parameter names in code generator and runtime libraries.

Development Release 0.9.1

05 Jun 18:42
Compare
Choose a tag to compare
Pre-release

Release 0.9.1

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

This release contains a few critical fixes for problems introduced in 0.9.0:

  • Fixing a crash in the Windows version of the protoc plugins.
  • Fixing the per-call credentials feature that was introduced in 0.9.0.
  • Fixing the HTTP2 ALPN support announcement to be compatible with Android.
  • Fixing auth support for objective-C.

Development Release 0.9.0

27 May 01:22
Compare
Choose a tag to compare
Pre-release

Release 0.9.0

Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

The following languages in this repo are alpha, and also at version 0.9.0:

  • c-core
  • cpp
  • ruby
  • node
  • python
  • php

The following languages are now ready for alpha testing, both at version 0.5.0:

  • csharp
  • objective-c

Additional details:

c-core:

  • Stability fixes and improvements for the Windows platform.
  • Ability to add per-call credentials.

cpp:

  • C++ wrapping of the c-core functionality.
  • Ability to add per-call credentials.
  • API improvement for async unary call.
  • Compatibility: Improved support for Windows and Mac.
  • API change for credentials (now use shared_ptr as opposed to unique_ptr).

ruby:

  • Enabled JWT access authentication.
  • Added support for returning metadata from the ruby servers.
  • Removed unnecessary dependencies, e.g, xray.
  • Simplified the extension code, updated it to use future-proof ruby.h apis.
  • Various small bug fixes, style improvements and improved stability.

node:

  • Enabled JWT access authentication.
  • Proto3 support.
  • Various small bug fixes and improved stability.
  • Added option to load the JSON proto files generated by pbjs.
  • Client streams emit error events when they receive a non-OK status.

python:

  • MacOS pip install (build, link step) fix, testing (runtime, dynamic link step, environment) fix.
  • Testing stability fix on systems with low ulimits.
  • Internal code clean-up.
  • Development status updated to alpha.

php:

  • Added authentication to the API surface allowing it to authenticate using google-auth-library-php.
  • Enabled JWT access authentication.
  • Simplified the extension code.

csharp:

Exposes client and server features provided by the C core via P/Invoke. Ready for Alpha testing.

Client
  • Supports unary and streaming RPCs to gRPC servers.
  • Asynchronous stub interface compatible with async/await. Synchronous method stubs are provided for simple calls as a convenience.
  • Supports secure and insecure connections.
  • Allows metadata be attached to requests, enabling alternate authorization.
  • Prototype of integration with Google authorization libraries providing.
    • GCE.
    • Service Account.
Server
  • Multithreaded RPC server, that supports both secure and insecure connections.
  • Handles unary and streaming RPCs from gRPC clients, allowing async handlers.
OS support
  • Windows: fully functional with .NET and Visual Studio. There’s a known problem at shutdown #1650 (not limiting the usability).
  • Linux: fully functional with Mono and Monodevelop.
  • MacOS: functional, but only under 64-bit Mono, which harms development experience when using Xamarin Studio.

objective-c:

  • Moved Protobuf support to version 3, which includes client and server streaming. The generated classes for proto messages are also much simpler to use in proto3.
  • Added the protoc plugin to generate a client library from services defined in .proto files.
  • Added instructions to install, depend on, and use the library.
  • Added more interop tests, which also show how to use features of the library that weren’t used before.
  • Expanded the generic Reactive Extensions library used by Objective-C gRPC.

Development Release 0.6.0

07 Apr 18:38
Compare
Choose a tag to compare
Pre-release

Release 0.6.0

Please see the notes for the previous release here: https://github.com/grpc/grpc/releases

Development release of github.com/grpc/grpc.

The following languages in this repo are alpha, and also at version 0.6.0

  • c-core
  • cpp
  • ruby
  • node

The following languages are now ready for alpha testing:

  • python - 0.5.0
  • php - 0.5.0

The following languages are not yet ready for alpha testing and the corresponding version numbers are lower:

  • csharp - 0.2.0
  • objective-c - 0.2.0

Additional details:

New in this version:

c-core:

Client and server side implementations:

  • Support for OAuth2 refresh tokens.
  • Support for JWT Access.
  • Default credentials now work with cloud SDK.
    OS supported:
  • Linux: fully functional (native development)
  • MacOS: Build verified
  • Windows: C and C++ support with Visual Studio 2013 and msys2.

cpp:

  • C++ wrapping of the c-core functionality
  • Generic Async interfaces and grpc_cli tool
  • Compatibility : gcc4.4 supported

ruby:

  • Server SSL certificates are now passed to server#bind instead of the server constructor (breaking)
  • Now compatible with Ruby 2.2.0
  • Supported auth now includes support OAuth2 user refresh tokens

node:

  • Node wrapping of the c-core functionality
  • Server SSL certificates are now passed to server#bind instead of the server constructor (breaking)
  • Now compatible with all versions of Node.js starting with 0.10.13, all versions of io.js, and MacOS
  • Now accepts only strings for non-binary metadata values, and returns non-binary metadata values as strings (API Change)
  • Added generic client and server constructors that do not use Protocol Buffers
  • Added support for trailing metadata
  • Supported auth now includes support OAuth2 user refresh tokens

python:

  • Packaging and distribution through PyPI
  • Client metadata support
  • Interoperability test implementation
  • Examples and documentation

php:

  • Now works (compiles, tests pass)
  • Added composer file

csharp:

  • Cross-language tests passing
  • Support for secure connections
  • Client side metadata support
  • Lots of code cleanup

objective-c:

  • Support for secure connections.
  • Integration with protobuf 2.6.
  • Cross-language tests passing with Java and C++ servers.

Initial public release

26 Feb 01:01
Compare
Choose a tag to compare
Pre-release

The following languages in this repository are alpha-ready, and also at version 0.5.0

  • c-core
  • cpp
  • ruby
  • node

The following languages are not yet ready for alpha testing and the corresponding version numbers are lower:

  • python - 0.4.0
  • php - 0.3.0
  • csharp - 0.1.0
  • objective-c - 0.1.0

Additional details:

C (core)

In this version:
Client and server side implementations:

  • OpenSSL integration
  • chttp2 HTTP/2 and HPACK implementation
  • gpr runtime
  • gRPC generic implementation
  • Unary and streaming RPCs
  • Metadata support
    Client side Credentials implementations
  • GCE
  • Service Account
  • GoogleDefault
    Server-side only features
  • SSLCredentials support

OS support

  • Linux: fully functional (native development)
  • MacOS: functional, albeit missing some optimizations (kqueue)
  • Windows: semi-functional, pre-alpha status.

C++

  • C++ wrapping of the c-core functionality
  • Type-safe synchronous and Async interfaces
  • proto3 integration

Ruby

Exposes client and server features provided by the C-core via an extension
Client

  • Supports unary and streaming RPCs to gRPC servers
  • Synchronous stub surface
  • Supports secure and insecure connections
  • Integrates with Google authorization libraries providing
    • GCE
    • Service Account
    • GoogleDefault
  • Allows metadata be attached to requests, enabling alternate authorization

Server

  • Multithreaded RPC server, that supports both secure and insecure connections
  • Handles unary and streaming RPCs from gRPC clients
    Data serialization
  • default codegen is done via a proto3 plugin shipped with the release
  • default codegen creates clients/servers that serialize using proto3 ruby
  • other serialization schemes possible by changing the code generator

Node

Exposes client and server features provided by the C-core via an extension
Client

  • Supports unary and streaming RPCs to gRPC servers
  • Supports secure and insecure connections
  • Integrates with Google authorization libraries providing
    • GCE
    • Service Account
    • GoogleDefault
  • Allows metadata be attached to requests, enabling alternate authorization

Server

  • Handles unary and streaming RPCs from gRPC clients
  • exposes the underlying C server via the Node.js event loop
    proto2 integration (with streaming methods) using ProtoBuf.js

Python

Exposes client and server features provided by the C-core via a paired extension and library

  • Supports unary-unary, unary-streaming, streaming-unary, and streaming-streaming RPCs
  • Supports both synchronous and asynchronous RPC invocation
  • Supports insecure and secure servers
  • Supports insecure stubs

PHP

Initial, slightly out of date wrapping of c-core functionality
Synchronous interface
proto2 integration (with streaming methods)

C#

Experimental version with early API draft and an implementation prototype that’s passing some simple tests. Not intended for use yet.

Objective-C

Objective-C wrapper over the C-core library, not intended for use yet.

Current work in progress:

  • Integration of the C-core library with Cocoapods.
  • Protoc-generated layer.

Immediate roadmap:

  • Unit testing and E2E continuous integration testing.