DwaraAPI gateway
One Rust binary. One YAML file. Every protocol, every policy, every provider -- from a single edge to a fleet.
One Rust binary. One YAML file. Every protocol, every policy, every provider -- from a single edge to a fleet.
A streaming reverse proxy written in Rust, built for operators who need predictable latency, defense-in-depth traffic policy, and a single declarative config for the edge in front of their APIs.
Three commands. Start any HTTP server, run the gateway against the sample config, and send a request through.
dwara -- quickstart
python3 -m http.server 9000
DWARA_CONFIG=crates/dwara-bin/dwara.yaml cargo run -p dwara-bin
curl http://127.0.0.1:8080/v1/The request streams to the backend unbuffered and the response streams back the same way. A path with no matching route returns 404; a dead backend returns 502. Stop with Ctrl-C -- in-flight requests drain before the process exits.
This exact command assumes a source checkout with Rust 1.94+, cmake, and a C compiler. A released binary or Docker image works the same way: point DWARA_CONFIG at your YAML -- Installation covers binaries, Docker images, OS packages, and systemd, no toolchain needed.
New to Dwara? Follow this order:
docker compose up.New to Dwara and not sure where to start? These task-oriented guides walk through the common goals an operator has on day one:
For more, see First scenarios.
One gateway, four audiences. Each gets the controls it needs without the noise of the others.
One declarative YAML for routing, policy, and identity. Validate before publish, hot-reload without restart, and diff configs like Terraform state.
Retries, circuit breaking, health checks, admission queues, and zero-downtime binary upgrades. Prometheus metrics on every listener and an embedded analytics store.
Five authn methods, a deny-anywhere-wins authorization chain, Cedar/OPA policy engines, secret redaction, WAF-lite, and FIPS 140-3 mode.
One OpenAI-shaped endpoint in front of every provider. Token budgets, cost attribution, guardrails, semantic caching, and the MCP gateway.
Keep your existing providers, SDKs, and infrastructure. Dwara speaks every protocol your clients use and translates between them.
| Layer | What it speaks |
|---|---|
| Protocols | HTTP/1.1, HTTP/2, HTTP/3 (QUIC), gRPC, gRPC-Web, WebSocket, L4 TCP/UDP |
| AI providers | OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, any OpenAI-compatible endpoint |
| Import from | NGINX, Kong, Envoy, OpenAPI specs |
| Run on | Bare metal, Docker, systemd, Kubernetes (Gateway API controller) |
| Observe via | Prometheus /metrics, OTLP traces and metrics, NDJSON analytics firehose, alert webhooks |
| Extend with | Proxy-Wasm (Kong/Envoy filters), native Rust filters, Extism PDK, WASM nano-services |
Everything below ships in the default OSS build unless marked otherwise. Badges match the guides: partial means config-accepted and partially wired, experimental means runtime-stubbed, and enterprise marks fleet-scale features of the enterprise edition.
The OSS core -- proxying, TLS, routing, resilience, security, observability, analytics -- is complete and production-shaped, and everything in the cards above ships in it. Every dataplane capability (Proxy-Wasm plugins, CEL expressions, Cedar/OPA authorization, aggregation, HTTP/3, protocol translation) is compiled into the default OSS build, and fleet-scale features (CP/DP split, Redis-backed rate limiting and convergence, Vault/KMS secrets, workspaces, FIPS enforcement) make up the enterprise edition. The editions guide has the full comparison matrix.
The default build: a complete, production-shaped gateway in a single static binary.
Every dataplane capability compiled into the default OSS build.
Fleet-scale operation across many gateway instances.
Every dataplane capability is compiled into the default OSS build -- there are no optional packs to enable. The feature reference carries the maturity matrix showing which capabilities are wired end to end and which are still landing, plus build commands and enterprise-only config blocks.
Dwara is a high-performance, streaming reverse-proxy API gateway written in Rust. It terminates TLS, routes traffic, enforces policy, authenticates callers, and observes everything -- from a single static binary configured by one YAML file.
Every dataplane capability: proxying (HTTP/1.1, HTTP/2, HTTP/3, gRPC, WebSocket, L4), TLS termination, routing, load balancing, traffic policy and resilience, security and authentication, AI gateway, plugins and extensibility, observability and analytics, and operations. There are no optional packs to enable.
Features that span multiple gateway instances or require external infrastructure: CP/DP split with a leader-elected control plane, Redis-backed distributed rate limiting and cache, config convergence, workspaces with RBAC and audit, Vault/KMS secrets, federated analytics, FIPS 140-3 enforcement, and service mesh mode.
No. Dwara is a reverse proxy -- point it at your backends and send traffic to it. For AI gateway usage, change only the base URL and credential in your OpenAI-compatible SDK; Dwara translates the request to whichever provider serves it.
Anywhere a single static binary runs: bare metal, Docker, systemd, or Kubernetes. The OSS edition is a standalone binary; the enterprise edition adds a controller and edge binaries for fleet operation. See the deployment guide.
One strict YAML file declares the entire gateway: listeners, routes, services, upstreams, consumers, policies, and observability. The config pipeline (parse, validate, compile, publish) runs on every change -- file watch, SIGHUP, admin API, or controller stream -- and swaps atomically behind an ArcSwap. A failure at any stage never replaces the running snapshot.
Yes. The dwara CLI has an import command that reads NGINX, Kong, or Envoy config and emits a Dwara YAML draft. Use dwara diff to compare it against a hand-tuned config before cutover.
The OSS core (proxying, TLS, routing, resilience, security, observability, analytics) is stable and production-shaped. Some advanced capabilities (L4 proxying, GraphQL awareness, API lifecycle, MCP gateway, service mesh, Extism PDK) are partially wired or experimental; each guide page carries a status note. See the feature reference for the maturity matrix.