tarpc is an RPC framework for Rust with a focus on ease of use.
tarpc addresses the need to define remote procedure call services without the overhead of separate schema languages or compilation steps. It uses Rust macros to generate service definitions directly in code, eliminating context switching between languages and the need for separate build processes. Developers define a service trait with the tarpc::service attribute, and the macro expands it into the boilerplate needed for both client and server implementations.
The tool suits projects where schema-in-code simplicity matters more than language-agnostic schema definitions. It works well in Rust-only microservices architectures and applications that benefit from tight integration between service definitions and implementation. tarpc distinguishes itself from frameworks like gRPC and Cap'n Proto by avoiding external schema languages entirely. The framework supports pluggable transports—any type implementing the Stream and Sink traits can carry requests and responses—and does not require Send + 'static bounds if the transport doesn't need them. It includes cascading cancellation so dropping a request propagates cancellation through the entire dependency chain, configurable deadlines with automatic propagation across service calls, and distributed tracing instrumentation compatible with OpenTelemetry and Jaeger. Serialization via Serde is optional, allowing in-memory transports to avoid serialization overhead when not needed.
Development activity shows consistent engagement with the codebase through regular commits addressing both features and maintenance. The project maintains active issue triage and responds to pull requests, indicating ongoing stewardship. Documentation is kept current alongside code changes, and the maintainers integrate feedback from users into refinements of the API and feature set.