v1.0.4 (2026-0-15)
Bug Fixes
- Remove dangling typespecs
v1.0.3 (2026-07-27)
Enhancements
- Client connections can now be declared in an application's supervision tree as a
GRPC.Client.Connectionchild spec. Supervised connections establish asynchronously and retry with exponential backoff when the backend is unreachable, instead of failing supervisor startup. New public API:GRPC.Client.Connection.get_channel/1,get_channel!/1, andawait_ready/2. - Connection processes emit telemetry events for lifecycle transitions (
[:grpc, :client, :connection, :connected],[:grpc, :client, :connection, :connect_error],[:grpc, :client, :connection, :disconnected]) and for callers blocking inawait_ready/2([:grpc, :client, :connection, :await_ready, :start]and[:grpc, :client, :connection, :await_ready, :stop]).
Behavior Changes
GRPC.Client.Connection.connect/2now waits at most:connect_timeout(default: 15000 ms) for the first establishment attempt instead of blocking indefinitely.- When all resolved addresses fail to dial,
connect/2returns the first underlying dial error (e.g.{:error, :connection_refused}) instead of{:error, :no_addresses}. - Calling
connect/2with a:namealready registered to a different target now returns{:error, {:already_started_with_different_target, target}}instead of silently returning the existing connection's channel.
Bug Fixes
- Fixed a client supervisor child leak on failed and closed connections in
GRPC.Client.Connection. - Fixed Mint adapter connection stability when a stream response process exits unexpectedly, preventing the whole connection process from crashing.
- Fixed a Mint adapter
BadMapErrorinState.stream_response_pid/2. - Removed the
GRPC.Channel.t()typespec. It declaredhost/portnon-nil andinterceptorsas[], but a virtual channel (built withhost: nil/port: niland a non-emptyinterceptorslist) violated the type. Combined withpick_channel/2's@spec, this made Dialyzer inferconnect/2could only return{:error, _}, spuriously flagging{:ok, channel}matches in downstream code as unreachable. References to the type are nowstruct().
v1.0.0 (2026-06-15)
Enhancements
- The client and server implementations were separated into two distinct packages to improve modularity and maintainability.
- A t() typespec was added to GRPC.Server.Adapters.ReportException to improve type documentation and tooling support.
- IPv6 support was added to the gRPC gun adapter, enabling connections over IPv6 networks.
- Virtual channels can now be explicitly named, allowing clearer identification and management of channels.
- Support was added for grpc-web trailers encoded in the message body, improving compatibility with grpc-web clients.
- Periodic DNS re-resolution is now supported for client-side service discovery, enabling automatic detection of new backends and removal of stale ones. New connect options:
resolve_interval,max_resolve_interval,min_resolve_interval. Public API:GRPC.Client.Connection.resolve_now/1. :gunand:mintare now optional dependencies, allowing users to include only the HTTP client adapter they need.- Elixir 1.20 is now supported with updated dependency constraints.
Bug Fixes
- Fixed an issue in stream map_error where send_response handling could behave incorrectly.
- Resolved a persistent_term memory leak in GRPC.Client.Connection that occurred when a connection was disconnected.
- Corrected the cacertfile option name.
- Added detection of name collisions and introduced a fallback mechanism for the call function.
- Fixed broken benchmark links in the project.
- Resolved two compiler warnings/errors in grpc.
- Ensured $callers are properly propagated in GRPC.Stream Flow workers.
- Fixed address key generation in handle_info(:refresh) to correctly support Unix domain sockets.
- Fixed an issue where buffers were not fully drained when a single HTTP/2 frame carried multiple gRPC messages.
- Resolved a client disconnection handling issue.
- Fixed type system warnings related to Elixir 1.19.
- Fixed an error handling issue in stream map_error.
- Corrected the connection state initialization created by build_direct_state.
- Fixed IPv6 target normalization and parsing crashes in
GRPC.Client.Connection. Bracketed IPv6 addresses and bare IPv6 addresses are now correctly parsed across all resolver scheme prefixes. - Fixed named Gun channels being terminated when the original caller process exits by moving connection ownership into adapter-owned processes.
- Fixed named channels to be scoped to the local node, preventing cross-node name collisions.
- Fixed a zip bomb vulnerability in the gzip compressor.
- Fixed the
GRPC.RPCErrortype specification.
Documentation Fixes
- Corrected documentation related to unary responses and added clarification about the adapter_opts.cred option.
v0.11.5 (2025-11-14)
Enhancements
- Feat add
exception_log_filteroption to server
Bug fixes
- Fix ensure thers is only one
GRPC.Client.Supervisor. - Fix report
GRPC.Errorsas normal shutdowns
v0.11.4 (2025-11-07)
Enhancements
- Feat added new function to handle side-effects.
- Feat added error handler for unary and stream pipelines.
- Docs adds a better explanation of the different types of input.
- Docs improvements to module documentation.
- Docs livebooks added directly to the documentation.
Bug fixes
- Fix refresh error spam on direct_state (no lb).
- Fix correct return type in doc.