High-performance Rust gateway bridging gRPC to GraphQL with Apollo Federation v2.
Transform gRPC microservices into a unified GraphQL API. Zero GraphQL code required.
Performance Rankings (Rust):
βββββββββββββββββββββββββββββββββββββββββββββββββββ
1. grpc_graphql_gateway ββββββββββββββββββββ 112,000 req/s π
2. async-graphql (Actix) ββββββββββββββββββββ 45,000 req/s
3. Juniper (Actix) ββββββββββββββββββββ 39,000 req/s
Data Efficiency Mode (GBP Ultra):
βββββββββββββββββββββββββββββββββββββββββββββββββββ
JSON Payload (100MB) ββββββββββββββββββββ 100%
GBP Ultra (800KB) β 0.8% β‘ (<1ms latency)
| Category | Capabilities |
|---|---|
| Core | Schema generation, Queries/Mutations/Subscriptions, WebSocket, File uploads |
| Federation | Apollo Federation v2, Entity resolution, DataLoader batching, No N+1 |
| Production | Health checks, Prometheus, OpenTelemetry, Rate limiting, Circuit breaker |
| Security | Query depth/complexity limits, Introspection control, Query whitelisting |
| Performance | SIMD JSON, Sharded Cache, Response caching (Redis), APQ, Request collapsing |
| Connectors | REST APIs, OpenAPI integration, Multi-descriptor stitching |
[dependencies]
grpc_graphql_gateway = "0.5.5"
tokio = { version = "1", features = ["full"] }use grpc_graphql_gateway::{Gateway, GrpcClient};
const DESCRIPTORS: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/descriptor.bin"));
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
Gateway::builder()
.with_descriptor_set_bytes(DESCRIPTORS)
.add_grpc_client("service", GrpcClient::builder("http://localhost:50051").connect_lazy()?)
.build()?
.serve("0.0.0.0:8888")
.await
}Endpoints: http://localhost:8888/graphql | ws://localhost:8888/graphql/ws
Gateway::builder()
.enable_federation()
.with_entity_resolver(Arc::new(resolver))
.build()?;Gateway::builder()
.enable_health_checks() // /health, /ready
.enable_metrics() // /metrics (Prometheus)
.enable_tracing() // OpenTelemetry
.with_query_depth_limit(10) // DoS protection
.with_query_complexity_limit(100)
.with_response_cache(CacheConfig::default())
.with_circuit_breaker(CircuitBreakerConfig::default())
.build()?;cargo run --example greeter # Basic queries/mutations/subscriptions
cargo run --example federation # 3 federated subgraphsπ Full Documentation β’ π¦ Crates.io β’ π» GitHub
Made with β€οΈ by Protocol Lattice