
Bifrost review
Go gateway that puts many LLM providers behind one OpenAI-compatible API, with failover, virtual keys, budgets, semantic caching and an MCP gateway
Chandan Kumar is a founder of Geekflare. He is a technology enthusiast and entrepreneur who loves to help businesses and people around the world. Chandan has worked at BNP Paribas, Citibank, Deutsche Bank, Motorola, and HP. He’s got an in-depth understanding of business software and IT infrastructure.
Verdict
Bifrost is a single Go binary with a web dashboard that added about 1 ms per request in our test, and the free version already covers failover, budgets per virtual key, caching and an MCP gateway. The catch is that guardrails, SSO, roles, audit logs and clustering are Enterprise only, and the docs say several open source nodes cannot share one Postgres database.
Best for
Teams that want a fast single-node gateway with budgets and an MCP gateway
Not for
Companies that need SSO, audit logs or high availability without a paid licence
Pros
- Added about 1 ms per request in our test, against 18 ms for LiteLLM
- Virtual keys, budgets and the MCP gateway are in the free version
- Starts with one command and is configured from a web dashboard
- Built-in importer for an existing LiteLLM proxy setup
Cons
- Guardrails, SSO, roles and audit logs are Enterprise only
- Several open source nodes cannot share state, so high availability needs Enterprise clustering
- The documented Docker command fails unless the data folder belongs to UID 1000
“I've been very happy with bifrost as a proxy.”
Hacker News, Oct 2026“it has worked really well and feels pretty solid”
Hacker News, Oct 2026“Bifrost has been decent, despite being partially shareware”
Hacker News, Oct 2026
Is Bifrost right for your project?
Describe what you need and AI will check the fit against this review.
Bifrost features and capabilities
Budgets through virtual keys
Customers, teams and virtual keys each get their own budget and rate limits, so one team or client cannot run up the bill for the rest.
Fallbacks and weighted keys
Calls retry with backoff, switch to another provider when the first fails, and spread across several API keys by weight.
MCP gateway with Code Mode
MCP servers are connected once and filtered per virtual key, and Code Mode lets the model call many tools from one Starlark script instead of loading every tool definition.
Exact and semantic caching
Repeated or similar requests can be answered from a cache in Redis, Valkey, Weaviate, Qdrant or Pinecone, which cuts provider spend on common prompts.
Drop-in SDK endpoints
OpenAI, Anthropic, Bedrock and Google GenAI SDKs work by changing the base URL, and every request is logged with tokens, cost and latency.
- FallbacksSwitches to another model or provider when a call fails
- Yes
- Load balancingSpreads traffic across keys, deployments or providers
- YesWeighted keys; adaptive balancing is Enterprise
- Budgets and limitsSpending caps or rate limits per key, user or team
- YesPer virtual key, team and customer
- Cost trackingRecords spend per request and per key, user or team
- Yes
- CachingExact or semantic response caching
- YesExact and semantic, needs a vector store
- GuardrailsPII redaction, content filters or prompt-injection checks
- Paid only
- MCP gatewayExposes or governs MCP servers and tools
- YesCode Mode and per-key tool filtering included
At a glance
- Type
- LLM gateway
- Stack
- Go
- Databases
- SQLite, PostgreSQL
- Licence terms
- The gateway in the repo is Apache 2.0. Guardrails, clustering, adaptive load balancing, SSO, audit logs, roles and secret managers are only in Bifrost Enterprise, a separate paid build.
- SSO
- Paid only
- Roles and permissions
- Paid only
- Audit logs
- Paid only
Free vs paid editions
What you get when you self-host, and what needs a paid plan.
The Apache 2.0 gateway includes fallbacks, weighted load balancing, virtual keys with budgets and rate limits, semantic caching, the MCP gateway with Code Mode and a web dashboard. Bifrost Enterprise, a separate build, adds guardrails, multi-node clustering, adaptive load balancing, SSO, custom roles, audit logs, secret managers and deployment in your VPC or air-gapped. Enterprise has custom pricing and a 14-day free trial, and there is no managed cloud version.
Self-hosting Bifrost
Bifrost gives no minimum requirements for the open source gateway, and its Enterprise sizing guide suggests 4 vCPU and 16 GB of RAM per pod.
New cloud server to ready
19 s
Memory in use at idle
180 MB of 4 GB
Median request
1.2 ms
Requests/s, 32 clients
970
Peak memory
254 MB
Version tested
2.3.2 · Oct 21, 2026
- The documented docker run with ./data mounted exited at once: the image runs as UID 1000 and couldn't write to a folder owned by root. After chown it was ready in 19 seconds and used 180 MB at idle.
- Every request without a virtual key got a 401, and the dashboard and management API stayed locked until a setup token is set and an admin created. Good defaults, though the quick start doesn't mention them.
- It also refused to reach our mock provider on the Docker network until allow_private_network was set, a guard against requests to internal addresses.
- Against the mock it added about 1 ms per request and handled 970 requests a second with 32 clients, peaking at 254 MB. The fallback request came back from Claude Haiku 5.5 with headers naming the original and the resolved model.
# docker run -p 127.0.0.1:8080:8080 -v ./data:/app/data maximhq/bifrost:v2.3.2
# (chown 1000 ./data first; the image runs as UID 1000)
providers:
openai: # the stand-in provider for the overhead test
keys: [{ name: mock, value: none, models: ["*"], weight: 1.0 }]
network_config: { base_url: "http://mock", allow_private_network: true }
openrouter:
keys: [{ name: openrouter, value: env.OPENROUTER_API_KEY, models: ["*"], weight: 1.0 }]
governance:
virtual_keys: # required on every request by default
- { id: vk-geekflare-test, name: geekflare-test, value: "sk-bf-…", is_active: true, provider_configs: [ … ] }
# The fallback is per request:
# { "model": "openrouter/anthropic/claude-model-that-does-not-exist",
# "fallbacks": ["openrouter/anthropic/claude-haiku-5.5"], … }X-Bifrost-Original-Model: anthropic/claude-model-that-does-not-exist
X-Bifrost-Resolved-Model: anthropic/claude-haiku-5.5
X-Bifrost-Routing-Info-Is-Fallback: true
{
"model": "anthropic/claude-haiku-5.5",
"choices": [
{
"message": {
"role": "assistant",
"content": "An LLM gateway is a proxy layer that sits between applications and one or more large language model providers, centralizing access to them and handling concerns such as routing, authentication, rate limiting, cost"
},
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 60,
"total_tokens": 85,
"cost": {
"total_cost": 3.25e-05
}
}
}What you can do with Bifrost
Shared gateway for a startup
Run one Bifrost instance in front of OpenAI, Anthropic and Bedrock with a virtual key and budget for each team.
Coding agents through one endpoint
Send Claude Code, Codex CLI or Gemini CLI traffic through Bifrost so every model call is logged and capped per key.
Tool access for agents
Connect internal MCP servers once and decide per virtual key which tools each agent may call.