Catalog npm
PACKAGE EXPLORERView in registry

9router-imagefix

npm

9Router CLI - Start and manage 9Router server (with image fix)

9routeraiapicliproxy
Versions collected90
Direct dependencies8From release 0.5.144
Last observed20 Oct, 21:41 UTC

README

Current package documentation

9Router - FREE AI Router & Token Saver

Never stop coding. Save 20-40% tokens with RTK + auto-fallback to FREE & cheap AI models.

Connect All AI Code Tools (Claude Code, Cursor, Antigravity, Copilot, Codex, Gemini, OpenCode, Cline, OpenClaw...) to 40+ AI Providers & 100+ Models.

npm Downloads Docker Pulls GHCR License

decolua%2F9router | Trendshift

🌐 Website • 📖 Full Docs


🤔 Why 9Router?

Stop wasting money, tokens and hitting limits:

  • ❌ Subscription quota expires unused every month
  • ❌ Rate limits stop you mid-coding
  • ❌ Tool outputs (git diff, grep, ls...) burn tokens fast
  • ❌ Expensive APIs ($20-50/month per provider)

9Router solves this:

  • ✅ RTK Token Saver - Auto-compress tool_result, save 20-40% tokens
  • ✅ Maximize subscriptions - Track quota, use every bit before reset
  • ✅ Auto fallback - Subscription → Cheap → Free, zero downtime
  • ✅ Multi-account - Round-robin between accounts per provider
  • ✅ Universal - Works with any OpenAI/Claude-compatible CLI

⚡ Quick Start

Option 1 — npm (recommended for desktop):

npm install -g 9router
9router

# Or run directly with npx
npx 9router

Option 2 — Docker (server/VPS):

docker run -d --name 9router -p 20128:20128 \
  -v "$HOME/.9router:/app/data" -e DATA_DIR=/app/data \
  decolua/9router:latest

Published images: Docker Hub • GHCR (multi-platform amd64/arm64).

🎉 Dashboard opens at http://localhost:20128

2. Connect a FREE provider (no signup needed):

Dashboard → Providers → Connect Kiro AI (free Claude unlimited) or OpenCode Free (no auth) → Done!

3. Use in your CLI tool:

Claude Code/Codex/OpenClaw/Cursor/Cline Settings:
  Endpoint: http://localhost:20128/v1
  API Key:  [copy from dashboard]
  Model:    kr/claude-sonnet-4.5

That's it! Start coding with FREE AI models.


🚀 CLI Options

9router                    # Start with default settings
9router --port 8080        # Custom port
9router --no-browser       # Don't open browser
9router --skip-update      # Skip auto-update check
9router --help             # Show all options

Dashboard: http://localhost:20128/dashboard


🔌 Connect to a Remote 9Router

Already running 9Router on another machine (e.g. a team server on your LAN)? Point this machine's CLI tools at it — no local server is started:

npx 9router connect http://<server-host>:20128                       # pick tools interactively
npx 9router connect http://<server-host>:20128 --tools claude,codex  # or choose up front
npx 9router connect --reset --tools claude,codex                     # undo

It logs in with the dashboard password (hidden prompt), reuses or creates an API key named cli-<hostname>, and writes each tool's config (backing up the original once as *.bak-9router).

Supported tools: claude, codex, opencode, droid, crush, kilo, cline, pi, omp, or all.

Models

Models come from the server's own CLI-tools configuration, so a client gets whatever the operator already picked on the dashboard. Nothing is hardcoded.

ToolModel taken from (first match wins)
claudetier flag (--opus …) → server's Claude tier → left unset (Claude Code's own default)
others--model → that tool's own model on the server → server's OpenCode model → tool skipped

kilo has no readable model on the server, so it always uses --model or the OpenCode model. omp (Oh My Pi) needs no model: it uses proxy discovery, so every server model appears under 9router in /model. A Claude tier the server doesn't set is removed from your config rather than kept from an earlier run. A skipped tool makes the command exit 1.

Overriding the server's models

# One Claude tier; the other tiers still come from the server
npx 9router connect http://<server-host>:20128 --tools claude --sonnet cc/claude-sonnet-5-5

# Every Claude tier
npx 9router connect http://<server-host>:20128 --tools claude \
  --fable cc/claude-fable-5-1 --opus cc/claude-opus-5-5 \
  --sonnet cc/claude-sonnet-5-5 --haiku cc/claude-haiku-4-5-20251001

# All non-Claude tools at once
npx 9router connect http://<server-host>:20128 --tools codex,opencode,kilo --model ocg/deepseek-flash

# Claude and other tools in one run
npx 9router connect http://<server-host>:20128 --tools claude,codex --opus cc/claude-opus-5-5 --model gpt-6

# A different model per tool: --model covers every non-Claude tool in a run, so run once per tool
npx 9router connect http://<server-host>:20128 --tools codex --model gpt-6
npx 9router connect http://<server-host>:20128 --tools opencode --model ocg/glm-5.3

A model the server doesn't list is still written, with a not listed by server warning. To see the ids it serves: curl http://<server-host>:20128/v1/models -H "Authorization: Bearer <your key>".

Checking the current config

9router show prints what each CLI tool on this machine is currently set to — base URL, masked API key and models. It only reads local files and never contacts a server.

npx 9router show                 # every supported tool
npx 9router show claude          # one tool
npx 9router show claude codex    # several
npx 9router show claude --json   # machine-readable (key still masked)
✅ Claude Code
   File:     ~/.claude/settings.json
   Base URL: http://<server-host>:20128/v1
   API key:  sk-a1b…9f3c
   Models:
     fable   cc/claude-fable-5-1
     opus    cc/claude-opus-5-5
     sonnet  cc/claude-sonnet-5-5

Tools not pointed at 9router are listed as not configured. For Codex, OpenCode and Cline it also warns when a 9router entry exists but another provider is the active one.

Other options

OptionPurpose
--password <pw>Dashboard password (or NINE_ROUTER_PASSWORD); prompted if omitted — preferred, keeps it out of shell history
--saveAfter a successful login, save the password for this server to ~/.9router/connect.env (plain text, mode 600) so later runs skip the prompt. Delete the file to forget it
--api-key <key>Use this key and skip login. The server's models can't be read without a login, so pass model flags
--key-name <name>API key name to reuse/create (default cli-<hostname>)
--print-envAlso print OPENAI_BASE_URL / OPENAI_API_KEY for other CLIs
--resetRemove the 9router settings from the selected tools

See 9router connect --help for the full list.

⚠️ Over plain http:// the password and API key are sent unencrypted — use a trusted LAN/VPN or put HTTPS in front. The API key is stored in each tool's config file.


🛠️ Supported CLI Tools

Claude-Code • OpenClaw • Codex • OpenCode • Cursor • Antigravity • Cline • Continue • Droid • Roo • Copilot • Kilo Code • Gemini CLI • Qwen Code • iFlow • Crush • Crusher • Aider

Any tool supporting OpenAI/Claude-compatible API works.


💾 Data Location

  • macOS/Linux: ~/.9router/db/data.sqlite
  • Windows: %APPDATA%/9router/db/data.sqlite
  • Docker: /app/data/db/data.sqlite (mount $HOME/.9router to persist)

📚 Documentation

Full docs, advanced setup, video tutorials & development guide:


🙏 Acknowledgments

📄 License

MIT License - see LICENSE for details.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 90

Collected releases
VersionPublishedDirect dependenciesOpen version
0.5.144Registry latest18 Oct 20268
0.5.14316 Oct 20268
0.5.14216 Oct 20268
0.5.1414 Oct 20267
0.5.1403 Oct 20267
0.5.1393 Oct 20267
0.5.1383 Oct 20267
0.5.1372 Oct 20267
0.5.1362 Oct 20267
0.5.1352 Oct 20267
0.5.1332 Oct 20267
0.5.1342 Oct 20267
0.5.1312 Oct 20267
0.5.13030 Sept 20267
0.5.12930 Sept 20267
0.5.12830 Sept 20267
0.5.12730 Sept 20267
0.5.12630 Sept 20267
0.5.12529 Sept 20267
0.5.12429 Sept 20267

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:41 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:7ba66ca4700cb17e9ffe0095c5940ac7cf29997dbe00cfd06c5a4f2aa4cfaf34