- 🚫 Never hit limits Auto-fallback across 226 providers in milliseconds. Quota out? Next provider takes over — zero downtime. |
+ 🚫 Never hit limits Auto-fallback across 227 providers in milliseconds. Quota out? Next provider takes over — zero downtime. |
💸 Save up to 95% tokens RTK + Caveman stacked compression cuts 15–95% of eligible tokens (~89% avg on tool-heavy sessions). |
🆓 $0 to start 50+ providers with a free tier, 11 free forever (Kiro, Qoder, Pollinations, LongCat…). No card needed. |
@@ -263,7 +263,7 @@ Result: 4 layers of fallback = zero downtime
| Feature | OmniRoute | Other routers |
| -------------------------------------- | ----------------------------------------------------------- | ------------- |
-| 🌐 Providers | **226** | 20–100 |
+| 🌐 Providers | **227** | 20–100 |
| 🆓 Free providers | **50+ (11 free forever)** | 1–5 |
| 🔀 Routing strategies | **15** (priority, weighted, cost-optimized, context-relay…) | 1–3 |
| 🗜️ Token compression | **RTK + Caveman stacked (15–95%)** | None / 20–40% |
@@ -319,11 +319,11 @@ Result: 4 layers of fallback = zero downtime
-# 🌐 226 AI Providers — 50+ Free
+# 🌐 227 AI Providers — 50+ Free
-> The most complete catalog of any open-source router: **226 providers**, **50+ with a free tier**, **11 free forever**.
+> The most complete catalog of any open-source router: **227 providers**, **50+ with a free tier**, **11 free forever**.
@@ -445,17 +445,17 @@ claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp
Engines run in pipeline order; each is independently toggleable and configurable per combo:
-| # | Engine | What it does |
-| --- | ----------------- | ------------------------------------------------------------------------ |
-| 1 | **Session-Dedup** | Drops content repeated across turns (content-addressed, cross-turn) |
-| 2 | **CCR** | Archives large blocks behind retrieve markers, fetched on demand |
-| 3 | **RTK** | Smart tool-result filtering, dedup & truncation (command-aware) |
-| 4 | **Headroom** | Lossless tabular compaction of homogeneous JSON arrays (~30%+) |
-| 5 | **Caveman** | Rule-based prose compression (~65–75% on output) |
-| 6 | **LLMLingua-2** | ML semantic pruning via MobileBERT ONNX — code-safe, async |
-| 7 | **Lite** | Whitespace + image-URL trimming (latency-light baseline) |
-| 8 | **Aggressive** | Summarization + progressive aging of old turns |
-| 9 | **Ultra** | Heuristic token pruning with an optional small-model (SLM) tier |
+| # | Engine | What it does |
+| --- | ----------------- | ------------------------------------------------------------------- |
+| 1 | **Session-Dedup** | Drops content repeated across turns (content-addressed, cross-turn) |
+| 2 | **CCR** | Archives large blocks behind retrieve markers, fetched on demand |
+| 3 | **RTK** | Smart tool-result filtering, dedup & truncation (command-aware) |
+| 4 | **Headroom** | Lossless tabular compaction of homogeneous JSON arrays (~30%+) |
+| 5 | **Caveman** | Rule-based prose compression (~65–75% on output) |
+| 6 | **LLMLingua-2** | ML semantic pruning via MobileBERT ONNX — code-safe, async |
+| 7 | **Lite** | Whitespace + image-URL trimming (latency-light baseline) |
+| 8 | **Aggressive** | Summarization + progressive aging of old turns |
+| 9 | **Ultra** | Heuristic token pruning with an optional small-model (SLM) tier |
Code blocks, URLs and structured data are **always preserved** byte-perfect. **One-click presets** combine the engines:
@@ -751,7 +751,7 @@ Compression: aggressive (~50%) → double your free quota · Cost: $0/mo
**Will I be charged by OmniRoute?** No — it's free, open-source software on your machine. You only pay paid providers directly. OmniRoute has no billing system.
**Are FREE providers really unlimited?** Yes — Kiro, Qoder, Pollinations, LongCat, Cloudflare. No catch.
**Will compression hurt quality?** No — it only compresses the **input**; code, URLs, JSON are always protected.
-**Does it work where AI is blocked?** Yes — 3-level proxy + 1proxy marketplace reach all 226 providers.
+**Does it work where AI is blocked?** Yes — 3-level proxy + 1proxy marketplace reach all 227 providers.
📖 [User Guide](docs/guides/USER_GUIDE.md) · [API Reference](docs/reference/API_REFERENCE.md) · [Environment Config](docs/reference/ENVIRONMENT.md)
diff --git a/config/quality/file-size-baseline.json b/config/quality/file-size-baseline.json
index 02ab6b58df..6939cb831d 100644
--- a/config/quality/file-size-baseline.json
+++ b/config/quality/file-size-baseline.json
@@ -1,5 +1,6 @@
{
"_comment": "Catraca de tamanho (check-file-size.mjs). frozen so pode encolher; arquivos novos <= cap. --update ratcheta.",
+ "_rebaseline_2026_06_17_4070_orcarouter": "PR #4070 own growth: providers.ts 3147->3159 (+12 = the OrcaRouter catalog entry, a single Zod-validated provider record { id/alias/name/icon/color/textIcon/passthroughModels/website/apiHint } in the providers map — pure data, the standard per-provider addition; bumps the catalog 226->227). Cohesive catalog growth, not extractable.",
"_rebaseline_2026_06_17_4058_auto_catalog": "PR #4058 own growth: chat.ts 1432->1458 (+26 = built-in auto/* catalog recognition gating in handleChat: recognizedBuiltInAuto + per-id variant resolution + the 'unknown built-in auto combo' 400 short-circuit). The duplicated AUTO_TEMPLATE_VARIANTS/VALID_AUTO_VARIANTS maps were extracted on review to open-sse/services/autoCombo/builtinCatalog.ts (60 LOC, v3.8.25 (features #3799-#3806: free-provider-rankings, plugins menu, proxy IP-family selector). 3 arquivos cresceram por feature legitima, nao por regressao de qualidade: ProxyRegistryManager.tsx 1072->1089, sidebarVisibility.ts 990->1006, schemas.ts 2519->2522. Encolher fica como debt para um refactor dedicado.",
"_rebaseline_2026_06_15_3860_compression_ui": "PR #3860 own growth: sidebarVisibility.ts 1006->1100 (+94 = Compression Hub menu entries: Hub + per-engine Lite/Aggressive/Ultra pages + combos editor) and chatCore.ts 5812->5815 (+3 = compression UI config wiring). Cohesive feature growth, not a quality regression.",
@@ -126,7 +127,7 @@
"src/shared/components/analytics/charts.tsx": 1558,
"src/shared/constants/cliTools.ts": 875,
"src/shared/constants/pricing.ts": 1581,
- "src/shared/constants/providers.ts": 3147,
+ "src/shared/constants/providers.ts": 3159,
"src/shared/constants/sidebarVisibility.ts": 1100,
"src/shared/services/cliRuntime.ts": 1090,
"src/shared/validation/schemas.ts": 2523,
diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md
index 0929accccf..e0ba3563d1 100644
--- a/docs/reference/PROVIDER_REFERENCE.md
+++ b/docs/reference/PROVIDER_REFERENCE.md
@@ -1,16 +1,16 @@
---
title: "Provider Reference"
-version: 3.8.25
-lastUpdated: 2026-06-15
+version: 3.8.27
+lastUpdated: 2026-06-17
---
# Provider Reference
> **Auto-generated** from `src/shared/constants/providers.ts` — do not edit by hand.
> Regenerate with: `npm run gen:provider-reference`
-> **Last generated:** 2026-06-15
+> **Last generated:** 2026-06-17
-Total providers: **226**. See category breakdown below.
+Total providers: **227**. See category breakdown below.
## Categories
@@ -82,7 +82,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
| `v0-vercel-web` | `v0` | v0 Vercel Web (Code Gen) | Web cookie | [link](https://v0.dev) | Paste your session cookie from v0.dev (DevTools → Application → Cookies) |
| `venice-web` | `ven` | Venice Web (Privacy) | Web cookie | [link](https://venice.ai) | Paste your session cookie from venice.ai (DevTools → Application → Cookies) |
-## API Key Providers (paid / paid-with-free-credits) (152)
+## API Key Providers (paid / paid-with-free-credits) (153)
| ID | Alias | Name | Tags | Website | Notes |
| --------------------- | -------------- | ------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -193,6 +193,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
| `opencode-go` | `opencode-go` | OpenCode Go | API key | [link](https://opencode.ai/go) | — |
| `opencode-zen` | `opencode-zen` | OpenCode Zen | API key | [link](https://opencode.ai/zen) | — |
| `openrouter` | `openrouter` | OpenRouter | API key, aggregator | [link](https://openrouter.ai) | Free models at $0/token with :free suffix - 20 RPM / 200 RPD |
+| `orcarouter` | `orcarouter` | OrcaRouter | API key | [link](https://www.orcarouter.ai) | — |
| `ovhcloud` | `ovh` | OVHcloud AI | API key | [link](https://www.ovhcloud.com) | — |
| `perplexity` | `pplx` | Perplexity | API key | [link](https://www.perplexity.ai) | — |
| `phind` | `phind` | Phind | API key | [link](https://phind.com) | Get API key at phind.com |
diff --git a/open-sse/config/providers/index.ts b/open-sse/config/providers/index.ts
index 662dd552fc..123f4d057d 100644
--- a/open-sse/config/providers/index.ts
+++ b/open-sse/config/providers/index.ts
@@ -99,6 +99,7 @@ import { uncloseaiProvider } from "./registry/uncloseai/index.ts";
import { nscaleProvider } from "./registry/nscale/index.ts";
import { chatgpt_webProvider } from "./registry/chatgpt-web/index.ts";
import { openrouterProvider } from "./registry/openrouter/index.ts";
+import { orcarouterProvider } from "./registry/orcarouter/index.ts";
import { glhfProvider } from "./registry/glhf/index.ts";
import { copilot_webProvider } from "./registry/copilot-web/index.ts";
import { stepfunProvider } from "./registry/stepfun/index.ts";
@@ -260,6 +261,7 @@ export const REGISTRY: Record = {
nscale: nscaleProvider,
"chatgpt-web": chatgpt_webProvider,
openrouter: openrouterProvider,
+ orcarouter: orcarouterProvider,
glhf: glhfProvider,
"copilot-web": copilot_webProvider,
stepfun: stepfunProvider,
diff --git a/open-sse/config/providers/registry/orcarouter/index.ts b/open-sse/config/providers/registry/orcarouter/index.ts
new file mode 100644
index 0000000000..c68a7104b5
--- /dev/null
+++ b/open-sse/config/providers/registry/orcarouter/index.ts
@@ -0,0 +1,87 @@
+import type { RegistryEntry } from "../../shared.ts";
+
+/**
+ * OrcaRouter — OpenAI-compatible routing gateway (https://www.orcarouter.ai).
+ *
+ * Model IDs keep the OrcaRouter namespace prefix ("orcarouter/" for the router,
+ * "/" for pinned models): the distributor matches channels by the namespaced
+ * id, so a bare id (e.g. "auto") returns 503 "No available channel". Capabilities and
+ * limits verified live (/api/pricing + chat/completions) 2026-06-17.
+ */
+export const orcarouterProvider: RegistryEntry = {
+ id: "orcarouter",
+ alias: "orcarouter",
+ format: "openai",
+ executor: "default",
+ baseUrl: "https://api.orcarouter.ai/v1",
+ authType: "apikey",
+ authHeader: "bearer",
+ defaultContextLength: 128000,
+ headers: {
+ "HTTP-Referer": "https://endpoint-proxy.local",
+ "X-Title": "Endpoint Proxy",
+ },
+ models: [
+ // Adaptive router (headline feature). Per-turn tool/reasoning support depends on
+ // the workspace AUTO pool (https://www.orcarouter.ai/console/routing).
+ { id: "orcarouter/auto", name: "Auto (smart routing)", toolCalling: true },
+ {
+ id: "openai/gpt-5.5",
+ name: "GPT-5.5",
+ toolCalling: true,
+ supportsReasoning: true,
+ supportsVision: true,
+ contextLength: 1050000,
+ maxOutputTokens: 128000,
+ },
+ {
+ id: "google/gemini-3.5-flash",
+ name: "Gemini 3.5 Flash",
+ toolCalling: true,
+ supportsReasoning: true,
+ supportsVision: true,
+ contextLength: 1048576,
+ maxOutputTokens: 65536,
+ },
+ {
+ id: "anthropic/claude-opus-4.8",
+ name: "Claude Opus 4.8",
+ toolCalling: true,
+ supportsReasoning: true,
+ supportsVision: true,
+ contextLength: 1000000,
+ maxOutputTokens: 128000,
+ },
+ {
+ id: "grok/grok-4.3",
+ name: "Grok 4.3",
+ toolCalling: true,
+ supportsReasoning: true,
+ supportsVision: true,
+ contextLength: 1000000,
+ },
+ {
+ id: "deepseek/deepseek-v4-pro",
+ name: "DeepSeek V4 Pro",
+ toolCalling: true,
+ supportsReasoning: true,
+ contextLength: 1048576,
+ maxOutputTokens: 384000,
+ },
+ {
+ id: "minimax/minimax-m2.7",
+ name: "MiniMax M2.7",
+ toolCalling: true,
+ supportsReasoning: true,
+ contextLength: 204800,
+ maxOutputTokens: 2048,
+ },
+ {
+ id: "qwen/qwen3.7-max",
+ name: "Qwen3.7 Max",
+ toolCalling: true,
+ contextLength: 1000000,
+ maxOutputTokens: 64000,
+ },
+ ],
+};
diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts
index 28d8c63740..cc670757f5 100644
--- a/src/shared/constants/providers.ts
+++ b/src/shared/constants/providers.ts
@@ -662,6 +662,18 @@ export const APIKEY_PROVIDERS = {
hasFree: true,
freeNote: "Free models at $0/token with :free suffix - 20 RPM / 200 RPD",
},
+ orcarouter: {
+ id: "orcarouter",
+ alias: "orcarouter",
+ name: "OrcaRouter",
+ icon: "router",
+ color: "#0891B2",
+ textIcon: "ORC",
+ passthroughModels: true,
+ website: "https://www.orcarouter.ai",
+ apiHint:
+ "Create an API key (starts with sk-orca-) at https://www.orcarouter.ai, then paste it as a Bearer token. OpenAI-compatible endpoint at https://api.orcarouter.ai/v1.",
+ },
"api-airforce": {
id: "api-airforce",
alias: "af",
diff --git a/tests/unit/chat-openai-compat-providers.test.ts b/tests/unit/chat-openai-compat-providers.test.ts
index 0e31b5183a..5229ce4584 100644
--- a/tests/unit/chat-openai-compat-providers.test.ts
+++ b/tests/unit/chat-openai-compat-providers.test.ts
@@ -41,6 +41,7 @@ const CHAT_OPENAI_COMPAT_PROVIDER_IDS = [
"bytez",
"reka",
"byteplus",
+ "orcarouter",
];
test("chat-openai-compat providers are registered across provider metadata, registry and local catalog", () => {
@@ -54,6 +55,21 @@ test("chat-openai-compat providers are registered across provider metadata, regi
}
});
+test("orcarouter models keep the orcarouter/ namespace prefix and enable passthrough", () => {
+ const modelIds = REGISTRY.orcarouter.models.map((model) => model.id);
+
+ // OrcaRouter's distributor matches channels by the namespaced id, so a bare
+ // "auto" returns 503 "No available channel" — the router id must stay prefixed.
+ assert.ok(modelIds.includes("orcarouter/auto"), "expected namespaced orcarouter/auto");
+ assert.equal(modelIds.includes("auto"), false, "bare 'auto' would 503 upstream");
+
+ // Pinned vendor models also carry their upstream namespace.
+ assert.ok(modelIds.includes("anthropic/claude-opus-4.8"));
+
+ // The 150+ catalog beyond the curated flagship list is reachable via passthrough.
+ assert.equal(APIKEY_PROVIDERS.orcarouter.passthroughModels, true);
+});
+
test("upstage chat catalog does not include non-chat specialty models", () => {
const modelIds = REGISTRY.upstage.models.map((model) => model.id);