Home
Softono
d

decolua

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
2

Software by decolua

9router
Open Source

9router

<div align="center"> <img src="./images/9router.png?1" alt="9Router Dashboard" width="800"/> # 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](https://img.shields.io/npm/v/9router.svg)](https://www.npmjs.com/package/9router) [![Downloads](https://img.shields.io/npm/dm/9router.svg)](https://www.npmjs.com/package/9router) [![Docker Pulls](https://img.shields.io/docker/pulls/decolua/9router.svg?logo=docker&label=Docker%20pulls)](https://hub.docker.com/r/decolua/9router) [![GHCR](https://img.shields.io/badge/GHCR-decolua%2F9router-blue?logo=github)](https://github.com/decolua/9router/pkgs/container/9router) [![License](https://img.shields.io/npm/l/9router.svg)](https://github.com/decolua/9router/blob/main/LICENSE) <a href="https://trendshift.io/repositories/22628" target="_blank"><img src="https://trendshift.io/api/badge/repositories/22628" alt="decolua%2F9router | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a> [πŸš€ Quick Start](#-quick-start) β€’ [πŸ’‘ Features](#-key-features) β€’ [πŸ“– Setup](#-setup-guide) β€’ [🌐 Website](https://9router.com) [πŸ‡»πŸ‡³ TiαΊΏng Việt](./i18n/README.vi.md) β€’ [πŸ‡¨πŸ‡³ δΈ­ζ–‡](./i18n/README.zh-CN.md) β€’ [πŸ‡―πŸ‡΅ ζ—₯本θͺž](./i18n/README.ja-JP.md) β€’ [πŸ‡·πŸ‡Ί Русский](./i18n/README.ru.md) </div> --- ## πŸ€” 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) - ❌ Manual switching between providers **9Router solves this:** - βœ… **RTK Token Saver** - Auto-compress tool_result content, save 20-40% tokens per request - βœ… **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 Claude Code, Codex, Cursor, Cline, any CLI tool --- ## πŸ”„ How It Works ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Your CLI β”‚ (Claude Code, Codex, OpenClaw, Cursor, Cline...) β”‚ Tool β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚ http://localhost:20128/v1 ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 9Router (Smart Router) β”‚ β”‚ β€’ RTK Token Saver (cut tool_result tokens) β”‚ β”‚ β€’ Format translation (OpenAI ↔ Claude) β”‚ β”‚ β€’ Quota tracking β”‚ β”‚ β€’ Auto token refresh β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”œβ”€β†’ [Tier 1: SUBSCRIPTION] Claude Code, Codex, GitHub Copilot β”‚ ↓ quota exhausted β”œβ”€β†’ [Tier 2: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M) β”‚ ↓ budget limit └─→ [Tier 3: FREE] Kiro, OpenCode Free, Vertex ($300 credits) Result: Never stop coding, minimal cost + 20-40% token savings via RTK ``` --- ## ⚑ Quick Start **1. Install globally:** ```bash npm install -g 9router 9router ``` πŸŽ‰ 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. **Alternative: run from source (this repository):** This repository package is private (`9router-app`), so source/Docker execution is the expected local development path. ```bash cp .env.example .env npm install PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev ``` Production mode: ```bash npm run build PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start ``` Default URLs: - Dashboard: `http://localhost:20128/dashboard` - OpenAI-compatible API: `http://localhost:20128/v1` --- ## Video Guides <div align="center"> <table> <tr> <td align="center" width="320"> <a href="https://www.youtube.com/watch?v=raEyZPg5xE0"> <img src="https://img.youtube.com/vi/raEyZPg5xE0/maxresdefault.jpg" alt="9Router Setup Tutorial" width="300"/> </a><br/> <b>πŸ‡ΊπŸ‡Έ English</b><br/> <sub>9Router + Claude Code FREE Setup<br/>by <a href="https://www.youtube.com/@BuildAIWithHamid">Build AI With Hamid</a></sub> </td> <td align="center" width="320"> <a href="https://www.youtube.com/watch?v=X69n5Lm06Yw"> <img src="https://img.youtube.com/vi/X69n5Lm06Yw/maxresdefault.jpg" alt="TiαΊΏt kiệm chi phΓ­ LLM vα»›i 9Router" width="300"/> </a><br/> <b>πŸ‡»πŸ‡³ TiαΊΏng Việt</b><br/> <sub>TiαΊΏt kiệm chi phΓ­ LLM cho OpenClaw vα»›i 9Router<br/>by <a href="https://www.youtube.com/c/M%C3%ACAIblog">MΓ¬ AI</a></sub> </td> <td align="center" width="320"> <a href="https://www.youtube.com/watch?v=o3qYCyjrFYg"> <img src="https://img.youtube.com/vi/o3qYCyjrFYg/maxresdefault.jpg" alt="Claude Code FREE Forever" width="300"/> </a><br/> <b>πŸ‡ΊπŸ‡Έ English</b><br/> <sub>Claude Code FREE Forever β€” Unlimited Models<br/>by <a href="https://www.youtube.com/@BuildAIWithHamid">Build AI With Hamid</a></sub> </td> </tr> <tr> <td align="center" width="320"> <a href="https://www.youtube.com/watch?v=Ttpc26m39Dw"> <img src="https://img.youtube.com/vi/Ttpc26m39Dw/maxresdefault.jpg" alt="Claude CLI Free Setup" width="300"/> </a><br/> <b>πŸ‡ΊπŸ‡Έ English</b><br/> <sub>Claude CLI Free Setup with 9Router πŸš€<br/>by <a href="https://www.youtube.com/@CodeVerseSoban">CodeVerse Soban</a></sub> </td> <td align="center" width="320"> <a href="https://www.youtube.com/watch?v=G-5A_D5Pm6Y"> <img src="https://img.youtube.com/vi/G-5A_D5Pm6Y/maxresdefault.jpg" alt="CΓ i Δ‘αΊ·t OpenClaw Free A-Z" width="300"/> </a><br/> <b>πŸ‡»πŸ‡³ TiαΊΏng Việt</b><br/> <sub>CΓ i Đặt OpenClaw Free Tα»« A-Z + 9Router<br/>by <a href="https://www.youtube.com/@maigia">Mai Gia</a></sub> </td> <td align="center" width="320"> <a href="https://www.youtube.com/watch?v=JXmg8_gccgE"> <img src="https://img.youtube.com/vi/JXmg8_gccgE/maxresdefault.jpg" alt="FREE OpenClaw with Claude Opus" width="300"/> </a><br/> <b>πŸ‡ΊπŸ‡Έ English</b><br/> <sub>FREE OpenClaw + Claude Opus 4.6<br/>by <a href="https://www.youtube.com/@BuildAIWithHamid">Build AI With Hamid</a></sub> </td> </tr> </table> </div> > 🎬 **Made a video about 9Router?** Submit a [Pull Request](https://github.com/decolua/9router/pulls) adding your video to this section β€” we'll merge it! --- ## πŸ› οΈ Supported CLI Tools 9Router works seamlessly with all major AI coding tools: <div align="center"> <table> <tr> <td align="center" width="120"> <img src="./public/providers/claude.png" width="60" alt="Claude Code"/><br/> <b>Claude-Code</b> </td> <td align="center" width="120"> <img src="./public/providers/openclaw.png" width="60" alt="OpenClaw"/><br/> <b>OpenClaw</b> </td> <td align="center" width="120"> <img src="./public/providers/codex.png" width="60" alt="Codex"/><br/> <b>Codex</b> </td> <td align="center" width="120"> <img src="./public/providers/opencode.png" width="60" alt="OpenCode"/><br/> <b>OpenCode</b> </td> <td align="center" width="120"> <img src="./public/providers/cursor.png" width="60" alt="Cursor"/><br/> <b>Cursor</b> </td> <td align="center" width="120"> <img src="./public/providers/antigravity.png" width="60" alt="Antigravity"/><br/> <b>Antigravity</b> </td> </tr> <tr> <td align="center" width="120"> <img src="./public/providers/cline.png" width="60" alt="Cline"/><br/> <b>Cline</b> </td> <td align="center" width="120"> <img src="./public/providers/continue.png" width="60" alt="Continue"/><br/> <b>Continue</b> </td> <td align="center" width="120"> <img src="./public/providers/droid.png" width="60" alt="Droid"/><br/> <b>Droid</b> </td> <td align="center" width="120"> <img src="./public/providers/roo.png" width="60" alt="Roo"/><br/> <b>Roo</b> </td> <td align="center" width="120"> <img src="./public/providers/copilot.png" width="60" alt="Copilot"/><br/> <b>Copilot</b> </td> <td align="center" width="120"> <img src="./public/providers/kilocode.png" width="60" alt="Kilo Code"/><br/> <b>Kilo Code</b> </td> </tr> </table> </div> --- ## 🌐 Supported Providers ### πŸ” OAuth Providers <div align="center"> <table> <tr> <td align="center" width="120"> <img src="./public/providers/claude.png" width="60" alt="Claude Code"/><br/> <b>Claude-Code</b> </td> <td align="center" width="120"> <img src="./public/providers/antigravity.png" width="60" alt="Antigravity"/><br/> <b>Antigravity</b> </td> <td align="center" width="120"> <img src="./public/providers/codex.png" width="60" alt="Codex"/><br/> <b>Codex</b> </td> <td align="center" width="120"> <img src="./public/providers/github.png" width="60" alt="GitHub"/><br/> <b>GitHub</b> </td> <td align="center" width="120"> <img src="./public/providers/cursor.png" width="60" alt="Cursor"/><br/> <b>Cursor</b> </td> </tr> </table> </div> ### πŸ†“ Free Providers <div align="center"> <table> <tr> <td align="center" width="150"> <img src="./public/providers/kiro.png" width="70" alt="Kiro"/><br/> <b>Kiro AI</b><br/> <sub>Claude 4.5 + GLM-5 + MiniMax<br/>Unlimited FREE</sub> </td> <td align="center" width="150"> <img src="./public/providers/opencode.png" width="70" alt="OpenCode Free"/><br/> <b>OpenCode Free</b><br/> <sub>No auth β€’ Auto-fetch models<br/>Unlimited FREE</sub> </td> <td align="center" width="150"> <img src="./public/providers/gemini.png" width="70" alt="Vertex AI"/><br/> <b>Vertex AI</b><br/> <sub>Gemini 3 Pro + GLM-5 + DeepSeek<br/>$300 credits free</sub> </td> </tr> </table> </div> > **Note:** iFlow, Qwen and Gemini CLI free tiers were discontinued in 2026. Use Kiro / OpenCode Free / Vertex instead. ### πŸ”‘ API Key Providers (40+) <div align="center"> <table> <tr> <td align="center" width="100"> <img src="./public/providers/openrouter.png" width="50" alt="OpenRouter"/><br/> <sub>OpenRouter</sub> </td> <td align="center" width="100"> <img src="./public/providers/glm.png" width="50" alt="GLM"/><br/> <sub>GLM</sub> </td> <td align="center" width="100"> <img src="./public/providers/kimi.png" width="50" alt="Kimi"/><br/> <sub>Kimi</sub> </td> <td align="center" width="100"> <img src="./public/providers/minimax.png" width="50" alt="MiniMax"/><br/> <sub>MiniMax</sub> </td> <td align="center" width="100"> <img src="./public/providers/openai.png" width="50" alt="OpenAI"/><br/> <sub>OpenAI</sub> </td> <td align="center" width="100"> <img src="./public/providers/anthropic.png" width="50" alt="Anthropic"/><br/> <sub>Anthropic</sub> </td> </tr> <tr> <td align="center" width="100"> <img src="./public/providers/gemini.png" width="50" alt="Gemini"/><br/> <sub>Gemini</sub> </td> <td align="center" width="100"> <img src="./public/providers/deepseek.png" width="50" alt="DeepSeek"/><br/> <sub>DeepSeek</sub> </td> <td align="center" width="100"> <img src="./public/providers/groq.png" width="50" alt="Groq"/><br/> <sub>Groq</sub> </td> <td align="center" width="100"> <img src="./public/providers/xai.png" width="50" alt="xAI"/><br/> <sub>xAI</sub> </td> <td align="center" width="100"> <img src="./public/providers/mistral.png" width="50" alt="Mistral"/><br/> <sub>Mistral</sub> </td> <td align="center" width="100"> <img src="./public/providers/perplexity.png" width="50" alt="Perplexity"/><br/> <sub>Perplexity</sub> </td> </tr> <tr> <td align="center" width="100"> <img src="./public/providers/together.png" width="50" alt="Together"/><br/> <sub>Together AI</sub> </td> <td align="center" width="100"> <img src="./public/providers/fireworks.png" width="50" alt="Fireworks"/><br/> <sub>Fireworks</sub> </td> <td align="center" width="100"> <img src="./public/providers/cerebras.png" width="50" alt="Cerebras"/><br/> <sub>Cerebras</sub> </td> <td align="center" width="100"> <img src="./public/providers/cohere.png" width="50" alt="Cohere"/><br/> <sub>Cohere</sub> </td> <td align="center" width="100"> <img src="./public/providers/nvidia.png" width="50" alt="NVIDIA"/><br/> <sub>NVIDIA</sub> </td> <td align="center" width="100"> <img src="./public/providers/siliconflow.png" width="50" alt="SiliconFlow"/><br/> <sub>SiliconFlow</sub> </td> </tr> </table> <p><i>...and 20+ more providers including Nebius, Chutes, Hyperbolic, and custom OpenAI/Anthropic compatible endpoints</i></p> </div> --- ## πŸ’‘ Key Features | Feature | What It Does | Why It Matters | |---------|--------------|----------------| | πŸš€ **RTK Token Saver** ([RTK](https://github.com/rtk-ai/rtk) ⭐40K) | Compress tool outputs (`git diff`, `grep`, `ls`, `tree`...) before sending to LLM | Save **20-40% input tokens** per request | | πŸͺ¨ **Caveman Mode** ([Caveman](https://github.com/JuliusBrussee/caveman) ⭐52K) | Inject caveman-speak prompt β†’ LLM replies terse, technical substance preserved | Save **up to 65% output tokens** | | 🎯 **Smart 3-Tier Fallback** | Auto-route: Subscription β†’ Cheap β†’ Free | Never stop coding, zero downtime | | πŸ“Š **Real-Time Quota Tracking** | Live token count + reset countdown | Maximize subscription value | | πŸ”„ **Format Translation** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro ↔ Vertex | Works with any CLI tool | | πŸ‘₯ **Multi-Account Support** | Multiple accounts per provider | Load balancing + redundancy | | πŸ”„ **Auto Token Refresh** | OAuth tokens refresh automatically | No manual re-login needed | | 🎨 **Custom Combos** | Create unlimited model combinations | Tailor fallback to your needs | | πŸ“ **Request Logging** | Debug mode with full request/response logs | Troubleshoot issues easily | | πŸ’Ύ **Cloud Sync** | Sync config across devices | Same setup everywhere | | πŸ“Š **Usage Analytics** | Track tokens, cost, trends over time | Optimize spending | | 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers | Flexible deployment options | <details> <summary><b>πŸ“– Feature Details</b></summary> ### πŸš€ RTK Token Saver Tool outputs (`git diff`, `grep`, `find`, `ls`, `tree`, log dumps...) often eat 30-50% of your prompt budget. RTK detects them and applies smart, lossless compression **before** the request hits the LLM: - **Filters:** `git-diff`, `git-status`, `grep`, `find`, `ls`, `tree`, `dedup-log`, `smart-truncate`, `read-numbered`, `search-list` - **Auto-detect:** No config needed β€” RTK peeks the first 1KB of each `tool_result` and picks the right filter. - **Safe by design:** If a filter fails, throws, or makes output bigger, RTK silently keeps the original text. Errors never break your request. - **Universal:** Works across all formats (OpenAI, Claude, Gemini, Cursor, Kiro, OpenAI Responses) because it runs **before** any format translation. - **Default ON:** Toggle anytime in Dashboard β†’ Endpoint settings. ``` Without RTK: 47K tokens sent to LLM With RTK: 28K tokens sent to LLM (40% saved Β· same context Β· same answer) ``` ### 🎯 Smart 3-Tier Fallback Create combos with automatic fallback: ``` Combo: "my-coding-stack" 1. cc/claude-opus-4-6 (your subscription) 2. glm/glm-4.7 (cheap backup, $0.6/1M) 3. if/kimi-k2-thinking (free fallback) β†’ Auto switches when quota runs out or errors occur ``` ### πŸ“Š Real-Time Quota Tracking - Token consumption per provider - Reset countdown (5-hour, daily, weekly) - Cost estimation for paid tiers - Monthly spending reports ### πŸ”„ Format Translation Seamless translation between formats: - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **Cursor** ↔ **Kiro** ↔ **Vertex** ↔ **Antigravity** ↔ **Ollama** ↔ **OpenAI Responses** - Your CLI tool sends OpenAI format β†’ 9Router translates β†’ Provider receives native format - Works with any tool that supports custom OpenAI endpoints ### πŸ‘₯ Multi-Account Support - Add multiple accounts per provider - Auto round-robin or priority-based routing - Fallback to next account when one hits quota ### πŸ”„ Auto Token Refresh - OAuth tokens automatically refresh before expiration - No manual re-authentication needed - Seamless experience across all providers ### 🎨 Custom Combos - Create unlimited model combinations - Mix subscription, cheap, and free tiers - Name your combos for easy access - Share combos across devices with Cloud Sync ### πŸ“ Request Logging - Enable debug mode for full request/response logs - Track API calls, headers, and payloads - Troubleshoot integration issues - Export logs for analysis ### πŸ’Ύ Cloud Sync - Sync providers, combos, and settings across devices - Automatic background sync - Secure encrypted storage - Access your setup from anywhere #### Cloud Runtime Notes - Prefer server-side cloud variables in production: - `BASE_URL` (internal callback URL used by sync scheduler) - `CLOUD_URL` (cloud sync endpoint base) - `NEXT_PUBLIC_BASE_URL` and `NEXT_PUBLIC_CLOUD_URL` are still supported for compatibility/UI, but server runtime now prioritizes `BASE_URL`/`CLOUD_URL`. - Cloud sync requests now use timeout + fail-fast behavior to avoid UI hanging when cloud DNS/network is unavailable. ### πŸ“Š Usage Analytics - Track token usage per provider and model - Cost estimation and spending trends - Monthly reports and insights - Optimize your AI spending > **πŸ’‘ IMPORTANT - Understanding Dashboard Costs:** > > The "cost" displayed in Usage Analytics is **for tracking and comparison purposes only**. > 9Router itself **never charges** you anything. You only pay providers directly (if using paid services). > > **Example:** If your dashboard shows "$290 total cost" while using iFlow models, this represents > what you would have paid using paid APIs directly. Your actual cost = **$0** (iFlow is free unlimited). > > Think of it as a "savings tracker" showing how much you're saving by using free models or > routing through 9Router! ### 🌐 Deploy Anywhere - πŸ’» **Localhost** - Default, works offline - ☁️ **VPS/Cloud** - Share across devices - 🐳 **Docker** - One-command deployment - πŸš€ **Cloudflare Workers** - Global edge network </details> --- ## πŸ’° Pricing at a Glance | Tier | Provider | Cost | Quota Reset | Best For | |------|----------|------|-------------|----------| | **πŸš€ TOKEN SAVER** | **RTK (built-in)** | **FREE** | Always on | **Save 20-40% tokens on EVERY request** | | **πŸ’³ SUBSCRIPTION** | Claude Code (Pro/Max) | $20-200/mo | 5h + weekly | Already subscribed | | | Codex (Plus/Pro) | $20-200/mo | 5h + weekly | OpenAI users | | | GitHub Copilot | $10-19/mo | Monthly | GitHub users | | | Cursor IDE | $20/mo | Monthly | Cursor users | | **πŸ’° CHEAP** | GLM-5.1 / GLM-4.7 | $0.6/1M | Daily 10AM | Budget backup | | | MiniMax M2.7 | $0.2/1M | 5-hour rolling | Cheapest option | | | Kimi K2.5 | $9/mo flat | 10M tokens/mo | Predictable cost | | **πŸ†“ FREE** | Kiro AI | $0 | Unlimited | Claude 4.5 + GLM-5 + MiniMax free | | | OpenCode Free | $0 | Unlimited | No auth, auto-fetch models | | | Vertex AI | $300 credits | New GCP accounts | Gemini 3 Pro + DeepSeek + GLM-5 | **πŸ’‘ Pro Tip:** RTK + Kiro AI + OpenCode Free combo = **$0 cost + 20-40% token savings**! --- ### πŸ“Š Understanding 9Router Costs & Billing **9Router Billing Reality:** βœ… **9Router software = FREE forever** (open source, never charges) βœ… **Dashboard "costs" = Display/tracking only** (not actual bills) βœ… **You pay providers directly** (subscriptions or API fees) βœ… **FREE providers stay FREE** (iFlow, Kiro, Qwen = $0 unlimited) ❌ **9Router never sends invoices** or charges your card **How Cost Display Works:** The dashboard shows **estimated costs** as if you were using paid APIs directly. This is **not billing** - it's a comparison tool to show your savings. **Example Scenario:** ``` Dashboard Display: β€’ Total Requests: 1,662 β€’ Total Tokens: 47M β€’ Display Cost: $290 Reality Check: β€’ Provider: iFlow (FREE unlimited) β€’ Actual Payment: $0.00 β€’ What $290 Means: Amount you SAVED by using free models! ``` **Payment Rules:** - **Subscription providers** (Claude Code, Codex): Pay them directly via their websites - **Cheap providers** (GLM, MiniMax): Pay them directly, 9Router just routes - **FREE providers** (iFlow, Kiro, Qwen): Genuinely free forever, no hidden charges - **9Router**: Never charges anything, ever --- ## 🎯 Use Cases ### Case 1: "I have Claude Pro subscription" **Problem:** Quota expires unused, rate limits during heavy coding **Solution:** ``` Combo: "maximize-claude" 1. cc/claude-opus-4-7 (use subscription fully) 2. glm/glm-5.1 (cheap backup when quota out) 3. kr/claude-sonnet-4.5 (free emergency fallback) Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total vs. $20 + hitting limits = frustration ``` ### Case 2: "I want zero cost" **Problem:** Can't afford subscriptions, need reliable AI coding **Solution:** ``` Combo: "free-forever" 1. kr/claude-sonnet-4.5 (Claude 4.5 free unlimited) 2. kr/glm-5 (GLM-5 free via Kiro) 3. oc/<auto> (OpenCode Free, no auth) Monthly cost: $0 Quality: Production-ready models + RTK saves 20-40% tokens ``` ### Case 3: "I need 24/7 coding, no interruptions" **Problem:** Deadlines, can't afford downtime **Solution:** ``` Combo: "always-on" 1. cc/claude-opus-4-7 (best quality) 2. cx/gpt-5.5 (second subscription) 3. glm/glm-5.1 (cheap, resets daily) 4. minimax/MiniMax-M2.7 (cheapest, 5h reset) 5. kr/claude-sonnet-4.5 (free unlimited) Result: 5 layers of fallback = zero downtime Monthly cost: $20-200 (subscriptions) + $10-20 (backup) ``` ### Case 4: "I want FREE AI in OpenClaw" **Problem:** Need AI assistant in messaging apps (WhatsApp, Telegram, Slack...), completely free **Solution:** ``` Combo: "openclaw-free" 1. kr/claude-sonnet-4.5 (Claude 4.5 free) 2. kr/glm-5 (GLM-5 free) 3. kr/MiniMax-M2.5 (MiniMax free) Monthly cost: $0 Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... ``` --- ## ❓ Frequently Asked Questions <details> <summary><b>πŸ“Š Why does my dashboard show high costs?</b></summary> The dashboard tracks your token usage and displays **estimated costs** as if you were using paid APIs directly. This is **not actual billing** - it's a reference to show how much you're saving by using free models or existing subscriptions through 9Router. **Example:** - **Dashboard shows:** "$290 total cost" - **Reality:** You're using iFlow (FREE unlimited) - **Your actual cost:** **$0.00** - **What $290 means:** Amount you **saved** by using free models instead of paid APIs! The cost display is a "savings tracker" to help you understand your usage patterns and optimization opportunities. </details> <details> <summary><b>πŸ’³ Will I be charged by 9Router?</b></summary> **No.** 9Router is free, open-source software that runs on your own computer. It never charges you anything. **You only pay:** - βœ… **Subscription providers** (Claude Code $20/mo, Codex $20-200/mo) β†’ Pay them directly on their websites - βœ… **Cheap providers** (GLM, MiniMax) β†’ Pay them directly, 9Router just routes your requests - ❌ **9Router itself** β†’ **Never charges anything, ever** 9Router is a local proxy/router. It doesn't have your credit card, can't send invoices, and has no billing system. It's completely free software. </details> <details> <summary><b>πŸ†“ Are FREE providers really unlimited?</b></summary> **Yes!** The current FREE providers (Kiro, OpenCode Free, Vertex) are genuinely free with **no hidden charges**. These are free services offered by those respective companies: - **Kiro AI**: Free unlimited Claude 4.5 + GLM-5 + MiniMax via AWS Builder ID / Google / GitHub OAuth - **OpenCode Free**: No-auth passthrough proxy, models auto-fetched from `opencode.ai/zen/v1/models` - **Vertex AI**: $300 free credits for new Google Cloud accounts (90 days) 9Router just routes your requests to them - there's no "catch" or future billing. They're truly free services, and 9Router makes them easy to use with fallback support. **Discontinued free tiers (no longer recommended):** - ❌ **iFlow**: Was free unlimited, now changed to paid (2026) - ❌ **Qwen Code**: Free OAuth tier discontinued by Alibaba on 2026-04-15 - ❌ **Gemini CLI**: Still works, but using it with non-CLI tools (Claude, Codex, Cursor...) may result in account bans β€” only use if you stick to Gemini CLI itself </details> <details> <summary><b>πŸ’° How do I minimize my actual AI costs?</b></summary> **Free-First Strategy:** 1. **Start with 100% free combo:** ``` 1. gc/gemini-3-flash (180K/month free from Google) 2. if/kimi-k2-thinking (unlimited free from iFlow) 3. qw/qwen3-coder-plus (unlimited free from Qwen) ``` **Cost: $0/month** 2. **Add cheap backup** only if you need it: ``` 4. glm/glm-4.7 ($0.6/1M tokens) ``` **Additional cost: Only pay for what you actually use** 3. **Use subscription providers last:** - Only if you already have them - 9Router helps maximize their value through quota tracking **Result:** Most users can operate at $0/month using only free tiers! </details> <details> <summary><b>πŸ“ˆ What if my usage suddenly spikes?</b></summary> 9Router's smart fallback prevents surprise charges: **Scenario:** You're on a coding sprint and blow through your quotas **Without 9Router:** - ❌ Hit rate limit β†’ Work stops β†’ Frustration - ❌ Or: Accidentally rack up huge API bills **With 9Router:** - βœ… Subscription hits limit β†’ Auto-fallback to cheap tier - βœ… Cheap tier gets expensive β†’ Auto-fallback to free tier - βœ… Never stop coding β†’ Predictable costs **You're in control:** Set spending limits per provider in dashboard, and 9Router respects them. </details> --- ## πŸ“– Setup Guide <details> <summary><b>πŸ” Subscription Providers (Maximize Value)</b></summary> ### Claude Code (Pro/Max) ```bash Dashboard β†’ Providers β†’ Connect Claude Code β†’ OAuth login β†’ Auto token refresh β†’ 5-hour + weekly quota tracking Models: cc/claude-opus-4-7 cc/claude-opus-4-6 cc/claude-sonnet-4-6 cc/claude-haiku-4-5-20251001 ``` **Pro Tip:** Use Opus for complex tasks, Sonnet for speed. 9Router tracks quota per model! ### OpenAI Codex (Plus/Pro) ```bash Dashboard β†’ Providers β†’ Connect Codex β†’ OAuth login (port 1455) β†’ 5-hour + weekly reset Models: cx/gpt-5.5 cx/gpt-5.4 cx/gpt-5.3-codex cx/gpt-5.2-codex ``` ### GitHub Copilot ```bash Dashboard β†’ Providers β†’ Connect GitHub β†’ OAuth via GitHub β†’ Monthly reset (1st of month) Models: gh/gpt-5.4 gh/claude-opus-4.7 gh/claude-sonnet-4.6 gh/gemini-3.1-pro-preview gh/grok-code-fast-1 ``` ### Cursor IDE ```bash Dashboard β†’ Providers β†’ Connect Cursor β†’ OAuth login β†’ Monthly subscription Models: cu/claude-4.6-opus-max cu/claude-4.5-sonnet-thinking cu/gpt-5.3-codex ``` </details> <details> <summary><b>πŸ’° Cheap Providers (Backup)</b></summary> ### GLM-5.1 / GLM-4.7 (Daily reset, $0.6/1M) 1. Sign up: [Zhipu AI](https://open.bigmodel.cn/) 2. Get API key from Coding Plan 3. Dashboard β†’ Add API Key: - Provider: `glm` - API Key: `your-key` **Use:** `glm/glm-5.1`, `glm/glm-5`, `glm/glm-4.7` **Pro Tip:** Coding Plan offers 3Γ— quota at 1/7 cost! Reset daily 10:00 AM. ### MiniMax M2.7 (5h reset, $0.20/1M) 1. Sign up: [MiniMax](https://www.minimax.io/) 2. Get API key 3. Dashboard β†’ Add API Key **Use:** `minimax/MiniMax-M2.7`, `minimax/MiniMax-M2.5` **Pro Tip:** Cheapest option for long context (1M tokens)! ### Kimi K2.5 ($9/month flat) 1. Subscribe: [Moonshot AI](https://platform.moonshot.ai/) 2. Get API key 3. Dashboard β†’ Add API Key **Use:** `kimi/kimi-k2.5`, `kimi/kimi-k2.5-thinking` **Pro Tip:** Fixed $9/month for 10M tokens = $0.90/1M effective cost! </details> <details> <summary><b>πŸ†“ FREE Providers (Recommended)</b></summary> ### Kiro AI (Claude 4.5 + GLM-5 + MiniMax FREE) ```bash Dashboard β†’ Connect Kiro β†’ AWS Builder ID, AWS IAM Identity Center, Google, or GitHub β†’ Unlimited usage Models: kr/claude-sonnet-4.5 kr/claude-haiku-4.5 kr/glm-5 kr/MiniMax-M2.5 kr/qwen3-coder-next kr/deepseek-3.2 ``` **Pro Tip:** Best free option for Claude. No API key, no payment, fully unlimited. ### OpenCode Free (No auth, auto-fetch models) ```bash Dashboard β†’ Connect OpenCode Free β†’ No login required (passthrough proxy) β†’ Models auto-fetched from opencode.ai/zen/v1/models ``` **Pro Tip:** Fastest setup. Just connect and start coding. ### Vertex AI ($300 free credits for new GCP accounts) ```bash Dashboard β†’ Connect Vertex AI β†’ Upload Google Cloud Service Account JSON β†’ Enable Vertex AI API in your GCP project Models: vertex/gemini-3.1-pro-preview vertex/gemini-3-flash-preview vertex/gemini-2.5-flash Vertex Partner (Anthropic / DeepSeek / GLM / Qwen via Vertex): vertex-partner/glm-5-maas vertex-partner/deepseek-v3.2-maas vertex-partner/qwen3-next-80b-a3b-thinking-maas ``` **Pro Tip:** New Google Cloud accounts get $300 credits free for 90 days. Plenty for daily coding. </details> <details> <summary><b>🎨 Create Combos</b></summary> ### Example 1: Maximize Subscription β†’ Cheap Backup ``` Dashboard β†’ Combos β†’ Create New Name: premium-coding Models: 1. cc/claude-opus-4-7 (Subscription primary) 2. glm/glm-5.1 (Cheap backup, $0.6/1M) 3. minimax/MiniMax-M2.7 (Cheapest fallback, $0.20/1M) Use in CLI: premium-coding Monthly cost example (100M tokens): 80M via Claude (subscription): $0 extra 15M via GLM: $9 5M via MiniMax: $1 Total: $10 + your subscription ``` ### Example 2: Free-Only (Zero Cost) ``` Name: free-combo Models: 1. kr/claude-sonnet-4.5 (Claude 4.5 free unlimited) 2. kr/glm-5 (GLM-5 free via Kiro) 3. vertex/gemini-3.1-pro-preview ($300 free credits) Cost: $0 forever (+ 20-40% token savings via RTK)! ``` </details> <details> <summary><b>πŸ”§ CLI Integration</b></summary> ### Cursor IDE ``` Settings β†’ Models β†’ Advanced: OpenAI API Base URL: http://localhost:20128/v1 OpenAI API Key: [from 9router dashboard] Model: cc/claude-opus-4-7 ``` Or use combo: `premium-coding` ### Claude Code Edit `~/.claude/config.json`: ```json { "anthropic_api_base": "http://localhost:20128/v1", "anthropic_api_key": "your-9router-api-key" } ``` ### Codex CLI ```bash export OPENAI_BASE_URL="http://localhost:20128" export OPENAI_API_KEY="your-9router-api-key" codex "your prompt" ``` ### OpenClaw **Option 1 β€” Dashboard (recommended):** ``` Dashboard β†’ CLI Tools β†’ OpenClaw β†’ Select Model β†’ Apply ``` **Option 2 β€” Manual:** Edit `~/.openclaw/openclaw.json`: ```json { "agents": { "defaults": { "model": { "primary": "9router/kr/claude-sonnet-4.5" } } }, "models": { "providers": { "9router": { "baseUrl": "http://127.0.0.1:20128/v1", "apiKey": "sk_9router", "api": "openai-completions", "models": [ { "id": "kr/claude-sonnet-4.5", "name": "Claude Sonnet 4.5 (Kiro Free)" } ] } } } } ``` > **Note:** OpenClaw only works with local 9Router. Use `127.0.0.1` instead of `localhost` to avoid IPv6 resolution issues. ### Cline / Continue / RooCode ``` Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 API Key: [from dashboard] Model: cc/claude-opus-4-7 ``` </details> <details> <summary><b>πŸš€ Deployment</b></summary> ### VPS Deployment ```bash # Clone and install git clone https://github.com/decolua/9router.git cd 9router npm install npm run build # Configure export JWT_SECRET="your-secure-secret-change-this" export INITIAL_PASSWORD="your-password" export DATA_DIR="/var/lib/9router" export PORT="20128" export HOSTNAME="0.0.0.0" export NODE_ENV="production" export NEXT_PUBLIC_BASE_URL="http://localhost:20128" export NEXT_PUBLIC_CLOUD_URL="https://9router.com" export API_KEY_SECRET="endpoint-proxy-api-key-secret" export MACHINE_ID_SALT="endpoint-proxy-salt" # Start npm run start # Or use PM2 npm install -g pm2 pm2 start npm --name 9router -- start pm2 save pm2 startup ``` ### Docker Published images (multi-platform `linux/amd64` + `linux/arm64`): - Docker Hub: [`decolua/9router`](https://hub.docker.com/r/decolua/9router) - GHCR: [`ghcr.io/decolua/9router`](https://github.com/decolua/9router/pkgs/container/9router) **Quick start (use published image):** ```bash docker run -d \ --name 9router \ -p 20128:20128 \ -v "$HOME/.9router:/app/data" \ -e DATA_DIR=/app/data \ decolua/9router:latest ``` β†’ Open http://localhost:20128 **Build from source (dev):** ```bash git clone https://github.com/decolua/9router.git cd 9router/app docker build -t 9router . docker run -d --name 9router -p 20128:20128 \ -v "$HOME/.9router:/app/data" -e DATA_DIR=/app/data 9router ``` **Container defaults:** - `PORT=20128` - `HOSTNAME=0.0.0.0` **Useful commands:** ```bash docker logs -f 9router docker restart 9router docker stop 9router && docker rm 9router docker pull decolua/9router:latest # update to latest ``` **Data persistence:** `$HOME/.9router/db/data.sqlite` on host ↔ `/app/data/db/data.sqlite` in container. ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `JWT_SECRET` | Auto-generated (`~/.9router/jwt-secret`) | JWT signing secret for dashboard auth cookie (override to share across instances) | | `INITIAL_PASSWORD` | `123456` | First login password when no saved hash exists | | `DATA_DIR` | `~/.9router` | Main app data location (SQLite at `$DATA_DIR/db/data.sqlite`) | | `PORT` | framework default | Service port (`20128` in examples) | | `HOSTNAME` | framework default | Bind host (Docker defaults to `0.0.0.0`) | | `NODE_ENV` | runtime default | Set `production` for deploy | | `BASE_URL` | `http://localhost:20128` | Server-side internal base URL used by cloud sync jobs | | `CLOUD_URL` | `https://9router.com` | Server-side cloud sync endpoint base URL | | `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | Backward-compatible/public base URL (prefer `BASE_URL` for server runtime) | | `NEXT_PUBLIC_CLOUD_URL` | `https://9router.com` | Backward-compatible/public cloud URL (prefer `CLOUD_URL` for server runtime) | | `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | HMAC secret for generated API keys | | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | Salt for stable machine ID hashing | | `ENABLE_REQUEST_LOGS` | `false` | Enables request/response logs under `logs/` | | `AUTH_COOKIE_SECURE` | `false` | Force `Secure` auth cookie (set `true` behind HTTPS reverse proxy) | | `REQUIRE_API_KEY` | `false` | Enforce Bearer API key on `/v1/*` routes (recommended for internet-exposed deploys) | | `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` | empty | Optional outbound proxy for upstream provider calls | Notes: - Lowercase proxy variables are also supported: `http_proxy`, `https_proxy`, `all_proxy`, `no_proxy`. - `.env` is not baked into Docker image (`.dockerignore`); inject runtime config with `--env-file` or `-e`. - On Windows, `APPDATA` can be used for local storage path resolution. - `INSTANCE_NAME` appears in older docs/env templates, but is currently not used at runtime. ### Runtime Files and Storage - Main app state: `${DATA_DIR}/db/data.sqlite` (SQLite β€” providers, combos, aliases, keys, settings, usage history) - Auto backups: `${DATA_DIR}/db/backups/` - Optional request/translator logs: `<repo>/logs/...` when `ENABLE_REQUEST_LOGS=true` - Both `${DATA_DIR}` and `~/.9router` resolve to the same location in a Docker container β€” the symlink `/root/.9router -> /app/data` is created at build time. </details> --- ## πŸ“Š Available Models <details> <summary><b>View all available models</b></summary> **Claude Code (`cc/`)** - Pro/Max: - `cc/claude-opus-4-7` - `cc/claude-opus-4-6` - `cc/claude-sonnet-4-6` - `cc/claude-sonnet-4-5-20250929` - `cc/claude-haiku-4-5-20251001` **Codex (`cx/`)** - Plus/Pro: - `cx/gpt-5.5` - `cx/gpt-5.4` - `cx/gpt-5.3-codex` - `cx/gpt-5.2-codex` - `cx/gpt-5.1-codex-max` **GitHub Copilot (`gh/`)**: - `gh/gpt-5.4` - `gh/claude-opus-4.7` - `gh/claude-sonnet-4.6` - `gh/gemini-3.1-pro-preview` - `gh/grok-code-fast-1` **Cursor (`cu/`)** - Subscription: - `cu/claude-4.6-opus-max` - `cu/claude-4.5-sonnet-thinking` - `cu/gpt-5.3-codex` - `cu/kimi-k2.5` **GLM (`glm/`)** - $0.6/1M: - `glm/glm-5.1` - `glm/glm-5` - `glm/glm-4.7` **MiniMax (`minimax/`)** - $0.2/1M: - `minimax/MiniMax-M2.7` - `minimax/MiniMax-M2.5` **Kimi (`kimi/`)** - $9/mo flat: - `kimi/kimi-k2.5` - `kimi/kimi-k2.5-thinking` **Kiro (`kr/`)** - FREE unlimited: - `kr/claude-sonnet-4.5` - `kr/claude-haiku-4.5` - `kr/glm-5` - `kr/MiniMax-M2.5` - `kr/qwen3-coder-next` - `kr/deepseek-3.2` **OpenCode Free (`oc/`)** - FREE no-auth: - Auto-fetched from `opencode.ai/zen/v1/models` **Vertex AI (`vertex/`)** - $300 free credits: - `vertex/gemini-3.1-pro-preview` - `vertex/gemini-3-flash-preview` - `vertex/gemini-2.5-flash` - `vertex-partner/glm-5-maas` - `vertex-partner/deepseek-v3.2-maas` </details> --- ## πŸ› Troubleshooting **"Language model did not provide messages"** - Provider quota exhausted β†’ Check dashboard quota tracker - Solution: Use combo fallback or switch to cheaper tier **Rate limiting** - Subscription quota out β†’ Fallback to GLM/MiniMax - Add combo: `cc/claude-opus-4-7 β†’ glm/glm-5.1 β†’ kr/claude-sonnet-4.5` **OAuth token expired** - Auto-refreshed by 9Router - If issues persist: Dashboard β†’ Provider β†’ Reconnect **High costs** - Enable RTK in Dashboard β†’ Endpoint settings (default ON, saves 20-40% tokens) - Check usage stats in Dashboard - Switch primary model to GLM/MiniMax - Use free tier (Kiro, OpenCode Free, Vertex) for non-critical tasks **Dashboard opens on wrong port** - Set `PORT=20128` and `NEXT_PUBLIC_BASE_URL=http://localhost:20128` **First login not working** - Check `INITIAL_PASSWORD` in `.env` - If unset, fallback password is `123456` **No request logs under `logs/`** - Set `ENABLE_REQUEST_LOGS=true` --- ## πŸ› οΈ Tech Stack - **Runtime**: Node.js 20+ - **Framework**: Next.js 16 - **UI**: React 19 + Tailwind CSS 4 - **Database**: SQLite (better-sqlite3 / node:sqlite / sql.js fallback) - **Streaming**: Server-Sent Events (SSE) - **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys --- ## πŸ“ API Reference ### Chat Completions ```bash POST http://localhost:20128/v1/chat/completions Authorization: Bearer your-api-key Content-Type: application/json { "model": "cc/claude-opus-4-6", "messages": [ {"role": "user", "content": "Write a function to..."} ], "stream": true } ``` ### List Models ```bash GET http://localhost:20128/v1/models Authorization: Bearer your-api-key β†’ Returns all models + combos in OpenAI format ``` ## πŸ“§ Support - **Website**: [9router.com](https://9router.com) - **GitHub**: [github.com/decolua/9router](https://github.com/decolua/9router) - **Issues**: [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues) --- ## πŸ‘₯ Contributors Thanks to all contributors who helped make 9Router better! [![Contributors](https://contrib.rocks/image?repo=decolua/9router&max=150&columns=15&anon=1&v=20260309)](https://github.com/decolua/9router/graphs/contributors) --- ## πŸ“Š Star Chart [![Star Chart](https://starchart.cc/decolua/9router.svg?variant=adaptive)](https://starchart.cc/decolua/9router) ## πŸ”€ Forks **[OmniRoute](https://github.com/diegosouzapw/OmniRoute)** β€” A full-featured TypeScript fork of 9Router. Adds 36+ providers, 4-tier auto-fallback, multi-modal APIs (images, embeddings, audio, TTS), circuit breaker, semantic cache, LLM evaluations, and a polished dashboard. 368+ unit tests. Available via npm and Docker. --- ## πŸ™ Acknowledgments Built on the shoulders of giants: - **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** β€” original Go implementation that inspired this JavaScript port. - **[RTK](https://github.com/rtk-ai/rtk)** ![Stars](https://img.shields.io/github/stars/rtk-ai/rtk?style=flat&color=yellow) β€” Rust token-saver. 9Router ports its compression pipeline to JS β†’ **βˆ’20-40% input tokens** on every request. - **[Caveman](https://github.com/JuliusBrussee/caveman)** ![Stars](https://img.shields.io/github/stars/JuliusBrussee/caveman?style=flat&color=yellow) by **[@JuliusBrussee](https://github.com/JuliusBrussee)** β€” viral *"why use many token when few token do trick"*. 9Router adapts its prompt β†’ **βˆ’65% output tokens**. Huge thanks to these authors β€” without their work, 9Router's token-saving features wouldn't exist. ⭐ them on GitHub! --- ## πŸ“„ License MIT License - see [LICENSE](LICENSE) for details. --- <div align="center"> <sub>Built with ❀️ for developers who code 24/7</sub> </div>

LLM Tools & Chat UIs iPaaS & API Integration
17K Github Stars
9remote
Open Source

9remote

<div align="center"> <img src="./images/9remote.png?1" alt="9Remote Dashboard" width="800"/> # 9Remote β€” Terminal in Your Pocket **Want to code from bed? Fix bugs while having coffee? Deploy while on vacation?** **Your Mac/Linux/Windows terminal, remote desktop, and file explorer β€” accessible from any phone or browser, anywhere, instantly.** [![npm version](https://img.shields.io/npm/v/9remote.svg)](https://www.npmjs.com/package/9remote) [![Downloads](https://img.shields.io/npm/dm/9remote.svg)](https://www.npmjs.com/package/9remote) [![License](https://img.shields.io/badge/license-Proprietary-orange.svg)](#-license) [πŸš€ Quick Start](#-quick-start) β€’ [πŸ“Š Comparison](#-9remote-vs-other-remote-solutions) β€’ [πŸ’‘ Features](#-key-features) β€’ [🌐 Website](https://9remote.cc) β€’ [πŸ“– Docs](https://docs.9remote.cc) β€’ [πŸ’¬ Facebook](https://www.facebook.com/groups/9teamvn) [πŸ‡ΊπŸ‡Έ English](./README.md) β€’ [πŸ‡»πŸ‡³ TiαΊΏng Việt](./i18n/README.vi.md) </div> --- ## 🚧 Development Status > **9Remote is currently in active development.** > > The source code is **not open-source yet**. If this project gets enough ⭐ support from the community, we will **fully open-source it** so everyone can contribute and self-host. > > **⭐ Star this repo to help us reach the open-source milestone!** --- ## πŸ€” Why 9Remote? **Remote access today is painful:** - ❌ **SSH is a hassle** β€” firewall rules, port forwarding, SSH keys, IP whitelisting - ❌ **VPN is overkill** β€” complex setup just to check a terminal - ❌ **ngrok / tunnels expire** β€” lose connection, restart everything - ❌ **TeamViewer is slow** β€” high latency, desktop-only, paid for commercial use - ❌ **Chrome Remote Desktop** β€” no terminal, no file explorer, no mobile - ❌ **Termius** β€” SSH-only, no remote desktop, no browser access **9Remote solves all of it:** - βœ… **One command** β€” install, scan QR, done in 30 seconds - βœ… **Auto tunnel** β€” Cloudflare tunnel starts automatically, no port forwarding - βœ… **All-in-one** β€” terminal + remote desktop + file explorer + code editor in one app - βœ… **Works on phone** β€” full workspace from your browser, under 50ms latency - βœ… **Persistent sessions** β€” PTY daemon survives server restarts - βœ… **Pair Device security** β€” only approved devices can connect, zero signup friction --- ## ⚑ Quick Start **Install globally:** ```bash npm install -g 9remote 9remote ``` πŸŽ‰ **Scan the QR code on your phone β†’ pair your device β†’ you're in.** **That's it!** No config, no firewall rules, no signup. > **Ready in 30 seconds.** Works on macOS, Linux, and Windows. --- ## πŸ“Š 9Remote vs Other Remote Solutions | Feature | **9Remote** | Claude Remote | TeamViewer | Chrome Remote | Termius | |---------|:-----------:|:-------------:|:----------:|:-------------:|:-------:| | Zero Config | βœ… | βœ… | βœ… | βœ… | ❌ | | Terminal Access | βœ… | βœ… | ❌ | ❌ | βœ… | | Remote Desktop | βœ… | ❌ | βœ… | βœ… | ❌ | | File Explorer | βœ… | ❌ | βœ… | ❌ | βœ… | | Code Editor | βœ… | ❌ | ❌ | ❌ | ❌ | | Git Integration | βœ… | ❌ | ❌ | ❌ | ❌ | | Mobile Optimized | βœ… | βœ… | ❌ | ❌ | βœ… | | Browser-Based | βœ… | βœ… | ❌ | βœ… | ❌ | | QR Login | βœ… | βœ… | ❌ | ❌ | ❌ | | Auto Tunnel | βœ… | βœ… | βœ… | βœ… | ❌ | | Persistent Sessions | βœ… | βœ… | ❌ | ❌ | βœ… | | Multi-Device Sync | βœ… | βœ… | βœ… | ❌ | βœ… | | Push Notifications | βœ… | βœ… | ❌ | ❌ | ❌ | | AI Integration | βœ… | βœ… | ❌ | ❌ | ❌ | | No Port Forwarding | βœ… | βœ… | βœ… | βœ… | ❌ | | No Account Required | βœ… | ❌ | ❌ | ❌ | ❌ | | **TOTAL** | **16 / 16** | 11 / 16 | 7 / 16 | 5 / 16 | 7 / 16 | > **πŸ† 9Remote: All-in-one solution with 16/16 features.** --- ## ✨ Key Features | Feature | What It Does | Why It Matters | |---------|--------------|----------------| | πŸ–₯️ **Remote Terminal** | Full PTY shell via WebSocket | Code like you're sitting at your Mac | | πŸ–±οΈ **Remote Desktop** | Live screen streaming via WebRTC | View & control your machine from phone | | πŸ“ **File Explorer** | Browse, upload, download files | Manage files without SSH/SFTP | | πŸ’» **Code Editor** | Built-in editor with syntax highlighting | Quick edits without opening IDE | | πŸ”— **Git Integration** | Run git commands with visual status | Commit/push from your phone | | πŸ“± **Mobile Optimized** | Touch-friendly UI, gesture controls | Full workspace on a 6" screen | | πŸ”‘ **QR Login** | One-time 30-min key, scan to connect | Zero-friction mobile access | | πŸ”’ **Auto Tunnel** | Cloudflare tunnel, no port forwarding | Works behind any NAT/firewall | | πŸ”„ **Persistent Sessions** | PTY daemon survives restarts | Long-running commands stay alive | | 🌍 **Multi-Device Sync** | Same session across phone/tablet/laptop | Switch devices without losing context | | πŸ”” **Push Notifications** | Build finished? Get notified | Never miss a critical event | | πŸ€– **AI Integration** | Works with Claude Code, Codex, OpenClaw | Code with AI from anywhere | | 🌐 **Local Sites Proxy** | Expose `localhost:3000` to phone | Test dev servers on mobile instantly | | ⚑ **Low Latency** | <50ms typical, WebRTC for desktop | Feels like local | | πŸ” **Pair Device** | Approve each device before it connects | No unauthorized access, full control | | πŸ†“ **No Account Required** | Machine ID + QR key, zero signup | Privacy-first design | --- ## πŸ“± Available Platforms <div align="center"> <table> <tr> <td align="center" width="200"> <b>πŸ’» CLI</b><br/> <sub>npm install -g 9remote</sub><br/> <sub>macOS β€’ Linux β€’ Windows</sub> </td> <td align="center" width="200"> <b>πŸ–₯️ Desktop App</b><br/> <sub>Tauri native app</sub><br/> <sub>macOS β€’ Windows β€’ Linux</sub> </td> <td align="center" width="200"> <b>🌐 Web Client</b><br/> <sub><a href="https://9remote.cc">9remote.cc</a></sub><br/> <sub>Any modern browser</sub> </td> <td align="center" width="200"> <b>πŸ“± Mobile App</b><br/> <sub>iOS β€’ Android</sub><br/> <sub>React Native / Expo</sub> </td> </tr> </table> </div> --- ## 🎯 Use Cases ### Case 1: "Code from bed" **Problem:** It's 11 PM, you remember a bug but laptop is in another room. **Solution:** ``` 1. Open 9remote app on phone 2. Scan QR (or use saved session) 3. Open terminal β†’ fix bug β†’ git push 4. Sleep well 😴 ``` ### Case 2: "Fix bugs at a cafe" **Problem:** Production is down. You only have your phone and a bad cafΓ© Wi-Fi. **Solution:** ``` 1. Connect to your home/office Mac via 9remote 2. Tail logs in terminal 3. Edit config in built-in editor 4. Deploy β†’ crisis averted ``` ### Case 3: "Deploy while on vacation" **Problem:** Client needs a hotfix. You're on the beach. **Solution:** ``` 1. Phone β†’ 9remote β†’ your dev machine 2. git pull β†’ build β†’ deploy 3. Back to the beach in 5 minutes πŸ–οΈ ``` ### Case 4: "On-call engineer" **Problem:** PagerDuty alert at 3 AM. Don't want to power on laptop. **Solution:** ``` 1. Push notification β†’ tap β†’ 9remote opens 2. Terminal + remote desktop ready 3. Diagnose + restart service from bed 4. Resolve incident without getting up ``` --- ## πŸ“– Setup Guide <details> <summary><b>πŸš€ Installation Options</b></summary> ### Option 1 β€” NPM (recommended) ```bash npm install -g 9remote 9remote ``` ### Option 2 β€” Desktop App Download from [9remote.cc/download](https://9remote.cc) β€” native app with system tray integration, auto-start on boot, and background mode. ### Option 3 β€” Mobile App - **iOS:** App Store β†’ "9Remote" - **Android:** Google Play β†’ "9Remote" </details> <details> <summary><b>πŸ”‘ First Run & QR Login</b></summary> On first run, 9Remote generates two keys: - **Permanent Key** β€” stored locally, tied to your machine ID, used for trusted devices - **One-Time Key** β€” 30-minute temporary key, used for the QR code shown in terminal **Connect from phone:** 1. Run `9remote` on your Mac/Linux/Windows machine 2. A QR code appears in the terminal 3. Open 9Remote app (or [9remote.cc](https://9remote.cc)) on your phone 4. Scan the QR β†’ connected instantly > Keys are **never** stored on our servers after the session ends. </details> <details> <summary><b>πŸ–±οΈ Remote Desktop Setup (macOS)</b></summary> Remote Desktop requires two system permissions on macOS: 1. **Screen Recording** β€” `System Settings β†’ Privacy & Security β†’ Screen Recording β†’ enable Terminal (or 9Remote Desktop app)` 2. **Accessibility** β€” `System Settings β†’ Privacy & Security β†’ Accessibility β†’ enable Terminal (or 9Remote Desktop app)` Then enable in 9Remote: ``` TUI menu β†’ Remote Desktop β†’ Toggle ON ``` **Performance:** - Adaptive framerate: 60ms active / 400ms idle - Tile-based diff rendering (only changed regions sent) - WebRTC DataChannel for minimal latency </details> <details> <summary><b>🌐 Local Sites Proxy</b></summary> Expose your local dev servers (e.g. `localhost:3000`, `localhost:5173`) to your phone automatically. ``` 9Remote auto-detects running ports and proxies them: http://localhost:3000 β†’ https://<tunnel>/proxy/3000/ http://localhost:5173 β†’ https://<tunnel>/proxy/5173/ ``` Perfect for: - Testing responsive design on real devices - Sharing WIP builds with clients - Mobile debugging without USB cable </details> <details> <summary><b>⌨️ CLI Commands</b></summary> | Command | Description | |---------|-------------| | `9remote` | TUI mode β€” interactive menu with QR code | | `9remote ui` | Web UI mode β€” opens browser dashboard at `localhost:2208` | </details> --- ## ❓ Frequently Asked Questions <details> <summary><b>πŸ”’ Is 9Remote secure?</b></summary> **Yes.** 9Remote uses a **Pair Device** approval system β€” every new device must be explicitly approved by you before it can access the host. Plus: - No open ports on your machine (Cloudflare tunnel, outbound-only) - Keys are never stored on our servers after the session ends - No terminal output, files, or screen data is collected - One-time QR keys expire in 30 minutes - Pending/rejected devices can be managed anytime from the TUI menu </details> <details> <summary><b>πŸ’° Is it free?</b></summary> **Yes, during the development phase.** 9Remote is free to use. No signup, no credit card. Once we open-source, it will remain free forever (MIT license planned). </details> <details> <summary><b>πŸ“¦ When will it be open-source?</b></summary> **When the project reaches enough ⭐ GitHub stars** to prove community interest. We want to make sure there's a real community before committing to open-source maintenance. Star this repo to help us hit the milestone faster! </details> <details> <summary><b>🌐 Do I need to open any ports?</b></summary> **No.** 9Remote uses Cloudflare Quick Tunnel β€” outbound connection only. Works behind: - Home NAT routers - Corporate firewalls - Mobile hotspots - VPNs </details> <details> <summary><b>πŸ“΄ Does it work offline / on LAN only?</b></summary> **Yes.** 9Remote includes a **LocalFirstAdapter** that races LAN vs tunnel connection and uses whichever is faster. If phone and host are on the same Wi-Fi, traffic stays local. </details> <details> <summary><b>πŸ€– Can I use AI coding tools through 9Remote?</b></summary> **Yes!** 9Remote works seamlessly with: - Claude Code - OpenAI Codex CLI - Cursor - OpenClaw - Any CLI tool that runs in a terminal Run them on your host machine, access them from your phone. Combined with [9Router](https://github.com/decolua/9router), you get free AI coding from anywhere. </details> <details> <summary><b>πŸ–₯️ What platforms are supported?</b></summary> **Host (where 9Remote agent runs):** - βœ… macOS (Intel + Apple Silicon) - βœ… Linux (x64, arm64) - βœ… Windows (x64) **Client (where you connect from):** - βœ… Any modern browser (Chrome, Safari, Firefox, Edge) - βœ… iOS 14+ - βœ… Android 8+ - βœ… Tauri desktop app (macOS, Windows, Linux) </details> --- ## πŸ› οΈ Tech Stack - **Runtime:** Node.js 20+ - **Tunnel:** [Cloudflare Quick Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) β€” zero-config secure tunnel - **Terminal:** [node-pty](https://github.com/microsoft/node-pty) β€” persistent PTY sessions - **Remote Desktop:** [node-datachannel](https://github.com/murat-dogan/node-datachannel) (WebRTC) + [robotjs](https://github.com/octalmage/robotjs) (input control) - **Real-time:** [Socket.IO](https://socket.io/) β€” terminal streaming + WebRTC signaling - **Agent UI:** [Preact](https://preactjs.com/) β€” lightweight embedded dashboard - **Web Client:** [Next.js 16](https://nextjs.org/) + React 19 + Tailwind CSS 4 - **Desktop App:** [Tauri 2](https://tauri.app/) β€” native shell with auto-updater - **Mobile App:** [Expo](https://expo.dev/) β€” React Native with WebView shell - **Edge API:** Cloudflare Workers β€” session management + TURN credentials --- ## πŸ› Troubleshooting **"Port 2208 already in use"** - Another 9Remote instance is running β†’ `pkill -f 9remote` then retry - Or run on a different port: `PORT=3308 9remote` **"Cloudflare tunnel failed to start"** - Check internet connection - `cloudflared` auto-installed on first run β€” if it fails, install manually: [cloudflared docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/) **"Screen Recording / Accessibility permission denied" (macOS)** - Grant permissions in `System Settings β†’ Privacy & Security` - Restart 9Remote after granting **"QR code expired"** - One-time keys expire in 30 minutes β†’ regenerate from TUI menu: `Key β†’ Regenerate` **"Can't connect from phone"** - Check both devices have internet - Try forcing tunnel mode (skip LAN): Settings β†’ Connection β†’ Tunnel only **"Remote desktop laggy"** - Reduce resolution in settings - Switch to terminal-only if desktop not needed - Use LAN mode if on same Wi-Fi for lowest latency --- ## ⭐ Show Your Support **9Remote is in active development and we need your support to reach the open-source milestone!** - ⭐ **Star this repo** β€” every star brings us closer to going open-source - 🐦 **Share on Twitter / X** β€” tell other devs about 9Remote - πŸ’¬ **Join our Facebook community** β€” [facebook.com/groups/9teamvn](https://www.facebook.com/groups/9teamvn) - πŸ› **Report issues** β€” found a bug? Let us know! - πŸ’‘ **Request features** β€” what would make your remote workflow better? --- ## πŸ“§ Support & Links - **Website:** [9remote.cc](https://9remote.cc) - **Documentation:** [docs.9remote.cc](https://docs.9remote.cc) - **NPM Package:** [npmjs.com/package/9remote](https://www.npmjs.com/package/9remote) - **GitHub:** [github.com/decolua/9remote](https://github.com/decolua/9remote) - **Issues:** [github.com/decolua/9remote/issues](https://github.com/decolua/9remote/issues) - **Facebook Community:** [facebook.com/groups/9teamvn](https://www.facebook.com/groups/9teamvn) --- ## πŸ“„ License **Proprietary β€” All Rights Reserved.** 9Remote is currently in active development and is **not open-source yet**. The published npm package is free to use, but the source code is not publicly available. > **🎯 Open-source milestone:** once this repo reaches enough ⭐ support, the full source code will be released under the **MIT license**. --- <div align="center"> <sub>Built with ❀️ for developers who code from anywhere β€” bed, beach, or bus.</sub> </div>

AI Agents Terminal Emulators
289 Github Stars