Never stop coding. Free MIT AI gateway: one endpoint, 290+ providers (90+ free), 500+ models — Kimi, Claude, GPT, OpenAI, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 500+ contributors
$ npx -y skills add diegosouzapw/OmniRoute --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: diegosouzapw/OmniRoute
What's inside
Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute aggregates the documented free tiers of 43 provider pools / 516 models into one honest number and shows it live on the dashboard (
/dashboard/free-tiers).
Animated summary of the live
/dashboard/free-tierspage. Full methodology (pool dedupe, credit tiers, provider terms): docs/reference/FREE_TIERS.md.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.
⭐ Star the repo if OMNIROUTE helped you save money and make your work easier.
👋 Follow the maintainer — get new providers, releases & tips first:
Questions, provider tips, roadmap & support → Discord · Telegram · WhatsApp 🌍 Global / 🇧🇷 Brasil
# 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!"}]}'
Prefer a specific free backend? Call it directly, e.g. oc/… (OpenCode Free) or felo/… (Felo). Then graduate to auto and let OmniRoute pick.
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: diegosouza.pw@outlook.com
Links tagged aff=omniroute are partner links. They fund the project at no extra cost to you.
This section is for referral/coupon codes only. Sponsored partnerships live in 🤝 Supported by our Open Source Friends above. OmniRoute has no sponsorship or partnership with the providers listed here — these are public coupons anyone can use.
Know another provider with a generous free signup coupon that benefits OmniRoute users? Open an issue and we'll add it here.
A combo is a chain of models OmniRoute routes across automatically. Quota runs out, a provider fails, or costs spike — the combo silently slides to the next model. This is what makes OmniRoute unbreakable. 🛡️
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:
The Auto-Combo engine scores every candidate on 12 factors (health, quota, cost, latency, success rate, freshness…) — see docs/routing/AUTO-COMBO.md.
📖 Auto-Combo Engine · Resilience Guide
📊 Full methodology & per-feature detail vs 9router, OpenRouter, CLIProxyAPI & LiteLLM → docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md
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.
🇧🇷 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
⚠️ Send each coin only on the network shown — sending on the wrong network can lose the funds.
🐛 Found a bug or have feedback? Open a Discussion.
Recent highlights from v3.8.20 → v3.8.49. Full history in
CHANGELOG.md.
setup-* configures 12+ coding tools; omniroute launch / launch-codex are zero-config. → 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-ComboOne config —
http://localhost:20128/v1— and every AI IDE or CLI runs on free & low-cost models.
📖 Per-tool setup for all 33 tools (25 CLI Code's + 8 CLI Agents) → docs/reference/CLI-TOOLS.md · 🧩 OpenCode plugin → @omniroute/opencode-provider
The most complete catalog of any open-source router: 291 providers, 90+ with a free tier, 40+ free forever.
…and 220+ more — every icon resolves live from the dashboard's provider catalog. 📖 Provider Reference
📖 Full machine-readable catalog → docs/reference/PROVIDER_REFERENCE.md
Same app, your machine, your rules. From a global npm install to your phone via Termux.
📖 Docker Guide · Desktop · Termux · PWA · OpenCode
📖 Authorization · Guardrails · Compliance
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.
📖 Remote Mode
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
📖 MCP Server · A2A Server · Agent Protocols
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:
Code blocks, URLs and structured data are always preserved byte-perfect. One-click presets combine the engines:
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
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.
🛠️ 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.
🎬 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.
🙏 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.
… and others who prefer to stay private 💛
💖 Become a sponsor → — every dollar keeps OmniRoute free and independent.
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
gh release create v3.8.2 --title "v3.8.2" --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 as of July 2026 — go give these projects a star.
MIT License - see LICENSE for details.
⬆ Back to top · Built with ❤️ for the open-source AI community.
OmniRoute v3.8.49 · Node ≥22.22.2 · MIT License · omniroute.online
_references/
_sistemas_cli/
01-relatorio-pesquisa-clis-omniroute.md
02-prioridade-integracoes-clis.md
03-plano-integracao-em-lotes.md
04-tracker-integracoes-clis.md
05-plano-publicacao-prs-upstream.md
06-relatorio-final-104-clis-e-estrategia-prs.md
.cbmignore
.claude/
worktrees/
feat-7786/
changelog.d/
features/
7786-management-auth-terminology-docs.md
docs/
guides/
MANAGEMENT-AUTH.md
tests/
unit/
management-auth-docs.test.ts
feat-8635/
changelog.d/
features/
8635-systemd-autostart-linux.md
contrib/
systemd/
omniroute.service
tests/
unit/
systemd-autostart.test.ts
.dockerignore
.editorconfig
.env.devin-bridge.example
.env.example
.env.homolog.example
.eslintcache-probe
.fakebin-9475/
npm
.github/
actions/
npm-ci-retry/
action.yml
CODEOWNERS
copilot-instructions.md
dependabot.yml
FUNDING.yml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature_request.yml
test_coverage_task.yml
pull_request_template.md
workflows/
build.yml
ci.yml
claude.yml
codeql.yml
dast-smoke.yml
deploy-vps.yml
docker-publish.yml
electron-release.yml
lock-released-branch.yml
mutation-redundancy.yml
nightly-compat.yml
nightly-llm-security.yml
nightly-mutation.yml
nightly-property.yml
nightly-release-green.yml
nightly-resilience.yml
nightly-schemathesis.yml
npm-publish.yml
opencode-plugin-ci.yml
opencode-provider-ci.yml
quality.yml
scorecard.yml
semgrep.yml
wiki-sync.yml
.gitignore
.gitleaks.toml
.husky/
pre-commit
pre-push
.markdownlint.json
.mergify.yml
.node-version
.npmignore
.npmrc
.nvmrc
.prettierignore
.size-limit.json
.trivyignore
.vale/
.vale.ini
styles/
Vocab/
OmniRoute/
accept.txt
.vscode/
settings.json
.zizmor.yml
@omniroute/
opencode-plugin/
.gitignore
LICENSE
package-lock.json
package.json
README.md
src/
index.ts
logger.ts
naming.ts
tests/
auth.test.ts
auto-combo-context.test.ts
auto-sync.test.ts
combos.test.ts
config-shim.test.ts
disk-snapshot-perms.test.ts
feature-defaults.test.ts
features.test.ts
fetch-interceptor.test.ts
fork-features.test.ts
gemini-sanitize.test.ts
management-read-token.test.ts
model-allowlist.test.ts
multi-instance.test.ts
options-schema.test.ts
provider-id-routing.test.ts
provider.test.ts
scaffold.test.ts
usable-combo.test.ts
tsconfig.json
tsup.config.ts
opencode-provider/
.gitignore
.npmignore
LICENSE
package-lock.json
package.json
README.md
src/
index.ts
tests/
index.test.ts
tsconfig.json
tsup.config.ts
AGENTS.md
bin/
_ops-common.sh
aliasResolver.mjs
aliasResolverHook.mjs
cli/
api-commands/
agent-skills.mjs
agentbridge.mjs
api-keys.mjs
audio.mjs
chat.mjs
cli-tools.mjs
cloud.mjs
combos.mjs
compression.mjs
embedded-services.mjs
embeddings.mjs
fallback.mjs
images.mjs
memory.mjs
messages.mjs
models.mjs
moderations.mjs
oauth.mjs
playground.mjs
pricing.mjs
provider-nodes.mjs
providers.mjs
quota.mjs
registry.mjs
rerank.mjs
responses.mjs
settings.mjs
system.mjs
telemetry.mjs
traffic-inspector.mjs
translator.mjs
usage.mjs
api.mjs
commands/
a2a.mjs
audit.mjs
auth-export.mjs
autostart.mjs
backup.mjs
batches.mjs
cache.mjs
chat.mjs
cloud.mjs
combo.mjs
completion.mjs
compression.mjs
config.mjs
configure.mjs
connect.mjs
context-eng.mjs
contexts.mjs
cost.mjs
dashboard.mjs
doctor.mjs
env.mjs
eval.mjs
files.mjs
health.mjs
keys.mjs
launch-codex.mjs
launch.mjs
login.mjs
logs.mjs
mcp.mjs
memory.mjs
models.mjs
nodes.mjs
oauth.mjs
oneproxy.mjs
open.mjs
openapi.mjs
plugin.mjs
policy.mjs
pricing.mjs
provider-cmd.mjs
providers.mjs
quota.mjs
redis.mjs
registry.mjs
repl.mjs
reset-encrypted-columns.mjs
resilience.mjs
restart.mjs
runtime.mjs
serve.mjs
sessions.mjs
setup-aider.mjs
setup-claude.mjs
setup-cline.mjs
setup-codex.mjs
setup-continue.mjs
setup-crush.mjs
setup-cursor.mjs
setup-goose.mjs
setup-kilo.mjs
setup-open-code.mjs
setup-opencode.mjs
setup-qwen.mjs
setup-roo.mjs
setup.mjs
simulate.mjs
skills.mjs
status.mjs
stop.mjs
stream.mjs
sync.mjs
tags.mjs
telemetry.mjs
test-provider.mjs
tokens.mjs
translator.mjs
tray.mjs
tunnel.mjs
update.mjs
usage.mjs
webhooks.mjs
contexts.mjs
CONVENTIONS.md
data-dir.mjs
encryption.mjs
i18n.mjs
io.mjs
locales/
ar.json
az.json
bg.json
bn.json
cs.json
da.json
de.json
en.json
es.json
fa.json
fi.json
fr.json
gu.json
he.json
hi.json
hu.json
id.json
in.json
it.json
ja.json
ko.json
mr.json
ms.json
nl.json
no.json
phi.json
pl.json
pt-BR.json
pt.json
ro.json
ru.json
sk.json
sv.json
sw.json
ta.json
te.json
th.json
tr.json
uk-UA.json
ur.json
vi.json
zh-CN.json
zh-TW.json
output.mjs
plugins.mjs
program.mjs
provider-catalog.mjs
provider-store.mjs
provider-test.mjs
README.md
runtime/
runtime.mjs
index.mjs
magicBytes.mjs
nativeDeps.mjs
processSupervisor.mjs
sqliteRuntime.mjs
supervisorPolicy.mjs
trayRuntime.ts
schemas/
output-schemas.mjs
scripts/
generate-locales.mjs
settings-store.mjs
spinner.mjs
sqlite.mjs
tray/
autostart.mjs
autostart.ts
icon.png
index.mjs
tray.ps1
tray.ts
traySystray.mjs
trayWin.ts
trayWindows.mjs
tui/
tui-components/
CodeBlock.jsx
ConfirmDialog.jsx
DataTable.jsx
HeaderSwr.jsx
KeyMaskedDisplay.jsx
MarkdownView.jsx
MenuSelect.jsx
MultilineInput.jsx
ProgressBar.jsx
Sparkline.jsx
StatusBadge.jsx
theme.jsx
TokenCounter.jsx
Dashboard.jsx
EvalWatch.jsx
InterfaceMenu.jsx
OAuthFlow.jsx
ProvidersTestAll.jsx
Repl.jsx
session.mjs
tabs/
Combos.jsx
Cost.jsx
Health.jsx
Keys.jsx
Logs.jsx
Overview.jsx
Providers.jsx
utils/
clipboard.mjs
cliToken.mjs
ensureAndroidCacheDir.mjs
environment.mjs
pid.mjs
storageKeyProvision.mjs
versionFastPath.mjs
winShellArgs.mjs
cold-start-bench.sh
mcp-server.mjs
mcpStdioConsoleGuard.mjs
nodeRuntimeSupport.mjs
omniroute.mjs
reset-password.mjs
restore-data.sh
restore-policies.sh
... 1600 moreShowing a partial view of a very large repo.
FAQ
omniroute is a Claude Code plugin with 45 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes cli-a2a, cli-backup-sync, cli-batches. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.