All notable changes to the ttrpc crate are documented in this file.
The format is based on Keep a Changelog, and this project follows Semantic Versioning. Historical entries were reconstructed from the published crates and Git history. Release dates are crates.io publication dates. Because several release lines were maintained in parallel, releases are ordered by publication date rather than version number.
0.9.0 - 2025-07-15
- Breaking:
asynchronous::Client::connectis now asynchronous and must be awaited. - Breaking: Async clients and servers now use the public
transport::Socketandtransport::Listenerabstractions. Raw descriptor constructors are transport-specific and explicitlyunsafe. - Breaking: Direct users of
ClientStreamReceiver::newmust pass a clonedClientto keep the underlying connection alive. - Added: Async transport constructors now cover Unix sockets, TCP, vsock, and Windows named pipes.
- Migration: Regenerate service bindings with a compatible compiler and code generator after upgrading the Protocol Buffers dependencies.
- Added TCP transport support and TCP client and server examples.
- Added async Windows named-pipe support.
- Converted the repository into a Cargo workspace.
- Updated the Protocol Buffers dependencies and related generated code.
- Fixed async server and streaming client lifetime handling.
- Fixed client creation when the process reaches its file descriptor limit.
- Fixed a synchronous server connection file descriptor leak.
0.8.6 - 2025-06-24
- Fixed a synchronous server connection file descriptor leak.
0.5.10 - 2025-06-24
- Backported the synchronous server connection file descriptor leak fix.
0.8.5 - 2025-05-09
- Fixed async server shutdown when the server object is dropped.
- Fixed a panic when creating a client after reaching the file descriptor limit.
- Kept streaming client connections alive until all stream handles are released.
- Added end-to-end coverage for all examples.
0.8.4 - 2025-01-22
- Avoided applying unsupported socket options to Unix and vsock sockets.
0.8.3 - 2025-01-17
- Added vsock CID parsing and generated
mod.rssupport. - Added a server-streaming example.
- Improved request context ergonomics and async request failure handling.
- Fixed the synchronous server accept loop after errors.
- Avoided panics caused by poisoned internal locks.
- Fixed build failures and removed unused code.
0.5.9 - 2025-01-14
- Backported the fix for infinite synchronous server accept loops.
0.8.2 - 2024-09-27
- Added delivery acknowledgements for streamed messages.
- Declared the minimum supported Rust version.
- Sent pending responses before shutdown and fixed streaming timing races.
- Fixed hangs while waiting for connections to exit.
- Ensured connection file descriptors are released during shutdown.
- Retried interrupted operating-system calls and kept accepting after recoverable errors.
0.5.8 - 2024-09-25
- Backported the fix that keeps the server running after an accept error.
0.7.2 - 2024-09-25
- Added Windows synchronous client and server support and Android support.
- Declared the minimum supported Rust version.
- Updated socket handling to the newer
nixAPIs.
- Kept the server running after recoverable accept errors.
- Fixed Windows connection cleanup and server shutdown behavior.
0.5.7 - 2023-10-24
- Ignored harmless errors while closing synchronous server descriptors.
0.8.1 - 2023-08-29
- Exposed the stream handle types used by generated streaming APIs.
- Added request cancellation state to synchronous server contexts.
- Enforced frame size limits in synchronous and asynchronous transports.
- Fixed missing default data in streams.
- Closed listener descriptors during async server shutdown.
0.5.6 - 2023-07-19
- Reverted a source-level Clippy adjustment for compatibility.
0.5.5 - 2023-07-19
- Rejected oversized packets in synchronous and asynchronous transports.
- Refactored response delivery to apply frame validation consistently.
0.8.0 - 2023-06-19
- Breaking:
sync::Client::newnow returnsResult<Client>so connection failures can be handled by callers. - Breaking: Low-level synchronous transport APIs use
PipeConnectioninstead of accepting raw file descriptors directly. - Added: Cross-platform
PipeConnectionandPipeListenerabstractions support Unix sockets and Windows named pipes.
- Added synchronous Windows named-pipe support and Android support.
- Added APIs for constructing clients from existing connections.
- Added integration tests for the synchronous examples.
- Updated socket handling for the newer
nixAPIs. - Changed client construction to report connection errors with
Result.
- Fixed connection cleanup on Windows.
- Fixed a server thread that could remain blocked during shutdown.
0.5.4 - 2023-06-19
- Allowed asynchronous requests to be sent through a shared
&Client. - Updated the Protocol Buffers 2.x dependency line.
0.7.1 - 2022-09-14
- Updated Protocol Buffers support from version 2 to version 3.
- Updated generated examples and Rust 1.63 compatibility.
0.7.0 - 2022-08-12
This release was yanked from crates.io.
- Added: Generated services can use client-streaming, server-streaming, and bidirectional RPC methods.
- Added: Public stream handles, stream handlers, codecs, and cooperative shutdown primitives support the new generated interfaces.
- Migration: Regenerate service bindings to use streaming RPCs; existing unary services can continue to use the unary interfaces.
- Added client-streaming, server-streaming, and bidirectional RPC support.
- Added cooperative async server shutdown and streaming examples.
- Reworked async connection handling, framing, and message codecs.
- Removed the unused
bytesdependency.
0.6.1 - 2022-05-11
- Added timeout support to the asynchronous client.
- Improved frame header validation and async socket error handling.
0.5.3 - 2022-05-11
- Backported asynchronous client timeout support.
- Corrected the descriptor stored in asynchronous server contexts.
0.6.0 - 2022-01-18
- Breaking: The protocol module moved from
ttrpc::ttrpctottrpc::proto. - Breaking: Internal runtime helper modules are no longer public; use the documented top-level and runtime-specific re-exports.
- Changed: Async requests can now be sent through a shared
&Clientinstead of requiring&mut Client.
- Added normal filesystem Unix sockets on Linux.
- Allowed asynchronous requests to be sent through a shared
&Client.
- Hid runtime implementation details that did not need to be public.
- Simplified Unix socket address parsing and removed
Domain::AbstractUnix. - Stored the connected stream descriptor in async server contexts.
0.5.2 - 2021-11-22
- Added macOS support and filesystem Unix socket connections.
- Added request timeouts to server-side
TtrpcContext. - Added raw client connection helpers.
- Removed redundant Unix socket path suffix handling.
- Updated socket creation and audited dependencies.
- Fixed synchronous server descriptor cleanup.
0.4.16 - 2021-11-18
- Closed connection descriptors from the synchronous server reaper thread.
- Corrected inline rustdoc rendering.
0.5.1 - 2021-04-25
- Added async server timeout enforcement.
- Made request contexts cloneable.
- Improved async handler error propagation and cancellation when clients disconnect.
0.4.15 - 2021-04-20
- Cancelled async server handlers after their clients disconnect.
0.5.0 - 2021-02-24
- Breaking: Generated client and server method signatures now carry a
Contextcontaining request metadata and timeout information. - Migration: Regenerate service bindings and pass a
Contextwhen making client calls or implementing service methods.
- Added request metadata to generated client and server APIs.
- Added
Contextas the common carrier for metadata and timeouts.
- Updated the async runtime to Tokio 1.0.
0.4.14 - 2020-12-25
- Fixed a synchronous server method-handler thread leak.
0.4.13 - 2020-12-23
- Fixed failures to wake synchronous client handlers.
0.4.12 - 2020-11-25
- Reduced noisy log levels for frequent, non-actionable events.
0.4.11 - 2020-11-23
- Fixed a client file descriptor leak.
- Logged failures while closing the client receiver descriptor.
0.4.10 - 2020-11-20
- Replaced
selectwithpollin the synchronous transport loop.
0.4.9 - 2020-10-22
- Accepted any
ToStringstatus message in status helper APIs. - Renamed internal macros to follow Rust naming conventions.
0.4.8 - 2020-10-09
- Added async raw file descriptor conversions.
- Added graceful async shutdown and server restart support.
- Refined server restart lifecycle APIs.
0.4.7 - 2020-09-21
- Added synchronous server restart support.
- Reported message read failures as socket errors.
0.4.6 - 2020-09-04
- Removed excessive informational logging.
0.4.5 - 2020-08-31
- Fixed a client panic when a request times out.
0.4.4 - 2020-08-24
- Set close-on-exec on async server sockets.
0.4.3 - 2020-08-18
- Added request timeout support to synchronous and async clients.
- Added raw file descriptor conversions.
- Implemented
std::error::Errorfor the crate error type.
- Fixed client hangs after empty responses and socket failures.
0.4.2 - 2020-07-20
- Fixed docs.rs generation.
0.4.1 - 2020-07-20
- Made async dependencies optional and improved feature separation.
- Added crate-level API documentation.
- Updated examples for the renamed code generator.
0.4.0 - 2020-07-10
- Added: Asynchronous client and server APIs are available through the async feature and runtime-specific modules.
- Changed: Synchronous and asynchronous APIs, examples, and generated output are separated more clearly.
- Migration: Enable the async feature and regenerate protocol bindings before adopting the asynchronous interfaces.
- Added asynchronous clients and servers.
- Added async vsock support.
- Added
Debugsupport for server request contexts.
- Separated synchronous and asynchronous examples and features.
- Moved generated protocol code to Cargo's
OUT_DIR.
- Reaped completed synchronous connection threads promptly.
0.3.0 - 2020-04-22
- Breaking:
Server::startnow borrows&mut selfinstead of consuming the server. - Added: Servers can add custom listeners, shut down explicitly, and be managed after startup.
- Added: Protocol bindings can be generated programmatically from Rust.
- Added pure-Rust programmatic Protocol Buffers code generation.
- Added server shutdown and custom listener APIs.
- Added close-on-exec socket creation.
- Fixed partial frame reads and writes and peer-close detection.
- Fixed potential server deadlocks and connection leaks.
- Fixed server panics after clients disconnect.
0.2.1 - 2020-02-20
- Updated crate metadata and introductory documentation.
0.2.0 - 2020-01-15
- Breaking: Generated types, fields, and status helpers were renamed to follow idiomatic Rust naming conventions.
- Migration: Regenerate bindings and update call sites to the new snake-case methods and fields.
- Added vsock server support.
- Generated example protocol code from
build.rs.
- Updated the
nixdependency and removed compiler warnings.
0.1.0 - 2019-09-23
- Initial public API for synchronous ttrpc clients, servers, and generated services.
- Initial synchronous ttrpc client and server implementation.
- Added Protocol Buffers service generation and client/server examples.