A full-featured Elixir implementation of the gRPC protocol supporting unary and streaming RPCs, interceptors, and HTTP transcoding.
gRPC Elixir is a native Elixir implementation of the gRPC protocol that enables high-performance, type-safe communication between services. It provides a robust foundation for building distributed systems and microservices in the Elixir ecosystem, featuring a unified stream-based API for all RPC types.
Elixir developers building distributed systems, microservices, or any application requiring efficient, type-safe inter-service communication. It is particularly suited for teams leveraging the BEAM's concurrency model for streaming and fault-tolerant service architectures.
Developers choose gRPC Elixir for its consistent, composable stream-based model that treats all RPC calls as data pipelines, promoting clean and maintainable code. Its native Elixir design, comprehensive feature set (including HTTP transcoding, interceptors, and multiple transport support), and deep integration with the BEAM ecosystem offer a distinct advantage over generic or less integrated gRPC libraries.
An Elixir implementation of gRPC
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
All RPC types—unary, streaming, bidirectional—use a consistent, composable stream model, promoting clean code as shown in the server implementation examples with GRPC.Stream operators.
Includes HTTP transcoding for RESTful endpoints, interceptors for middleware, multiple transports (DNS, Unix sockets, xDS), and built-in TLS, covering advanced gRPC use cases.
Leverages BEAM concurrency for efficient streaming and fault tolerance, with deep ecosystem integration via Hex packages and supervision trees for reliable service startup.
Provides unified error propagation and recovery mechanisms within stream pipelines, such as map_error/2 for transforming exceptions into structured RPC errors.
Version 0.10.x deprecated the old API based on direct struct returns, forcing existing users to migrate to the stream-based model, which can be a significant refactor.
Requires external protobuf compilation with plugins and code generation, adding build process overhead compared to libraries with simpler inline definitions.
The declarative, stream-oriented design is less intuitive for developers accustomed to imperative gRPC implementations, potentially slowing onboarding.