rolter
A high-performance, open-source LiteLLM-proxy alternative in Rust —
an OpenAI/Anthropic-compatible AI gateway and load balancer.
rolter proxies commercial providers and load-balances self-hosted OpenAI-compatible fleets (e.g. 20–30 vLLM instances) with cache-aware routing, full RBAC, reload-free configuration, and cost/usage tracking.
Status: active development. The gateway, Postgres-backed control plane, reload-free configuration, cost controls, reliability primitives, and core provider surfaces are implemented; remaining work is tracked in
ROADMAP.md,TODO.md, and the Linear project.
Why rolter
- Fast — a Rust data plane (Axum/Hyper/Tower on Tokio) with lock-free config reads and minimal-copy streaming.
- Cache-aware load balancing — route prefix-heavy traffic to the vLLM replica most likely to have the KV cache warm.
- Drop-in — speak the OpenAI and Anthropic APIs your clients already use.
- Operable — virtual keys, budgets, rate limits, cost tracking, RBAC, and reload-free config changes from the UI.
Quick start — launch, configure, call
Go from zero to a working AI gateway in under a minute. The built-in fake-llm
model answers locally, so the first request needs no provider key or config.
1. Launch
# single image: gateway + dashboard, no compose or config file
docker pull ghcr.io/rolter-ai/rolter:latest
docker run --rm -p 4000:4000 -p 4001:4001 ghcr.io/rolter-ai/rolter:latest
# native binary (installed from a release, cargo, uv, or pip)
rolter easy-up
Open the dashboard at http://localhost:4001. For Postgres, Redis, and ClickHouse, use the full-stack option instead:
docker compose -f docker/docker-compose.yml up -d
2. Configure
The dashboard is ready at http://localhost:4001. Add real providers and routes
there when running in database mode, or use the bundled rolter.toml as your
file-backed bootstrap config.
3. Call
curl -s http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer sk-rolter-dev" \
-H "Content-Type: application/json" \
-d '{"model":"fake-llm","messages":[{"role":"user","content":"hello"}]}'
Install methods, the rolter CLI reference, and production configuration are in the documentation.
Architecture
flowchart LR
Client([OpenAI / Anthropic clients]) -->|/v1/*| GW["rolter-gateway<br/>(data plane)"]
Admin([Dashboard]) --> CTL["rolter-control<br/>(control plane + UI host)"]
GW -->|balanced + streamed| UP["Upstreams<br/>OpenAI · Anthropic · vLLM pool"]
CTL -->|writes config| PG[("PostgreSQL")]
CTL -->|publishes change events| RDS[("Redis")]
RDS -->|hot-swap snapshot| GW
GW -->|async batched logs| CH[("ClickHouse")]
Inspirations & Acknowledgments
rolter stands on the shoulders of great open-source projects and research. See our inspiration issues for detailed analysis of each project.
Gateway & Load Balancing
- LiteLLM — proxy feature breadth, provider coverage (100+), config/DB model split, virtual keys, budget controls, spend tracking
- Bifrost — high-performance Go gateway, weighted key selection (~10ns), multi-provider failover, plugin/middleware system, hierarchical budgets, semantic caching; published perf target (~11µs latency at 5k RPS)
- TensorZero — Rust LLMOps gateway, sub-1ms p99 latency target at 10k+ QPS, observability patterns, OTLP traces + Prometheus, rate limiting with granular scopes
- llm-d — cache-aware routing, prefix/KV-cache affinity, inference-phase scheduling, predicted-latency scheduling (40% TTFT/ITL reduction); highest-signal reference for
rolter-balancercrate - LLMGateway — cost tracking, analytics dashboard UX, performance analytics, provider key management, self-host story (Docker + Postgres + Redis)
- Archestra — dynamic model routing, MCP gateway, enterprise auth (OIDC, SAML, Okta, Entra), SSO + RBAC, tool-call safety guardrails
Infrastructure & Frameworks
- vLLM — KV-cache-aware replica pooling and prefill/decode scheduling
- Axum — high-performance Rust web framework
- Tokio — async runtime foundation
- shadcn/ui — component library for the dashboard UI
API Standards
Documentation
- Quickstart and Installation — install methods and the unified
rolterCLI (gateway/control/easy-up) - Configuration, Deployment, and Observability guides
- Air-gapped install & operation — running fully offline behind an internal mirror
- Architecture overview — the full design and ADRs
Repository layout
crates/rolter-core— config model, domain types, errors, telemetrycrates/rolter-balancer— load-balancing strategies (incl. approximate cache-aware)crates/rolter-proxy— upstream forwarding, header injection, streamingcrates/rolter-store— repository traits + in-memory store (Postgres/Redis/ClickHouse next)crates/rolter-auth— virtual keys, roles, access checkscrates/rolter-gateway— data-plane binarycrates/rolter-control— control-plane binary + static UI hostcrates/rolter— unifiedrolterlauncher (gateway/control/easy-up)ui/— Vite + React + shadcn/ui dashboarddocs/,user-docs/— architecture/ADRs and the user documentation sitemigrations/,clickhouse/— database schemas
Development
cargo build --workspace
cargo nextest run --workspace # tests via nextest (as CI does); + `cargo test --doc --workspace`
cargo fmt --all
cargo clippy --workspace --all-targets -- -D warnings
Commits and PR titles follow Conventional Commits. See AGENTS.md and docs/development/contributing.md.
License
Apache-2.0 — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rolter-0.0.10-py3-none-win_amd64.whl.
File metadata
- Download URL: rolter-0.0.10-py3-none-win_amd64.whl
- Upload date:
- Size: 8.0 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39c018aec9864e6ddbe3bcba00f70183c26437c4140e3eeb118c50d3838bc68d
|
|
| MD5 |
ad6e83de91fdd901fb3fbffb60f9d010
|
|
| BLAKE2b-256 |
9682124aeea16dc36d634b96b04bf75ea046cda9453ccae1ad5f7dcceef3b0ca
|
File details
Details for the file rolter-0.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rolter-0.0.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 7.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8bad154cb854d2c60210f26176ca760dbd88fa038ee4c036a0f8f97896bc175
|
|
| MD5 |
0e25ba9173c0aacbcef9f35df6e8054a
|
|
| BLAKE2b-256 |
11033d6fc8136212a57cb46922d54806958abbf810086fdd73c4e32d34f06538
|
File details
Details for the file rolter-0.0.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rolter-0.0.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 7.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ff75a09f9d4e90ae6698d3407936e9cc3fd436a53016f3f88db92fbea05806f
|
|
| MD5 |
4b1651898875095987866e4b9fdb283b
|
|
| BLAKE2b-256 |
dcd6b585235a73c5f30b87c01629f79e8d9ded8e238bc4056ff3f96c575937b2
|
File details
Details for the file rolter-0.0.10-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: rolter-0.0.10-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.2 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12fce28fa4ede9e2394c0735d14383dab4e6365084603261c109c0207ea1a64f
|
|
| MD5 |
ff2c174e9b9cd5b3c3300dd359d96cc9
|
|
| BLAKE2b-256 |
a9e9e4b2bf40717619ce38b065e4ed35ffd4333775fb30893b4458b52bf28200
|