README.md
Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute catalogs 455 free-tier entries across 40 recurring pool keys and computes the token headline from the 20 pools with a published positive monthly budget, deduplicated by shared pool. The result stays visible on the dashboard (
/dashboard/free-tiers).
<div align="center"> <h3>Animated summary of the live
/dashboard/free-tierspage. Full methodology (pool dedupe, credit tiers, provider terms): docs/reference/FREE_TIERS.md.<sub>These figures are re-audited every two weeks against the live catalog and move both ways — a provider ends a free tier and the number drops; a new one lands and it climbs. We publish what the catalog actually computes, never a rounded-up best case.</sub>
⭐ Star the repo if OMNIROUTE helped you save money and make your work easier.
</h3><a href="https://trendshift.io/repositories/23589" target="_blank"></a>
👋 Follow the maintainer — get new providers, releases & tips first:
Questions, provider tips, roadmap & support → Discord · Telegram · WhatsApp 🌍 Global / 🇧🇷 Brasil
| v3.8.49 | v3.8.50 | v3.8.51+ | |
|---|---|---|---|
| 🌐 Providers | 290 | 352 | more queued |
| 🧠 Unique chat model IDs | 1185 | 1312 | — |
| 🖼️ Modality Bridge | — | 🆕 vision + audio + video | — |
| 📡 Radar free catalog | — | 🆕 opt-in | — |
| ⚖️ Quota-aware scheduling | — | 🆕 Quota-Share | — |
| 📊 Quota telemetry | — | 🆕 live | — |
→ Roadmap — riding the rail to v3.9.0 LTS
<a href="README.md"></a> <a href="docs/i18n/pt-BR/README.md"></a> <a href="docs/i18n/pt/README.md"></a> <a href="docs/i18n/es/README.md"></a> <a href="docs/i18n/fr/README.md"></a> <a href="docs/i18n/it/README.md"></a> <a href="docs/i18n/de/README.md"></a> <a href="docs/i18n/nl/README.md"></a> <a href="docs/i18n/ru/README.md"></a> <a href="docs/i18n/uk-UA/README.md"></a> <a href="docs/i18n/pl/README.md"></a> <a href="docs/i18n/cs/README.md"></a> <a href="docs/i18n/sk/README.md"></a> <a href="docs/i18n/ro/README.md"></a> <a href="docs/i18n/hu/README.md"></a> <a href="docs/i18n/bg/README.md"></a> <a href="docs/i18n/da/README.md"></a> <a href="docs/i18n/fi/README.md"></a> <a href="docs/i18n/no/README.md"></a> <a href="docs/i18n/sv/README.md"></a> <a href="docs/i18n/zh-CN/README.md"></a> <a href="docs/i18n/zh-TW/README.md"></a> <a href="docs/i18n/ja/README.md"></a> <a href="docs/i18n/ko/README.md"></a> <a href="docs/i18n/th/README.md"></a> <a href="docs/i18n/vi/README.md"></a> <a href="docs/i18n/id/README.md"></a> <a href="docs/i18n/ms/README.md"></a> <a href="docs/i18n/phi/README.md"></a> <a href="docs/i18n/in/README.md"></a> <a href="docs/i18n/hi/README.md"></a> <a href="docs/i18n/gu/README.md"></a> <a href="docs/i18n/mr/README.md"></a> <a href="docs/i18n/ta/README.md"></a> <a href="docs/i18n/te/README.md"></a> <a href="docs/i18n/bn/README.md"></a> <a href="docs/i18n/ur/README.md"></a> <a href="docs/i18n/fa/README.md"></a> <a href="docs/i18n/ar/README.md"></a> <a href="docs/i18n/he/README.md"></a> <a href="docs/i18n/tr/README.md"></a> <a href="docs/i18n/az/README.md"></a> <a href="docs/i18n/sw/README.md"></a>
</div> <div align="center"># Fresh install, zero credentials — `auto` already works:
curl http://localhost:20128/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"Hello!"}]}'
<sub>Prefer a specific free backend? Call it directly, e.g. oc/… (OpenCode Free) or felo/… (Felo). Then graduate to auto and let OmniRoute pick.</sub>
<sub>📦 Copy-paste quickstart scripts for Python, Node.js, PHP, and cURL → examples/quickstart/</sub>
<table> <tr> <td align="center" width="150"> <a href="https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute"> <picture> <source media="(prefers-color-scheme: dark)" srcset="public/providers/kimi-logomark-dark.svg">Want to join as an Open Source Friend? These are the companies that back open source and help keep OmniRoute moving — and we say publicly where every token they give us goes. Reach out: [email protected]
</picture>
</a>
<b>Kimi</b> <sub>Moonshot AI</sub>
</td>
<td>
Thanks to <b>Kimi (Moonshot AI)</b>, our founding Open Source Friend, for backing this project! Kimi is the AI lab behind the open-weight K2 and K3 model families — <b>Kimi K3</b> delivers a 1M-token context window, native vision and frontier-level coding at a fraction of closed-model prices, and works out of the box with Claude Code, Codex and every coding tool OmniRoute serves.
<b>What Kimi's support powers:</b> Kimi's API credits power OmniRoute's AI-validated release pipeline — the <i>merge validation powered by Kimi K3</i> stage that reviews every pull request before it ships — plus day-to-day feature development. First-class Kimi support ships on both rails: the direct <a href="https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute">Kimi API</a> (<code>kimi-k3</code>) and the <a href="https://www.kimi.com/code?aff=omniroute">Kimi Code coding plan</a> (OAuth and API key). OmniRoute is also the first Brazilian open-source project in Kimi's support program. <a href="https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute"><b>Get a Kimi API key with 15% extra credits →</b></a>
</td>
</a>
<b>Cheaper Inference</b> <sub>cheaperinference.com</sub>
</td>
<td>
Thanks to <b>Cheaper Inference</b>, an OmniRoute Open Source Friend, for backing this project! Cheaper Inference is a cost-ranked gateway that resells 42 frontier models — Claude, GPT-5.x, Gemini, Kimi K3, GLM, DeepSeek, Grok and MiniMax — behind one OpenAI-compatible endpoint, routing each request to the cheapest eligible provider without ever charging above the model maker's list price.
<b>First-class support in OmniRoute:</b> Chat Completions, the native <code>/v1/responses</code> endpoint, vision, tool calling and 3 image models (<code>grok-imagine</code>, <code>nano-banana-pro</code>, <code>nano-banana-2</code>, reachable as <code>cheaperinference/<model></code>). <a href="https://cheaperinference.com/?utm_source=omniroute"><b>Get an API key →</b></a>
</td>
<sub>Links tagged <code>aff=omniroute</code> are partner links. They fund the project at no extra cost to you.</sub>
<details open> <summary><sub><b>🎟️ Affiliates Promo</b> — free signup coupons from providers we don't sponsor (click to expand)</sub></summary><sub><i>This section is for referral/coupon codes only. Sponsored partnerships live in <b>🤝 Supported by our Open Source Friends</b> above. OmniRoute has no sponsorship or partnership with the providers listed here — these are public coupons anyone can use.</i></sub>
<table> <tr> <td align="center" width="120"> <a href="https://agentrouter.org/register?aff=70LM"> </a>
<sub><b>AgentRouter</b></sub> <sub>agentrouter.org</sub> </td> <td> <sub><b><a href="https://agentrouter.org/register?aff=70LM">AgentRouter</a></b> — affiliate signup · <b>$100 free credits</b> on signup (free server, expect higher latency — best for testing, not production). First-class support in OmniRoute since <b>v3.8.50</b>: Chat Completions, the Anthropic-compatible wire format and the OpenAI-compatible path. Available models include <code>claude-opus-4-8</code>, <code>claude-opus-5</code>, <code>gpt-5.6-sol</code> and more. <b><a href="https://agentrouter.org/register?aff=70LM">Grab your $100 →</a></b></sub>
<sub>⚠️ <i>Affiliate link — OmniRoute has no sponsorship or partnership with this provider.</i></sub>
</td>
<sub>Know another provider with a generous free signup coupon that benefits OmniRoute users? Open an issue and we'll add it here.</sub>
</details> <div align="center">A combo is a chain of models OmniRoute routes across automatically. If quota runs out, a provider fails, or costs spike, the combo can move to the next eligible healthy model. 🛡️
autoNo combo to create. Set your model to auto (or a variant) and OmniRoute builds a virtual combo from your connected providers, scored live:
All 19 strategies — mix & match per combo step:
<table> <tr> <th>#</th> <th align="left">Strategy</th> <th align="left">What it does</th> </tr> <tr> <td align="center">1</td> <td nowrap><code>priority</code></td> <td>First-target ordered list — drain each before the next 🥇</td> </tr> <tr> <td align="center">2</td> <td nowrap><code>fill-first</code></td> <td>Fill each target's quota fully before moving on</td> </tr> <tr> <td align="center">3</td> <td nowrap><code>weighted</code></td> <td>Weighted random by per-target weight</td> </tr> <tr> <td align="center">4</td> <td nowrap><code>round-robin</code></td> <td>Cycle through targets in order</td> </tr> <tr> <td align="center">5</td> <td nowrap><code>p2c</code></td> <td>Power-of-two-choices random load balancing</td> </tr> <tr> <td align="center">6</td> <td nowrap><code>least-used</code></td> <td>Pick the target with the lowest current load</td> </tr> <tr> <td align="center">7</td> <td nowrap><code>random</code></td> <td>Uniform random pick (deduplicated)</td> </tr> <tr> <td align="center">8</td> <td nowrap><code>strict-random</code></td> <td>Random without de-duplicating repeats 🎲</td> </tr> <tr> <td align="center">9</td> <td nowrap><code>cost-optimized</code></td> <td>Minimize $ per request from live catalog pricing 💸</td> </tr> <tr> <td align="center">10</td> <td nowrap><code>headroom</code></td> <td>Pick the target with the most remaining quota</td> </tr> <tr> <td align="center">11</td> <td nowrap><code>reset-window</code></td> <td>Prefer the target whose quota window resets soonest</td> </tr> <tr> <td align="center">12</td> <td nowrap><code>reset-aware</code></td> <td>Rank by quota reset time — short windows first 📊</td> </tr> <tr> <td align="center">13</td> <td nowrap><code>context-relay</code></td> <td>Hand off context across targets for long conversations 🧠</td> </tr> <tr> <td align="center">14</td> <td nowrap><code>context-optimized</code></td> <td>Pick the best fit for the current context size</td> </tr> <tr> <td align="center">15</td> <td nowrap><code>cache-optimized</code></td> <td>Pin each reusable prompt prefix to the same account — maximize prompt-cache hits 🎯</td> </tr> <tr> <td align="center">16</td> <td nowrap><code>lkgp</code></td> <td>Last-Known-Good Path — sticky to the last successful target</td> </tr> <tr> <td align="center">17</td> <td nowrap><code>auto</code></td> <td>15-factor live scoring across every connection 🤖</td> </tr> <tr> <td align="center">18</td> <td nowrap><code>fusion</code></td> <td>Fan out to a panel of models + a judge synthesizes one answer 🧬</td> </tr> <tr> <td align="center">19</td> <td nowrap><code>pipeline</code></td> <td>Chain steps — each target's output feeds the next one 🔗</td> </tr> </table><sub>The Auto-Combo engine scores every candidate on 15 factors (health, quota, cost, latency, task fit, quality, session availability…) — see docs/routing/AUTO-COMBO.md.</sub>
<sub>📖 Auto-Combo Engine · Resilience Guide</sub>
<div align="center"><sub>📊 Full methodology & per-feature detail vs 9router, OpenRouter, CLIProxyAPI & LiteLLM → docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md</sub>
OmniRoute is MIT-licensed and maintained in the open. If it saves you time or money, here's how to keep it independent — pick whatever fits you. Sponsorship never affects routing priority; it buys visibility, not ranking.
<table> <tr><td nowrap>⭐ <b>Star the repo</b></td><td>Free — genuinely helps visibility</td><td><a href="https://github.com/diegosouzapw/OmniRoute">Star OmniRoute</a></td></tr> <tr><td nowrap>🐙 <b>GitHub Sponsors</b></td><td>One-off or monthly · zero platform fee</td><td><a href="https://github.com/sponsors/diegosouzapw">github.com/sponsors/diegosouzapw</a></td></tr> <tr><td nowrap>☕ <b>Ko-fi</b></td><td>Quick one-off tip, no signup for the donor</td><td><a href="https://ko-fi.com/diegosouzapw">ko-fi.com/diegosouzapw</a></td></tr> <tr><td nowrap>🧋 <b>Buy Me a Coffee</b></td><td>Small, informal gesture</td><td><a href="https://www.buymeacoffee.com/diegosouzapw">buymeacoffee.com/diegosouzapw</a></td></tr> <tr><td nowrap>🖐 <b>Liberapay</b></td><td>Recurring · non-profit · open source</td><td><a href="https://liberapay.com/diegosouzapw">liberapay.com/diegosouzapw</a></td></tr> <tr><td nowrap>🇧🇷 <b>PIX</b> (Brazil)</td><td>Instant, no fees</td><td>key & QR below</td></tr> <tr><td nowrap>₿ <b>Crypto</b></td><td>BTC · ETH · USDT-TRC20 · USDC-Solana</td><td>addresses below</td></tr> </table>🇧🇷 PIX — instant, no fees (Brazil)
Key (random): 5d865059-bc44-483a-962d-43ceb80126eb
Pix copia-e-cola:
00020101021126580014br.gov.bcb.pix01365d865059-bc44-483a-962d-43ceb80126eb5204000053039865802BR5922OMNIROUTE CONTRIBUICAO6006BRASIL62070503***630475DD
<sub>⚠️ Send each coin only on the network shown — sending on the wrong network can lose the funds.</sub>
</details>🐛 Found a bug or have feedback? Open a Discussion.
<p><strong>Developer notes:</strong> The project may generate a local <code>.env</code> file during npm install/postinstall for developer convenience. This file is intentionally ignored via <code>.gitignore</code> (see <code>.gitignore</code>) and must never be committed — if accidentally committed, rotate any exposed secrets and remove the file from history. See <a href="docs/DEVELOPER-ENVIRONMENT.md">docs/DEVELOPER-ENVIRONMENT.md</a> for guidance on managing local environment files and secrets.</p>The main free-tier headline remains ~1.51B tokens/month from the documented, pool-deduplicated catalog above. Temporary provider signup credits can separately lift the first month to ~2.13B. Radar is an optional, signed catalog overlay for people who want fresher free-model availability between OmniRoute releases; the community catalog and every existing free feature remain free.
Supporters can receive the live catalog and additional provider opportunities. Its separate, mutable ceiling is approximately 3B tokens/month at most, depending on provider availability. That ceiling is not a guarantee: providers can change quotas, eligibility, models, or regions at any time.
Radar is opt-in and GET-only. The OmniRoute client does not upload prompts, traffic, provider configuration, usage telemetry, or local announcement-dismiss state. Learn about eligibility and the current catalog at radar.omniroute.online/planos.
<div align="center">Recent highlights from v3.8.20 → v3.8.50. Full history in
CHANGELOG.md.
/v1/models ordering — one contiguous provider-grouped block per provider (combos pinned first), stable across every catalog source. → API Referencesetup-* commands; omniroute run launches 7 CLIs (Claude Code, Codex, Aider, Goose, OpenCode, Qwen Code, Gemini CLI); omniroute configure supports 9 targets with an interactive provider+model picker and per-context favorites. → CLI Integrationsconnect / contexts / tokens) + an antigravity OAuth helper for VPS installs. → Remote Modeauto/<category>:<tier> combos, Fusion (model panel + judge), task-aware routing, per-request model / mode / USD-budget overrides. → Auto-ComboX-OmniRoute-* cost/usage headers on every endpoint, cache-HIT savings header, per-key USD spend quotas. → API Referencex-omniroute-no-memory. → Memory/v1/ocr (Mistral OCR) and /v1/audio/translations (Whisper-style) round out the media surface. → API ReferencebasePath, browser-language auto-detect, per-key device tracking, root-less MITM trust, zh-TW localization. → EnvironmentX-OmniRoute-Decision header naming the strategy/provider/latency that served it, a new cache-optimized combo strategy + Auto-Combo cacheAffinity factor route repeat requests back to the connection holding the cached prefix, and a read-only /v1/auto-combo/{channel}/candidates endpoint exposes an auto/* channel's live candidate pool. → Auto-Combo<div align="center"> <table> <tr> <td align="center" width="76"><a href="https://github.com/anthropics/claude-code"> <sub><b>Claude Code</b></sub> <sub> </sub></a></td> <td align="center" width="76"><a href="https://github.com/openai/codex"> <sub><b>Codex CLI</b></sub> <sub> </sub></a></td> <td align="center" width="76"><picture><source media="(prefers-color-scheme:dark)" srcset="https://cdn.jsdelivr.net/npm/@lobehub/[email protected]/dark/cline.png"/></picture> <sub><b>Cline</b></sub> <sub> </sub></td> <td align="center" width="76"><a href="https://github.com/Kilo-Org/kilocode"> <sub><b>Kilo Code</b></sub> <sub> </sub></a></td> <td align="center" width="76"><a href="https://github.com/Zoo-Code-Org/Zoo-Code"> <sub><b>Zoo Code</b></sub> <sub> </sub></a></td> <td align="center" width="76"> <sub><b>Continue</b></sub> <sub> </sub></td> </tr> <tr> <td align="center" width="76"> <sub><b>Aider</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>ForgeCode</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>jcode</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>DeepSeek TUI</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>CodeWhale</b></sub> <sub> </sub></td> <td align="center" width="76"><a href="https://github.com/anomalyco/opencode"><picture><source media="(prefers-color-scheme:dark)" srcset="https://cdn.jsdelivr.net/npm/@lobehub/[email protected]/dark/opencode.png"/></picture> <sub><b>OpenCode</b></sub> <sub> </sub></a></td> </tr> <tr> <td align="center" width="76"> <sub><b>Factory Droid</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Copilot CLI</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Cursor CLI</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Smelt</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Pi</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Grok Build</b></sub> <sub> </sub></td> </tr> <tr> <td align="center" width="76"><picture><source media="(prefers-color-scheme:dark)" srcset="https://cdn.jsdelivr.net/npm/@lobehub/[email protected]/dark/nousresearch.png"/></picture> <sub><b>Hermes Agent</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>OpenClaw</b></sub> <sub> </sub></td> <td align="center" width="76"><picture><source media="(prefers-color-scheme:dark)" srcset="https://cdn.jsdelivr.net/npm/@lobehub/[email protected]/dark/goose.png"/></picture> <sub><b>Goose</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Open Interpreter</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Warp AI</b></sub> <sub> </sub></td> <td align="center" width="76"> <sub><b>Agent Deck</b></sub> <sub> </sub></td> </tr> </table> </div> <div align="center"> <b>+ also works with</b> · Kiro · Command Code · Antigravity · Windsurf · AMP · <b>any OpenAI-compatible tool</b> </div>One config —
http://localhost:20128/v1— and every AI IDE or CLI runs on free & low-cost models.
<sub>📖 Per-tool setup for all 35 tools (26 CLI Code's + 9 CLI Agents) → docs/reference/CLI-TOOLS.md · 🧩 OpenCode plugin → @omniroute/opencode-provider</sub>
Launch any supported CLI through OmniRoute in one command — no config files written, credentials injected per process, Qwen/Gemini get a throwaway isolated home:
omniroute run claude --model openai/gpt-5.4 # Claude Code
omniroute run codex --model glm/glm-5.2 # OpenAI Codex CLI
omniroute run aider --model glm/glm-5.2 -- --message "reply OK"
omniroute run goose --model glm/glm-5.2
omniroute run opencode --model glm/glm-5.2 -- run "reply OK"
omniroute run qwen --model glm/glm-5.2 -- -p "reply OK"
omniroute run gemini --model glm/glm-5.2 -- --skip-trust -p "reply OK"
# Or pick provider+model interactively and write the tool's own config:
omniroute configure codex # also: claude opencode qwen aider goose cline continue kilo
Every command honors the active remote context (omniroute connect <host>), --dry-run
previews the exact env/args without executing, and --api-key-env NAME keeps secrets out
of your shell history. → CLI Integrations
<div align="center">352 registered providers across the canonical chat, media, search, local, cloud-agent and system collections, including 154 carrying
hasFree: truediscovery metadata. The chat model registry covers 268 providers / 2,566 distinct provider-model pairs / 1,312 raw model IDs; the separate free-budget catalog has 455 per-model rows, 40 recurring pools and 56 recurring/keyless free-forever providers. These are different denominators by design; definitions and pool-deduped calculations live in the Provider Reference and Free Tiers.
<sub>…and 330+ more — every icon resolves live from the dashboard's provider catalog. 📖 Provider Reference</sub>
📖 Full machine-readable catalog → docs/reference/PROVIDER_REFERENCE.md
<table> <tr><th align="left">Platform</th><th align="left">Install</th><th align="left">Highlights</th></tr> <tr><td align="left" nowrap>📦 <b>npm (global)</b></td><td align="left" nowrap><code>npm install -g omniroute</code></td><td align="left">One command, any OS</td></tr> <tr><td align="left" nowrap>🐳 <b>Docker</b></td><td align="left" nowrap><code>docker run … diegosouzapw/omniroute</code></td><td align="left">Multi-arch <b>AMD64 + ARM64</b></td></tr> <tr><td align="left" nowrap>🖥️ <b>Desktop (Electron)</b></td><td align="left" nowrap><code>npm run electron:build</code></td><td align="left">Native window + system tray — <b>Windows / macOS / Linux</b></td></tr> <tr><td align="left" nowrap>💪 <b>ARM</b></td><td align="left" nowrap>native <code>arm64</code></td><td align="left">Raspberry Pi, ARM servers, Apple Silicon</td></tr> <tr><td align="left" nowrap>📱 <b>Android (Termux)</b></td><td align="left" nowrap><code>pkg install nodejs && npx -y omniroute</code></td><td align="left">Runs <b>on your phone</b>, 24/7, no root</td></tr> <tr><td align="left" nowrap>📲 <b>PWA</b></td><td align="left" nowrap>"Add to Home Screen"</td><td align="left">Fullscreen, offline, installable from browser</td></tr> <tr><td align="left" nowrap>🧩 <b>OpenCode plugin</b></td><td align="left" nowrap><code>@omniroute/opencode-provider</code></td><td align="left">Native OpenCode integration</td></tr> <tr><td align="left" nowrap>🤖 <b>VS Code Copilot Chat</b></td><td align="left" nowrap>install <b>OmniCopilot</b> extension</td><td align="left">Every OmniRoute model in the native Copilot Chat picker — stable & Insiders</td></tr> <tr><td align="left" nowrap>🛠️ <b>From source</b></td><td align="left" nowrap><code>npm install && npm run dev</code></td><td align="left">Hack on it, contribute</td></tr> </table>Same app, your machine, your rules. From a global npm install to your phone via Termux.
<sub>📖 Docker Guide · Desktop · Termux · PWA · OpenCode</sub>
<div align="center">No new sidebar, no new chat UI — every model OmniRoute serves shows up right in the Copilot Chat model picker you already use. Since VS Code 1.122, provider models work without a GitHub sign-in or a Copilot subscription — agent mode, tool calling and vision, for free.
Install the OmniCopilot extension, point it
at your OmniRoute server (defaults to localhost:20128), then open Copilot Chat → model picker
→ Manage Models… → OmniRoute.
From inside the editor: open the Extensions view, search "OmniRoute", click Install — works the same way on both stores. Source, issues and the publishing runbook live at diegosouzapw/OmniCopilot.
<sub>📖 VS Code Copilot Chat guide — setup, what the picker shows, dashboard-in-a-tab, troubleshooting</sub>
<div align="center"><sub>📖 Authorization · Guardrails · Compliance</sub>
<div align="center">Beyond the server, OmniRoute is a full command-line cockpit with 80+ commands, plus open agent protocols so an AI agent can drive it on its own.
start)omniroute # serve gateway + dashboard (port 20128)
omniroute chat # interactive TUI chat client (slash: /model /combo /skill /memory)
omniroute setup # guided first-run wizard
omniroute doctor # diagnose providers, ports, native deps
OmniRoute on a server? Drive it from your laptop with the same CLI. Log in once with a scoped access token; every command then targets the remote.
omniroute connect 192.168.0.15 # password → scoped token, saved as a context
omniroute models list # ← runs against the REMOTE server
omniroute configure codex # ← picks a remote model, writes a local Codex profile
omniroute tokens create --name ci --scope read # mint narrower tokens for other machines
omniroute contexts use default # ← switch back to the local server
Tokens are scoped read / write / admin; process-spawning routes stay loopback-only.
<sub>📖 Remote Mode</sub>
Expose OmniRoute over MCP, A2A, a REST API, webhooks or a remote CLI — any capable agent (or your own code) gets the keys to the whole gateway: routing, providers, combos, cache, compression, memory — autonomously. HTTP endpoints below are served under http://localhost:20128.
# Give Claude Code the full OmniRoute toolset over MCP:
claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/stream
<sub>📖 MCP Server · A2A Server · Agent Protocols</sub>
<div align="center">Default stacked combo runs RTK → Caveman. When both act on the same tool/context payload, savings compound:
combined = 1 − (1 − RTK) × (1 − Caveman_input)
average = 1 − (1 − 0.80) × (1 − 0.46) = 89.2%
range = 78.4 – 94.6%
Code blocks, URLs, JSON and structured data are always protected by the preservation engine.
Why use many tokens when few tokens do the trick? Every request passes through OmniRoute's compression pipeline transparently — no client changes. It's now a stack of 12 composable engines that run in order and mix & match per routing combo — building on ideas from RTK, Caveman (⭐ 90K+), LLMLingua-2, and Troglodita (PT-BR).
Engines run in pipeline order; each is independently toggleable and configurable per combo:
<table> <tr><th align="center">#</th><th align="left">Engine</th><th align="left">What it does</th></tr> <tr><td align="center" nowrap>1</td><td align="left" nowrap><b>Session-Dedup</b></td><td align="left">Drops content repeated across turns (content-addressed, cross-turn)</td></tr> <tr><td align="center" nowrap>2</td><td align="left" nowrap><b>CCR</b></td><td align="left">Archives large blocks behind retrieve markers, fetched on demand</td></tr> <tr><td align="center" nowrap>3</td><td align="left" nowrap><b>Lite</b></td><td align="left">Whitespace + image-URL trimming (latency-light baseline)</td></tr> <tr><td align="center" nowrap>4</td><td align="left" nowrap><b>RTK</b></td><td align="left">Smart tool-result filtering, dedup & truncation (command-aware)</td></tr> <tr><td align="center" nowrap>5</td><td align="left" nowrap><b>Responses Tool Output</b></td><td align="left">Lossless-first JSON + bounded diagnostic compression for shell/patch/search/build outputs (Responses API)</td></tr> <tr><td align="center" nowrap>6</td><td align="left" nowrap><b>Headroom</b></td><td align="left">Lossless tabular compaction of JSON arrays (~30%) via a vendored <b>GCF</b> codec</td></tr> <tr><td align="center" nowrap>7</td><td align="left" nowrap><b>Relevance</b></td><td align="left">Extractive sentence scoring against the last user query</td></tr> <tr><td align="center" nowrap>8</td><td align="left" nowrap><b>Caveman</b></td><td align="left">Rule-based prose compression (~65–75% on output)</td></tr> <tr><td align="center" nowrap>9</td><td align="left" nowrap><b>Aggressive</b></td><td align="left">Summarization + progressive aging of old turns</td></tr> <tr><td align="center" nowrap>10</td><td align="left" nowrap><b>LLMLingua-2</b></td><td align="left">ML semantic pruning via MobileBERT ONNX — code-safe, async</td></tr> <tr><td align="center" nowrap>11</td><td align="left" nowrap><b>Ultra</b></td><td align="left">Heuristic token pruning with an optional small-model (SLM) tier</td></tr> <tr><td align="center" nowrap>12</td><td align="left" nowrap><b>OmniGlyph</b></td><td align="left">Experimental context-as-image encoding for measured Claude Fable 5 on the direct Anthropic wire; GPT 5.6 transformers remain fail-closed pending provider receipts. Four compression profiles (aggressive default, balanced, coding-safe, passthrough) (most aggressive; opt-in)</td></tr> </table>Code blocks, URLs and structured data are always preserved byte-perfect. One-click presets combine the engines:
<table> <tr><th align="left">Mode</th><th align="left">Savings</th><th align="left">Best for</th></tr> <tr><td align="left" nowrap>🪶 <b>Lite</b></td><td align="left" nowrap>~15%</td><td align="left">Always-on safe default</td></tr> <tr><td align="left" nowrap>🪨 <b>Standard (Caveman)</b></td><td align="left" nowrap>~30%</td><td align="left">Daily coding</td></tr> <tr><td align="left" nowrap>⚡ <b>Aggressive</b></td><td align="left" nowrap>~50%</td><td align="left">Long tool-heavy sessions</td></tr> <tr><td align="left" nowrap>🔥 <b>Ultra</b></td><td align="left" nowrap>~75%</td><td align="left">Maximum savings</td></tr> <tr><td align="left" nowrap>🧰 <b>RTK</b></td><td align="left" nowrap>60–90%</td><td align="left">Shell/test/build/git output</td></tr> <tr><td align="left" nowrap>🔗 <b>Stacked (RTK → Caveman)</b></td><td align="left" nowrap><b>78–95%</b></td><td align="left">Mixed prompts + tool logs</td></tr> </table>Real example — Standard mode:
Before (69 tokens): "The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I would recommend using useMemo to memoize the object."
After (19 tokens): "New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo."
Same answer. 72% fewer tokens. Zero accuracy loss. ✅
PT-BR example — Troglodita mode:
Antes (42 tokens): "O problema é que o componente está re-renderizando porque uma nova referência de objeto está sendo criada em cada ciclo de renderização. Eu recomendaria usar useMemo."
Depois (12 tokens): "Re-render: ref nova cada ciclo (objeto inline recriado). Usar
useMemo."Mesma resposta. ~70% menos tokens. Precisão técnica intacta. ✅
The 12 engines above shrink what goes in. Three more layers shape how, when, and what comes out:
lite / full / ultra intensity. Adding a style is a one-line registry entry:
zh).reserve-output (default, model-aware) · percentage · absolute. Mode: floor (guarantee fit) · replace-autotrigger (your explicit choice wins) · off (legacy threshold).x-omniroute-compression header › routing-combo override › active named profile › adaptive / auto-trigger › panel default › off. The applied plan echoes back in the X-OmniRoute-Compression: <mode>; source=<source> response header.Auto-trigger by token threshold, flip on the adaptive dial, pin a named profile, set a one-off per request, or assign a pipeline per routing combo — whichever fits the workload. An opt-in offline eval harness (npm run eval:compression) scores fidelity vs. savings on a pinned corpus before you promote a change.
📖 COMPRESSION_GUIDE.md · RTK_COMPRESSION.md · COMPRESSION_ENGINES.md
1) Install & run
npm install -g omniroute
omniroute
💡 See
npm warn ERESOLVEor peer-dep warnings? They're harmless.
Dashboard at http://localhost:20128 · API at http://localhost:20128/v1.
2) Connect a FREE provider (no signup)
Dashboard → Providers → connect Kiro AI (free Claude, ~50 credits/month per account) or OpenCode Free (no auth) → done.
3) Point your coding tool
Base URL: http://localhost:20128/v1
API Key: [copy from Dashboard → Endpoints]
Model: auto (zero-config smart routing — or any provider/model)
4) Verify it's working
curl http://localhost:20128/v1/models -H "Authorization: Bearer YOUR_KEY"
You should see your connected models listed. 🎉 That's it — start coding, and OmniRoute auto-routes & falls back for you.
If your client cannot send custom headers, OmniRoute also exposes tokenized compatibility aliases:
OpenAI catalog: http://localhost:20128/vscode/YOUR_KEY/
OpenAI models: http://localhost:20128/vscode/YOUR_KEY/models
OpenAI chat: http://localhost:20128/vscode/YOUR_KEY/chat/completions
OpenAI responses: http://localhost:20128/vscode/YOUR_KEY/responses
Ollama chat: http://localhost:20128/vscode/YOUR_KEY/api/chat
Ollama tags: http://localhost:20128/vscode/YOUR_KEY/api/tags
Use these only for clients that cannot attach Authorization: Bearer .... Header auth remains the preferred mode.
🐳 Docker
docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
-p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest
:latest follows the highest published stable SemVer. It does not track git main. Pin :X.Y.Z for GitOps. See Docker Release Channels.The image pins OMNIROUTE_MEMORY_MB=1024. That is enough for the dashboard and a light chat. Coding agents (POST /v1/responses from Claude Code, Codex, Grok, …) need a much larger V8 heap or the process FATAL ERRORs at ~12 GiB under two overlapping long contexts. Size the container above the heap (native buffers sit outside V8):
| Workload | Heap (-e OMNIROUTE_MEMORY_MB) | Container (--memory) |
|---|---|---|
| Dashboard / light chat | 1024 (image default) | ≥2 g |
| One coding agent | 8192 | ≥10 g |
Two concurrent long /v1/responses | 10240–12288 | ≥12–16 g |
docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
-e OMNIROUTE_MEMORY_MB=8192 --memory=10g \
-p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest
Full table: Docker Guide — runtime RAM.
Pre-release Docker channel:
diegosouzapw/omniroute:nextanddiegosouzapw/omniroute:next-webfollow the current defaultrelease/v*branch. These mutable tags are intended only for testing unreleased fixes and are not supported for production. See Docker Release Channels.
🥟 Bun
Standard bun install and global installation (bun install -g omniroute) are supported via Bun runtime detection:
bun:sqlite: OmniRoute uses Bun's built-in bun:sqlite driver when running under Bun, falling back to better-sqlite3 on Node.js or sql.js.bun run dev) and production builds (bun run build) automatically detect Bun and disable Turbopack in favor of Webpack to prevent native V8 binding incompatibilities.Dockerfile.bun for native Bun production deployments (docker build -f Dockerfile.bun -t omniroute:bun .).# Install and run with Bun
bun install
bun run dev
🛠️ From source
cp .env.example .env && npm install
PORT=20128 npm run dev
📦 pnpm
pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core && omniroute
🐧 Arch Linux (AUR)
yay -S omniroute-bin && systemctl --user enable --now omniroute.service
🔧 Nix (Flake)
# Using Nix flakes
nix develop
npm run dev
# Or using devbox
devbox run npm run dev
📖 Docker Guide — Compose profiles, Caddy HTTPS, Cloudflare tunnels.
🦭 Podman
# 1. Prepare the bind-mounted data directory
mkdir -p data
# 2. Linux + local rootless Podman only (never a remote Podman Machine client):
podman unshare chown 1000:1000 ./data
# 3. Set the runtime hint, build the local Compose image, and start
echo "CONTAINER_HOST=podman" >> .env
podman compose --profile base up -d --build
On macOS or Windows, Podman uses a remote Podman Machine: skip podman unshare and
follow the topology-specific data directory guidance.
📖 Podman Guide — Compose builds, Podman Machine, and Linux/systemd Quadlet setup.
⚡ Faster / leaner install (skip the native build)
The native SQLite engine (better-sqlite3) is an optional dependency, so a global
install never blocks on compiling from source: it uses a prebuilt binary when one matches
your platform/Node, and otherwise falls back transparently to a pure-JS engine
(node:sqlite on Node 22+, else the bundled sql.js WASM) — no build tools required.
To skip the post-install native warm-up entirely (CI, headless, or slow machines):
OMNIROUTE_SKIP_POSTINSTALL=1 npm install -g omniroute # CI=1 also skips it
For the fastest installs prefer pnpm (content-addressed store + hard links — see above).
For a dashboard-free, headless runtime use the Docker base profile (above) or the
Termux guide. The CLI and the web dashboard are served by the
same process on one port, so there is no separate CLI-only package today.
<sub>Snapshot do painel em 2026-08-24 · Catálogo bruto: YT 809 | TT 137 | IG 124 · Frescor (dias): YT 1 | TT 21 | IG 22</sub>
<table> <tr> <td align="center" width="320"> <a href="https://www.instagram.com/reel/Da8ZthUPK98/"> </a>
<b>🎬 #1 — Instagram</b>
<sub>nick_saraev — 3,042,474 views</sub>
</td>
<td align="center" width="320">
<a href="https://www.instagram.com/reel/DaSs65mMrHk/">
</a>
<b>🎬 #2 — Instagram</b>
<sub>theopenstack — 692,419 views</sub>
</td>
<td align="center" width="320">
<a href="https://www.tiktok.com/@milesreevesai/video/7667980059189366019">
</a>
<b>🎬 #3 — TikTok</b>
<sub>milesreevesai — 620,400 views</sub>
</td>
<td align="center" width="320">
<a href="https://www.youtube.com/watch?v=QucgvbO5gsM">
</a>
<b>🎬 #4 — YouTube</b>
<sub>Vaibhav Sisinty — 391,109 views</sub>
</td>
<td align="center" width="320">
<a href="https://www.instagram.com/reel/DbIt9AjK7-U/">
</a>
<b>🎬 #5 — Instagram</b>
<sub>buildwithai.club — 347,652 views</sub>
</td>
Ranking completo (URLs canônicas deduplicadas, v > 0, maior alcance):
| #1 | #2 | #3 | #4 | #5 |
|---|---|---|---|---|
| nick_saraev — Instagram — 3,042,474 | theopenstack — Instagram — 692,419 | milesreevesai — TikTok — 620,400 | Vaibhav Sisinty — YouTube — 391,109 | buildwithai.club — Instagram — 347,652 |
| #6 | #7 | #8 | #9 | #10 |
|---|---|---|---|---|
| nivedan.ai — Instagram — 331,973 | vaibhavsisinty — Instagram — 263,744 | Nick Automates — YouTube Shorts — 218,174 | theroshankrishna — Instagram — 186,786 | midudev — TikTok — 177,800 |
Métricas canônicas em 2026-08-24: 1.029 vídeos únicos · 11.132.922 visualizações conhecidas (v > 0) · 639 canais/perfis por rede. O painel bruto contém 1.070 linhas; 41 duplicatas do Instagram foram normalizadas pela URL canônica, mantendo a maior contagem por vídeo.
<div align="center">🎬 Made a video about OmniRoute? Open an issue or discussion with the link — we'll feature it here.
Everything in one place — follow the maintainer, chat with the community, or open an issue.
| Channel | Where / how |
|---|---|
| 💼 LinkedIn — follow the maintainer | linkedin.com/in/diegosouzapw |
| 🐙 GitHub — follow for releases & tips | @diegosouzapw |
| 💬 Discord | discord.gg/U47eFqAXCn |
| ✈️ Telegram | t.me/omnirouteOficial |
| 🟢 WhatsApp — 🌍 Global | join the group |
| 🟢 WhatsApp — 🇧🇷 Brasil | entrar no grupo |
| 🌍 Website | omniroute.online |
| 📦 Source code | github.com/diegosouzapw/OmniRoute |
| 🐛 Report a bug | open an issue — attach npm run system-info output |
| 🤝 Contribute | CONTRIBUTING.md · Branching & Release Model · pick a good first issue |
| 💚 Support the project | Ways to support ↑ · GitHub Sponsors |
OmniRoute is shaped by a passionate open-source community. These individuals have made exceptional contributions that directly impact the quality, stability, and reach of the project. Thank you.
<sub>Frozen at live <code>release/v3.8.50</code> tip <code>dafb4ae808</code>, with merges through 2026-08-24 05:26:03 UTC. The paginated GitHub GraphQL census contains 5,911 merged PRs: 2,707 by the repository owner, 179 by Dependabot, and <b>3,025 external PRs from 535 distinct contributors</b>. “Changed lines” is GitHub additions + deletions and includes generated files, lockfiles, catalogs, translations and documentation; it is churn, not authored LOC. Ties at the cutoff are retained.</sub>
<b>backryun</b>
</a>
<sub>🥇 220 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/oyi77">
<b>Paijo</b>
</a>
<sub>🥈 219 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/rdself">
<b>Randi</b>
</a>
<sub>🥉 108 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/RaviTharuma">
<b>Ravi Tharuma</b>
</a>
<sub>🏅 81 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/christopher-s">
<b>Chris</b>
</a>
<sub>🏅 70 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/hartmark">
<b>Markus Hartung</b>
</a>
<sub>🏅 69 GitHub-attributed commits · tied #6</sub>
</td>
<b>Dizzle</b>
</a>
<sub>🏅 69 GitHub-attributed commits · tied #6</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/JxnLexn">
<b>Jan Leon</b>
</a>
<sub>🏅 64 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/zen0bit">
<b>zenobit</b>
</a>
<sub>🏅 62 GitHub-attributed commits</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/HouMinXi">
<b>Bob.Hou</b>
</a>
<sub>🏅 51 GitHub-attributed commits · tied #10</sub>
</td>
<td align="center" width="160">
<a href="https://github.com/xz-dev">
<b>Xiangzhe</b>
</a>
<sub>🏅 51 GitHub-attributed commits · tied #10</sub>
</td>
<sub>Rechecked at 2026-08-24 06:14:31 UTC: GitHub-attributed commits reported by the repository Contributors API for the <code>release/v3.8.50</code> default branch. The API returned 525 identities (415 users, 2 bots, 108 anonymous); this table excludes the maintainer, bots and anonymous identities and retains competition ties. It is distinct from both the merged-PR ranking above and the 639-person Git-metadata census below.</sub>
</div>🙏 These contributors' features, bug fixes, and infrastructure improvements are a core part of what makes OmniRoute reliable and feature-rich. Every pull request, every test case, and every i18n translation file matters. Open source is built by people like them.
A heartfelt thank-you to the people who fund OmniRoute out of their own pocket — every contribution keeps the project free, independent and moving.
<table> <tr> <td align="center" width="180"> <a href="https://github.com/drewbitt"> <b>Andrew</b>
</a>
<sub>💛 Active monthly sponsor</sub>
</td>
<td align="center" width="180">
<a href="https://github.com/psylligent">
<b>Vlad I</b>
</a>
<sub>💛 Active monthly sponsor</sub>
</td>
<td align="center" width="180">
<a href="https://github.com/pacocartones">
<b>Paco Cartones</b>
</a>
<sub>💛 Active one-time sponsor</sub>
</td>
<td align="center" width="180">
<a href="https://github.com/igormorais123">
<b>Prof. Igor Morais</b>
</a>
<sub>💛 Past one-time supporter</sub>
</td>
<td align="center" width="180">
<a href="https://github.com/longtao77">
<b>longtao</b>
</a>
<sub>💛 Past one-time supporter</sub>
</td>
<sub>… and others who prefer to stay private 💛</sub>
<sub>Public GitHub Sponsors revalidated on 2026-08-24. GitHub's <code>activeOnly</code> status determines the active labels above; previously disclosed public one-time supporters remain thanked, and private sponsors remain anonymous.</sub>
<b><a href="https://github.com/sponsors/diegosouzapw">💖 Become a sponsor →</a></b> — every dollar keeps OmniRoute free and independent.
</div> <div align="center"><sub>Audited on 2026-08-24 at frozen base <code>ac02c5b42f</code> and rechecked at live <code>release/v3.8.50</code> tip <code>dafb4ae808</code>: <b>639 normalized human Git identities</b> — 407 appear as commit authors (including the maintainer) and 232 only in explicit <code>Co-authored-by</code> trailers. The census normalizes GitHub noreply handles, excludes 26 bot/agent/service/placeholder identities, and does not merge ordinary email addresses merely because their display names match.</sub>
release/vX.Y.Z tip (not main) — see Branching & Release Modelgit checkout -b feat/amazing-feature)git commit -m 'feat: add amazing feature')git push origin feat/amazing-feature)release/vX.Y.Z branchSee CONTRIBUTING.md for detailed guidelines.
# Create a release — npm publish happens automatically
VERSION=x.y.z
gh release create "v${VERSION}" --title "v${VERSION}" --generate-notes
OmniRoute stands on the shoulders of giants. It started as a fork of 9router and a TypeScript port of the Go project CLIProxyAPI — and from there, every subsystem below was inspired by an open-source project that got there first. Each one shaped a concrete piece of OmniRoute. This is our thank-you to all of them. 🙏
⭐ star counts verified from GitHub's REST API on August 24, 2026 — go give these projects a star. Counts are an exact dated snapshot and will naturally change.
MIT License - see LICENSE for details.
⬆ Back to top · Built with ❤️ for the open-source AI community.
<sub>OmniRoute v3.8.50 · Node ≥22.22.2 · MIT License · <a href="https://omniroute.online">omniroute.online</a></sub>
</div> <!-- GitHub Discussions enabled for community Q&A -->