[ANN] gRPCClient.jl v1.0.0 — Production-grade gRPC client for Julia

Hello Julia community!

I’m excited to announce the v1.0.0 release of gRPCClient.jl.

Note: As v1.0.0 is a complete rewrite, it is a breaking release and is incompatible with previous versions.

Features

  • All four gRPC RPC patterns — unary, server streaming, client streaming, and bidirectional streaming
  • Thread-safe — safe for use with @async and Threads.@spawn
  • Carefully tuned memory management — minimizes allocations and avoids unnecessary copying
  • Synchronous and asynchronous interfacesgrpc_sync_request, grpc_async_request / grpc_async_await
  • ProtoBuf.jl 1.X integration — generate Julia client stubs directly from .proto files

Reliability & Testing

Reliability under load was a major focus of this release. The codebase has been extensively audited and stress tested across all RPC patterns, including long-running workloads designed to surface stability issues and resource leaks. The result is 90% test coverage, with tests covering unary and streaming calls under concurrent load, varying payload sizes, and edge cases like server unavailability and deadline expiry.

A suite of stress workloads and benchmarks is included via gRPCClientUtils.jl for anyone who wants to validate behavior in their own environment.

The package was also audited for potential security / memory safety issues by both myself and Claude and has been through many rounds of hardening at this point.

Links

A Note on AI Usage

AI assistance was used in a limited capacity during this release — specifically for helping write tests, documentation, this announcement, and finding bugs. No AI-generated code was merged into the main codebase. While we don’t rule out broader use in the future, any AI-assisted contributions will be subject to extensive human review before merging. A stable client that is free of hangs and deadlocks is our #1 priority, and that requires a level of scrutiny that we are not willing to compromise on.

Acknowledgements

  • Thanks to the amazing Julia registry folks on Slack for getting me connected to the right people in JuliaIO.
  • Tanmay for all the help getting me setup in JuliaIO, upstreaming changes into ProtoBuf.jl, and just generally helping me understand the process to get this across the finish line.
  • Medical Metrics Inc. for sponsoring development time spent fixing bugs and performance issues we uncovered during internal testing.
  • A big thanks to all contributors — and to everyone who filed issues and tested the library.
  • This package builds on aspects of the prior 0.1 version of gRPCClient.jl and Downloads.jl. Without having these packages to reference this would have been a considerably larger undertaking.

Feedback and contributions welcome!

Awesome!
Congratulations on getting this out. It’s a great addition to the ecosystem.

Now that HTTP.jl 2.0 has HTTP/2 support, I went ahead and did an initial implementation of a gRPC server package as I have an immediate need for one due to a recent initiative. The interface is inspired by gRPCClient.jl and Oxygen.jl, but one of the design goals is to be able to be usable/extensible for downstream packages that are meant to be dependencies as well as immediate applications. Of course it integrates with the latest ProtoBuf.jl for code generation, building ontop of the work that was done for gRPCClient.jl.

I’ve been running stress tests against the the initial implementation looking for bugs and so far so good mostly. There is a minor issue with bidirectional streaming I need to work out. Performance isn’t quite on the level of the Go test server used by gRPCClient.jl, but there is likely a decent amount of optimization left on the table, especially when it comes to large protobufs.

TLDR: a Julia gRPC server package is happening in the near future. Both packages will be tightly integrated with eachother for testing purposes, and I’m trying to make interfaces as consistent as possible where it makes sense. I won’t release anything till I’m confident that its rock solid / production ready.