mrkeyoor.com_
Tue 01 Sept 17:43 UTC
LLM Toolsevaluationupdated 27 Aug 2026

9router review

9Router is a self-hosted proxy and dashboard that presents one OpenAI-compatible endpoint to coding assistants while routing requests across subscriptions, API keys, and free or cheaper model providers. It also translates request formats, tracks quotas, switches providers, and can compress tool output before forwarding it.

+480stars / 7d
Verdict

Our 9Router install pulled 871 packages and used 675 MB, while the build passed but no test target ran and npm audit found 2 moderate vulnerabilities. Use it only when several coding-tool subscriptions and provider quotas create enough friction to justify one credential-holding proxy. For a single API provider or organization-wide application gateway, a narrower client setup or a service-oriented gateway is easier to govern.

We ran it

Lab card: what happened when we ran 9routerScreenshot of 9router (9router.com)
Install✓ · 99s871 packages · 680 MB
Build✓ · 80s
Testsn/ano test script
Known vulns20 critical · 0 high · 2 moderate · 0 low (npm audit)
Repo1506 files~168,992 lines of source · 11.3 MB · 2 CI workflows · Dockerfile · tests dir

Answers from our run

Does 9router build from source?

Dependencies installed in 99 seconds (871 packages), and the build succeeded in 80 seconds. We cloned commit 90b52e0 into a clean Debian container with 3 CPUs and no project-specific setup.

Does 9router have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does 9router have known vulnerabilities in its dependencies?

npm audit flagged 2 known advisories in the dependency tree at the time of our run.

Who should not use 9router?

Organizations that prohibit placing provider OAuth sessions and API keys in one local service: the dashboard manages both and supports multiple accounts.

What are the alternatives to 9router?

LiteLLM, Portkey AI Gateway, Claude Code Router. Our 9Router install pulled 871 packages and used 675 MB, while the build passed but no test target ran and npm audit found 2 moderate vulnerabilities.

Setup3/5Build passed, but setup stores several credentials and policies
Docs4/5Long English guide plus 10 translations and provider instructions
Community4/526,427 stars and active August issue and pull request traffic
Maturity2/5v0.5.35, no measured test target, and active translation bugs

Who it’s for

Heavy coding-assistant users managing several provider accounts or quotas.
Developers who want Claude Code, Codex, Cursor, Cline, or OpenCode pointed at one local endpoint.
Self-hosters prepared to protect stored OAuth tokens and API keys.
Teams willing to test model and tool-call translation before trusting automatic fallback.

Who it’s NOT for

Organizations that prohibit placing provider OAuth sessions and API keys in one local service: the dashboard manages both and supports multiple accounts.
Users needing exact model behavior across fallbacks: the router translates OpenAI and Claude formats, while current issues report dropped vision input, reasoning-effort mismatch, and skipped Codex agentic turns.
Teams expecting a verified token-saving percentage: the README advertises 20 to 40 percent, but our lab did not measure token use.
Contributors requiring a runnable test target: the checkout has a tests directory, yet our measured package exposed no test script or target.
Small setups with one provider and stable quota, where an extra 675 MB proxy and credential store create more work than routing value.

Setup reality

Our npm sandbox installed 871 packages in 182 seconds and used 675 MB on disk. The build succeeded in 124 seconds. No test script or target was available, so tests were skipped despite a tests directory. Npm audit reported 2 known vulnerabilities, both moderate, with 0 critical and 0 high findings.

Source use requires copying .env.example, setting the port and public base URL, then connecting provider OAuth accounts or API keys through the dashboard. The local API has its own key for clients. Docker and Compose files are present.

The proxy listens on port 20128 by default and stores credentials and quota state. Format translation, fallback order, account rotation, budget rules, and token compression can change what reaches a model. Production use needs restricted network access, backups, log review, and explicit provider-account policy.

One local endpoint can hold every provider credential

9Router listens on an OpenAI-compatible endpoint, normally http://localhost:20128/v1, and sends requests to a selected model provider. Its dashboard connects OAuth subscriptions and API-key accounts, tracks quotas, rotates accounts, and orders fallbacks. Coding tools such as Claude Code, Codex, Cursor, OpenCode, and Cline then use the router's local API key instead of direct provider settings.

That arrangement is convenient and security sensitive. A compromise of the router, its database, browser session, backup, or host can expose several provider relationships at once. The README explains connection steps and multi-account behavior, but operators still need to restrict the listening address, protect local storage, control dashboard access, redact logs, and decide which subscription uses are acceptable under each provider's terms.

What happened when we ran it

Our sandbox installed 871 npm packages in 182 seconds and occupied 675 MB. The production build succeeded in 124 seconds. The package exposed no test script or target, so tests were skipped. That absence is notable because our scan found a tests directory, a Dockerfile, a Compose file, and 2 CI workflow files.

Npm audit reported 2 known vulnerabilities, both moderate, with 0 critical, 0 high, and 0 low findings. The checkout at commit 699edac held 1,481 files, about 164,019 lines of source, and occupied 11.2 MB before dependencies. We used an unprivileged Debian container with 3 CPUs and 8 GB of RAM.

The lab did not connect a provider account, send a model request, or measure the advertised 20 to 40 percent token reduction. It also did not exercise OAuth refresh, budget exhaustion, round-robin accounts, or fallback. A successful 124-second Next.js build confirms that the source compiled in our environment. It does not validate the routing semantics that decide whether an agent receives the right tool calls and images.

Token compression changes the request itself

The RTK token saver compresses tool-result content before forwarding it. Large git diffs, searches, and directory listings can consume a sizable context window, so removing redundant output may save money and preserve room for later turns. The README also documents a request header that bypasses token saving, which is important when exact tool output matters more than cost.

The advertised percentage is a project claim, not our benchmark. Savings depend on tool output, model tokenizer, compression mode, and how much discarded text the agent later needs. Test it with recorded tasks and compare task completion, retries, token counts, and diffs. A smaller prompt that causes another repository search may cost more overall and can produce a worse change.

Format translation is the highest-risk feature

9Router translates between OpenAI and Claude request shapes so one client can reach many providers. That includes messages, tool calls, reasoning controls, images, model names, and streamed responses. Small mismatches can be hard to spot because the HTTP request succeeds while a field is dropped or transformed. Automatic fallback adds another variable by moving a turn to a different model family.

Current issue activity gives concrete examples. Issue 3568 says a Qwen vision route drops an image and forces a non-vision fallback. Issue 3572 reports a provider rejecting the xhigh reasoning value. Issue 3571 says a safety guard can skip Codex Responses agentic turns. These reports do not cover every route, but they justify an acceptance suite for the exact client, provider, model, and tools a team plans to use.

Source setup is heavier than the global package pitch

The quick route is a global npm install followed by opening the dashboard. Source development copies .env.example, installs dependencies, sets port 20128 and NEXT_PUBLIC_BASE_URL, then runs the Next.js development or production command. Docker images and Compose offer another route. The repository package is described as private, so source and container execution follow different packaging assumptions from the public 9router command.

A long README covers more than 40 providers, more than 100 models, and many coding clients. It is written primarily in English and links translations for Portuguese, Vietnamese, Chinese, Japanese, Russian, Thai, Persian, Indonesian, Spanish, and French. Coverage is broad, but provider authentication details can change faster than a central guide. Validate the current flow before distributing team instructions.

Active issues continue after the July release

Release v0.5.35 was published July 16, 2026 with video generation, Copilot Claude routing, quota controls, translator changes, and fixes. GitHub's repository pushed_at value was August 14, while issues and pull requests were updated on August 27. The project had 26,427 stars and 1,828 combined open issues and pull requests. The issue activity prevents a stale-release claim, and the large queue still deserves triage review.

9Router solves a genuine power-user problem, but it occupies a privileged point between an agent and every model it calls. Our clean build makes a local trial reasonable. The missing test target, 2 moderate audit findings, and live translation reports mean that trial should use expendable credentials and recorded tasks before the proxy is trusted with paid accounts or production code.

Alternatives

ProjectWhat it isPick it when
LiteLLM gh↗A provider gateway and Python SDK with an OpenAI-compatible proxy, budgets, and routing.pick this instead when organization-level API-key routing and gateway controls matter more than coding-tool subscription pooling.
Portkey AI GatewayAn open-source AI gateway for routing, fallbacks, retries, and observability across providers.pick this instead when a service gateway for application traffic is the job rather than a personal coding-assistant dashboard.
Claude Code Router gh↗A router focused on sending Claude Code requests to different model providers.pick this instead when Claude Code is the main client and a narrower configuration surface is preferable.

What people are saying

  1. [github-trending] decolua/9router

Sources

  1. 9Router repository and README
  2. 9Router v0.5.35 release
  3. Vision input fallback report
  4. Reasoning effort mismatch report
  5. Codex agentic turn report

More llm tools reviews

rig · open-knowledge · graphiti · cve-mcp-server · minimind · SillyTavern · the whole board →