tsloughter/grpcbox
68.1
Adequate · 2 October 2026
2.7k
lines of production code
Erlang
primary language
2
measurements over time
What this system is
This system is the grpcbox library, an Erlang implementation for building gRPC clients and servers. It provides core functionality for managing HTTP/2 streams, handling unary and streaming RPCs, and supporting middleware via interceptors. The codebase also includes comprehensive tooling for performance benchmarking and interoperability testing against standard gRPC protocols.
How it got here
2017 — grpcbox library initial release
8 changes.
This period marks the initial release of the grpcbox Erlang gRPC library, introducing a complete implementation for clients and servers with support for streaming, interceptors, and load balancing. The work involved a major dependency overhaul, replacing Chatterbox with gRPCbox and restructuring configuration and build profiles to support the new architecture. Comprehensive test coverage was added for error handling, interceptor chains, and interop compliance, alongside updated SSL certificates and generated protocol buffer code.
2018–2022 — gRPC interop and benchmarking support
4 changes.
This period focused on establishing comprehensive testing and observability infrastructure by adding gRPC health check, server reflection, and interop test protocol definitions. It also introduced an Erlang client test suite for interoperability validation and a benchmarking suite to measure performance against standard gRPC benchmarks.
Features
Add grpcbox benchmark utilities
Added a new benchmark suite for grpcbox that implements the standard gRPC benchmarking protocol, allowing users to run performance tests against the library. The suite includes a benchmark server (run via \rebar3 as benchmark shell\) and a Common Test-based client (run via \rebar3 as benchmark ct\) that measure metrics like requests per second and latency. It is compatible with the official Go gRPC benchmark client and server, enabling cross-language performance comparisons.
benchmark · high confidence
Added gRPC health check and server reflection protocol definitions
The proto definitions now include the standard gRPC health check service (grpc.health.v1) and the server reflection service (grpc.reflection.v1alpha). This enables clients to monitor service availability via the Check and Watch RPCs and allows tools to inspect service metadata, file descriptors, and extension numbers at runtime through the bidirectional ServerReflectionInfo stream.
proto · high confidence
Added gRPC interop test protocol definitions
Added the \empty.proto\, \messages.proto\, and \test.proto\ files to the \interop/proto\ directory, establishing the standard gRPC testing service definitions. These files define the \grpc.testing\ package, including the \TestService\ with unary, streaming, and duplex RPC methods, as well as the message types (such as \SimpleRequest\, \Payload\, and \EchoStatus\) and helper services (\UnimplementedService\, \ReconnectService\) required for interoperability testing.
interop/proto · high confidence
Configurable gRPC server with reflection and health services
The interop configuration now defines a gRPC server that exposes the TestService, Health service, and ServerReflection service. This setup enables client-side service discovery and health checking during interop testing, with the server listening on port 8080 using specific SSL certificate paths and HTTP/2 frame settings.
interop/config · high confidence
Initial release of the grpcbox Erlang gRPC library
This change introduces the grpcbox library, providing a complete implementation for gRPC clients and servers in Erlang. It includes core modules for managing channels and subchannels, handling HTTP/2 streams, and processing metadata. The library supports unary and streaming RPCs, configurable interceptors for middleware, and multiple load-balancing strategies. It also ships with generated code and behaviors for the standard Health Check and Server Reflection services, along with a basic health check service implementation.
src · high confidence
Behavioural changes
Expanded type specs and new gRPC status definitions in include/grpcbox.hrl
The include/grpcbox.hrl header has been updated to improve type safety and support for gRPC status handling. The \method\ record now includes relaxed type specifications (allowing \'$1'\ and \'\_'\ atoms) to facilitate pattern matching and introspection. Additionally, the file introduces a new \grpcbox\_def\ record for service definitions, a \CHANNELS\_TAB\ constant, and a comprehensive set of \GRPC\STATUS\\*\ macros mapping standard gRPC status codes (from OK to UNAUTHENTICATED) to string representations, along with helper macros for creating and throwing gRPC errors.
include · high confidence
Migration from Chatterbox to gRPCbox configuration
The application configuration has been migrated from the Chatterbox library to gRPCbox. The previous sys.config file, which defined Chatterbox-specific settings such as stream callbacks and SSL options, has been removed. It is replaced by a new test.config file that configures gRPCbox servers and clients, including service definitions (RouteGuide, Health, Reflection), connection pooling, and OpenCensus telemetry settings.
config · high confidence
Updated gRPC interop test service implementations and generated code
The interop test suite has been updated with new and regenerated source files to support broader gRPC testing capabilities. This includes regenerated protocol buffer modules (test\_pb, messages\_pb, empty\_pb) generated by gpb\_compile 4.7.1, and new service-specific behavior and client modules for grpc.testing.ReconnectService and grpc.testing.UnimplementedService. The grpc.testing.TestService implementation has been expanded to fully support unary, streaming output, streaming input, full-duplex, and half-duplex calls, including handling of metadata, response status codes, and payload compression parameters as defined in the interop test specifications.
interop/src · high confidence
Test coverage
Added Erlang gRPC interop client tests; Added tests for gRPC extended error handling and interceptor chains; Updated test certificates for localhost hostname verification.
Dependencies
Major dependency overhaul and configuration restructuring
The project has replaced its core HTTP/2 dependency with \ts\_chatterbox\ (v0.16.0) and introduced several new dependencies including \ctx\ (v0.6.0), \acceptor\_pool\ (v1.0.0), and \gproc\ (v1.2), while removing \jsx\, \gpb\, \goldrush\, \lager\, and \grpc\_client\. This shift is accompanied by a significant restructure of \rebar.config\ to support new build profiles (test, interop, benchmark), the addition of the \grpcbox\_plugin\ for code generation, and the introduction of \elvis.config\ for code style enforcement.
(repo-wide) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 60 → 68 (+8.4)
- Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 95 → 95 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 35 → 54 (+19.0)
- Readiness 64 → 61 (-3.4)
- Security 93 → 96 (+3.6)
- Event Sourcing 100 → 100 (+0.0)
Resolved (4)
- Coverage not measured — no coverage collector is wired up
- Documentation: no architecture or design documentation (benchmark/README.md)
- Hotspot: src/grpcbox_client.erl (src/grpcbox_client.erl)
- Off-boarding risk: anonymized user #1
New (5)
- Off-boarding risk: anonymized user #1
- Unbounded dependency requirement: acceptor_pool
- Unbounded dependency requirement: chatterbox
- Unbounded dependency requirement: ctx
- Unbounded dependency requirement: gproc
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
tsloughter/grpcbox was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 2bb0533bc51f225a73cd2c0eca5e576c55bbe65d — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.