# Installation Detailed installation guide for 9Router with troubleshooting tips. --- ## Requirements ### System Requirements - **Node.js**: Version 20.0.0 or higher - **npm**: Version 10.0.0 or higher (comes with Node.js) - **OS**: macOS, Linux, Windows (WSL recommended) - **Disk Space**: ~200MB for installation ### Check Your Version ```bash node --version # Should show v20.x.x or higher npm --version # Should show 10.x.x or higher ``` **Don't have Node.js?** Install from [nodejs.org](https://nodejs.org/) --- ## Installation Methods ### Method 1: Global Installation (Recommended) Install 9Router globally to use from anywhere: ```bash npm install -g 9router ``` **Start 9Router:** ```bash 9router ``` **Benefits:** - ✅ Run from any directory - ✅ Simple command: `9router` - ✅ Auto-updates with `npm update -g 9router` ### Method 2: Local Installation Install in a specific project: ```bash mkdir my-9router cd my-9router npm install 9router ``` **Start 9Router:** ```bash npx 9router ``` **Benefits:** - ✅ Isolated per project - ✅ Version control per project - ✅ No global namespace pollution ### Method 3: From Source (Development) Clone and build from GitHub: ```bash git clone https://github.com/decolua/9router.git cd 9router/app npm install npm run build npm start ``` **Benefits:** - ✅ Latest development features - ✅ Contribute to development - ✅ Custom modifications --- ## First Run ### Start the Server ```bash 9router ``` **What happens:** 1. Server starts on `http://localhost:20128` 2. Dashboard opens automatically in browser 3. Data directory created at `~/.9router` 4. API key generated automatically ### Dashboard Login **Default credentials:** - Password: `123456` **⚠️ Change password immediately:** 1. Login to dashboard 2. Settings → Change Password 3. Use strong password ### Get Your API Key ``` Dashboard → Settings → API Keys → Copy your API key → Use in CLI tools ``` **Example API key format:** ``` 9r_1234567890abcdef1234567890abcdef ``` --- ## Verify Installation ### Check Server Status ```bash curl http://localhost:20128/health ``` **Expected response:** ```json { "status": "ok", "version": "1.0.0" } ``` ### List Available Models ```bash curl http://localhost:20128/v1/models \ -H "Authorization: Bearer your-api-key" ``` **Expected response:** ```json { "object": "list", "data": [ { "id": "cc/claude-opus-4-5-20251101", "object": "model", "created": 1234567890, "owned_by": "claude-code" } ] } ``` ### Test Chat Completion ```bash curl http://localhost:20128/v1/chat/completions \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{ "model": "cc/claude-opus-4-5-20251101", "messages": [ {"role": "user", "content": "Hello!"} ] }' ``` --- ## Configuration ### Environment Variables Create `.env` file or set environment variables: ```bash # Security (REQUIRED in production) export JWT_SECRET="your-secure-secret-change-this" export INITIAL_PASSWORD="your-password" # Storage export DATA_DIR="~/.9router" # Server export PORT="20128" export NODE_ENV="production" # Logging export ENABLE_REQUEST_LOGS="false" ``` ### Data Directory **Default location:** `~/.9router` **Contents:** ``` ~/.9router/ ├── db.json # Database (providers, combos, usage) ├── api-keys.json # API keys └── logs/ # Request logs (if enabled) ``` **Change location:** ```bash export DATA_DIR="/custom/path" 9router ``` ### Port Configuration **Default port:** `20128` **Change port:** ```bash export PORT="3000" 9router ``` **Or use command line:** ```bash 9router --port 3000 ``` --- ## Troubleshooting ### Port Already in Use **Error:** ``` Error: listen EADDRINUSE: address already in use :::20128 ``` **Solution 1: Kill existing process** ```bash # Find process using port 20128 lsof -i :20128 # Kill process kill -9 ``` **Solution 2: Use different port** ```bash 9router --port 3000 ``` ### Permission Denied **Error:** ``` Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/9router' ``` **Solution: Use sudo (not recommended) or fix npm permissions** ```bash # Fix npm permissions (recommended) mkdir ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc # Then install again npm install -g 9router ``` ### Node.js Version Too Old **Error:** ``` Error: The engine "node" is incompatible with this module ``` **Solution: Update Node.js** ```bash # Using nvm (recommended) nvm install 20 nvm use 20 # Or download from nodejs.org ``` ### Dashboard Not Opening **Issue:** Dashboard doesn't open automatically **Solution 1: Open manually** ``` http://localhost:20128 ``` **Solution 2: Check firewall** ```bash # macOS: Allow Node.js in System Preferences → Security # Linux: Check iptables # Windows: Check Windows Firewall ``` ### Cannot Connect to Providers **Issue:** OAuth login fails or API key invalid **Solution 1: Check internet connection** ```bash ping google.com ``` **Solution 2: Check provider status** - Claude Code: [status.anthropic.com](https://status.anthropic.com) - OpenAI: [status.openai.com](https://status.openai.com) - Gemini: [status.cloud.google.com](https://status.cloud.google.com) **Solution 3: Regenerate API key** ``` Dashboard → Provider → Disconnect → Reconnect ``` ### High Memory Usage **Issue:** 9Router using too much RAM **Solution: Restart server** ```bash # Stop pkill -f 9router # Start 9router ``` **Or use PM2 for auto-restart:** ```bash npm install -g pm2 pm2 start 9router --name 9router pm2 save ``` --- ## Deployment Options ### Local Development ```bash npm install -g 9router 9router ``` **Use case:** Personal coding, testing ### VPS/Cloud Server ```bash # Install npm install -g 9router # Configure export JWT_SECRET="your-secure-secret" export INITIAL_PASSWORD="your-password" export NODE_ENV="production" # Start with PM2 npm install -g pm2 pm2 start 9router --name 9router pm2 save pm2 startup ``` **Use case:** Team access, remote coding ### Docker ```bash docker pull 9router/9router:latest docker run -d \ -p 20128:20128 \ -e JWT_SECRET="your-secure-secret" \ -e INITIAL_PASSWORD="your-password" \ -v 9router-data:/root/.9router \ --name 9router \ 9router/9router:latest ``` **Use case:** Containerized deployment, Kubernetes ### Reverse Proxy (Nginx) ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:20128; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; # SSE support for streaming proxy_buffering off; proxy_read_timeout 86400; } } ``` **Use case:** HTTPS, custom domain, load balancing --- ## Uninstallation ### Remove Global Installation ```bash npm uninstall -g 9router ``` ### Remove Data Directory ```bash rm -rf ~/.9router ``` ### Remove Configuration ```bash # Remove environment variables from shell config nano ~/.bashrc # or ~/.zshrc # Delete 9router-related exports ``` --- ## Next Steps - [Getting Started Guide](../getting-started.md) - Connect providers and start coding - [Features](../features/) - Explore quota tracking, combos, deployment - [Troubleshooting](../troubleshooting.md) - Fix common issues --- ## Need Help? - **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)