Wäg and LiteLLM: same API, different layer
LiteLLM is a very good AI gateway, and if what you need is multi-provider routing behind one endpoint, it will keep serving you well. Wäg speaks the same OpenAI-compatible API and imports LiteLLM configuration — not to replace a gateway with another gateway, but because most teams reach a point where the gateway is not the thing that is strained.
Not a competitor at the same layer
Same OpenAI-compatible API surface. Same configuration, importable.
Free here. Enterprise there.
Both projects are open source with a commercial tier, so the question was never whether there is a paid edition. It is where each one draws the line. LiteLLM's enterprise documentation lists what their licence key turns on, and most of that list is Apache-2.0 in Wäg. On multi-tenancy the difference is structural rather than a matter of degree: in their published database schema an organization carries a budget, spend rollups and a membership list, and a team points at it through an optional foreign key, which makes it a grouping level above teams. In Wäg an organization is an authorization boundary that every request is checked against. Where we gate the same capability they do, the table says so.
| Capability | LiteLLM | Wäg |
|---|---|---|
| Multi-tenant architecture: orgs, teams, relationship-based access | Enterprise | Apache-2.0 |
| Role-based access control | Enterprise | Apache-2.0 |
| Budgets below the key: per model, per application | Enterprise | Apache-2.0 |
| Guardrails scoped per key and per team | Enterprise | Apache-2.0 |
| Managed guardrail engines: moderation, secret and prompt-injection scanning | Enterprise | Apache-2.0 |
| Secret manager integration: Vault, Key Vault, Secrets Manager | Enterprise | Apache-2.0 |
| Multi-region operation | Enterprise | Apache-2.0 |
| Payload logging policy, per organization, with a member-level opt-out | Enterprise | Apache-2.0 |
| Hash-chained, signed request evidence | Not listed | Apache-2.0 |
| Jurisdiction-pinned routing | Not listed | Apache-2.0 |
| Reporting of local model use from employees' devices | Not listed | Apache-2.0 |
| Agent identity, runs and run limits | Not listed | Apache-2.0 |
| Tool-call policy with human approvals | Not listed | Apache-2.0 |
| Data-flow control: the lethal trifecta | Not listed | Apache-2.0 |
| MCP tool pinning and drift quarantine | Not listed | Apache-2.0 |
| Short-lived agent credentials, no standing keys | Not listed | Apache-2.0 |
| Access grants for proxied third-party API calls | Enterprise | Apache-2.0 |
| An agent's outbound web traffic, by host rule and decided per connection | Not listed | Apache-2.0 |
| Agent payments: spend mandates and rails | Not listed | Enterprise |
| Approving agent tool calls in Slack or Teams | Not listed | Enterprise |
| Importing agents from Foundry, AWS, Entra Agent ID and Gemini Enterprise | Not listed | Enterprise |
| TLS inspection of agents' outbound traffic | Not listed | Enterprise |
| SSO for the admin console | Enterprise | Enterprise |
| SCIM provisioning | Enterprise | Enterprise |
| JWT and OIDC on the data plane | Enterprise | Enterprise |
| Long-retention audit packs | Enterprise | Enterprise |
| Guardrails on provider-native pass-through traffic | Not listed | Enterprise |
| MCP servers acting as the signed-in user (OAuth) | Not listed | Enterprise |
| Customer-managed encryption keys, FIPS posture reporting | Not listed | Enterprise |
| Custom branding | Enterprise | Enterprise |
| Platform budgets that organizations cannot change | Not listed | Enterprise |
| A read-only auditor role | Not listed | Enterprise |
| Exit export: everything an organization needs to move elsewhere | Not listed | Enterprise |
| AI content marking: C2PA, watermarks, text fingerprints | Not listed | Enterprise |
| Enforcement on employees' devices for local models | Not listed | Enterprise |
Fair is fair. Their enterprise tier also carries IP allowlists and a SOC 2 Type II report. We have neither today.
LiteLLM's column is their own enterprise documentation, which states that a licence key enables the features listed there. Not listed means a capability is not named on that page, which is not the same as not possible. Wäg's column is the licence split the gateway enforces: an Enterprise capability is a module that a signed licence has to name. The agent rows marked Not listed are a different kind of Not listed: their agent gateway is not an Enterprise feature at all, so those capabilities are missing from their product rather than priced into their licence.
Both ship an agent gateway. Only one governs the agent.
LiteLLM added an A2A agent gateway, and it does the obvious things well: register agents, control which teams and keys may reach them, attribute the cost. Two rows are genuine parity. The rest are where the two products stop being the same kind of thing.
| Capability | LiteLLM | Wäg |
|---|---|---|
| A2A agent gateway with per-agent access control and cost attribution | Yes | Yes |
| An emergency stop that refuses the agent at the gateway | Webhook to the agent | Yes |
| Limits on a single agent run | Yes | Yes |
| A tool call held for a named human approver, with the decision recorded | Not documented | Yes |
| Data-flow control: a run that read private data cannot then call an egress tool | Not documented | Yes |
| MCP tool definitions pinned, and quarantined when the server changes them | Not documented | Yes |
| Short-lived agent credentials bound to a run, with no standing keys | Not documented | Yes |
| Which destinations an agent may reach, decided per call: tool policy, approval, data-flow label | Not documented | Yes |
| The agent's whole outbound web traffic through the gateway, not only its model and tool calls | Not documented | Yes |
| Agents found from their traffic, not only the ones somebody registered | Not documented | Yes |
| Agents imported and kept in sync from Foundry, AWS Agent Registry, Entra Agent ID and Gemini Enterprise | Not documented | Enterprise |
| A held tool call approved or denied in Slack or Microsoft Teams | Not documented | Enterprise |
| TLS inspection of an agent's outbound traffic, with request rules and guardrails | Not documented | Enterprise |
| Agent payments: spend mandates, x402, AP2, ACP and UCP checkout | Not documented | Enterprise |
LiteLLM's column is what their own documentation and public repository show. Not documented means the capability is not described there, which is not the same as impossible. Three rows deserve the detail. Their kill switch fires a webhook at the agent's own runtime and, in their words, leaves the agent registered and enabled on the LiteLLM side; ours refuses the agent at the gateway, on every replica and region, and ends a stream that is already running. Their require_approval is OpenAI's field: set to anything but never, the tool call is handed back to the client to run — nothing is held, nobody is named, nothing is recorded. And for agent payments, a code search of their repository for x402 and AP2 returns nothing at all. On third-party APIs the difference is not the proxying. Their pass-through endpoints route to any external API with a credential set in the configuration, and grants per key and team are an Enterprise feature. What is absent is the decision: the destination is a static route rather than something a given agent may or may not reach, no rule reads the call's arguments, no approval can hold it, it carries no data-flow label, and it does not count against a run.
Cases where LiteLLM is the right answer
Genuinely. If you recognise your situation here, adopting a control plane buys you operational surface you do not need yet.
- One team, one or a few services, and you want multi-provider today.
- You use import litellm inside application code for its in-process routing and callbacks, and value that directly.
- You have custom Python callbacks in the request lifecycle that would be real work to reimplement.
- Your provider list includes something long-tail that Wäg does not cover yet.
- Your governance requirements are genuinely satisfied by per-key budgets.
The symptoms, not the feature list
- Budgets need to match your org chart. Per-key limits cannot express "this team gets €4k, no single user more than €500, and marketing's experiments cannot eat engineering's capacity."
- Policy has to apply to applications that never opted in. A rule you can only enforce where somebody remembered to add it is not a control.
- Agents made the surface much larger. One user turn becomes N model and tool calls against remote MCP servers. Per-server auth, tool ACLs and per-hop audit stop being nice-to-have.
- Somebody asked what AI cost, by team, last quarter. And answering it required a data project rather than a dashboard.
- Compliance needs records, not intentions. Since 2 August 2026, GPAI enforcement powers and Article 50 transparency obligations under the EU AI Act carry penalty exposure. Logging and traceability have to be demonstrable.
- The gateway became load-bearing. Once every product path is behind it, a Python process with an interpreter and a deploy-time dependency tree is a different risk conversation than it was at ten requests a minute.
What does not change at all
Design commitments, not a feature count
Feature tables go stale in a quarter. These are structural choices that do not change with a release.
| Dimension | LiteLLM | Wäg |
|---|---|---|
| Core abstraction | Provider SDK dispatch behind HTTP | Inference request: modality, operation, lifecycle, cost, policy |
| Runtime | Python | Rust — one distroless, non-root binary |
| Lifecycles | Sync, streaming | Sync, streaming, durable async jobs, realtime sessions |
| Routing | Strategy selection plus fallbacks | Structural scoring → hard capability floors → cheapest eligible; explainable in headers |
| Caching | Exact, optional semantic | Exact → canonical → near-dup → semantic, with anti-false-hit gates |
| Budgets | Per-key | Org → team → user → application → model → key, stacked, with fair-share caps; a breach is refused before provider spend |
| Policy | Guardrail hooks | Ordered chain: pre-call, mid-stream windowed, post-call |
| Agent / MCP | MCP and A2A gateway: per-server auth, access per key and team | Plus tool policies with named approvers, data-flow rules, tool pinning, run limits, per-hop budget and audit |
| Local and on-device models | Reached as a provider from the proxy | Wäg Edge on laptops and in iOS and Android apps: sign-in and reporting open source, device enforcement and fleet with Enterprise |
| Identity | Master key plus virtual keys | Plus OpenFGA tenancy; OIDC SSO, SCIM 2.0 and IdP tokens on /v1 with Enterprise |
| Kubernetes lifecycle | Official Helm chart; operators come from the community | First-party operator with an OLM bundle, reconciling the gateway and its catalog; a Helm chart too |
| Extension model | Python callbacks, in-process | HTTP webhook engines, out-of-process |
| Supplier | US-incorporated | Bitkaio Ltd, UK — European, outside the EU |
If LiteLLM is doing its job, keep it. If the thing that is actually strained is governance rather than routing, that is a different layer — and it is the one Wäg is built for.
One endpoint. Every model. Complete control.
Run it in your own infrastructure
Everything you need to run a control plane in production is Apache-2.0 and stays that way — routing, HA, caching, failover, budgets, policy, MCP, jobs and observability. Self-hosted, no account, no phone-home.
$ docker run -p 4000:4000 <registry>/waeg-gateway:<version>Not a working pull: the images are not public yet. Design partners receive the registry details privately.
Deploy in 5 minutesShape it as a design partner
Wäg is not publicly released yet. We are working with a small cohort of teams running multi-provider AI in production, and serious about governance and sovereignty, to harden the control plane on real workloads.
- Every Enterprise capability included, at no licence cost
- Hands-on migration — we do it with you, including from LiteLLM
- A direct line to the engineers building it, and real influence on what ships next