9router / gitbook /content /en /getting-started /installation.md
2api
feat: configurable stream stall timeout + per-provider UI
88c4c60
|
Raw
History Blame Contribute Delete
7.8 kB

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

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


Installation Methods

Method 1: Global Installation (Recommended)

Install 9Router globally to use from anywhere:

npm install -g 9router

Start 9Router:

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:

mkdir my-9router
cd my-9router
npm install 9router

Start 9Router:

npx 9router

Benefits:

  • βœ… Isolated per project
  • βœ… Version control per project
  • βœ… No global namespace pollution

Method 3: From Source (Development)

Clone and build from GitHub:

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

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

curl http://localhost:20128/health

Expected response:

{
  "status": "ok",
  "version": "1.0.0"
}

List Available Models

curl http://localhost:20128/v1/models \
  -H "Authorization: Bearer your-api-key"

Expected response:

{
  "object": "list",
  "data": [
    {
      "id": "cc/claude-opus-4-5-20251101",
      "object": "model",
      "created": 1234567890,
      "owned_by": "claude-code"
    }
  ]
}

Test Chat Completion

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:

# 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:

export DATA_DIR="/custom/path"
9router

Port Configuration

Default port: 20128

Change port:

export PORT="3000"
9router

Or use command line:

9router --port 3000

Troubleshooting

Port Already in Use

Error:

Error: listen EADDRINUSE: address already in use :::20128

Solution 1: Kill existing process

# Find process using port 20128
lsof -i :20128

# Kill process
kill -9 <PID>

Solution 2: Use different port

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

# 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

# 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

# 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

ping google.com

Solution 2: Check provider status

Solution 3: Regenerate API key

Dashboard β†’ Provider β†’ Disconnect β†’ Reconnect

High Memory Usage

Issue: 9Router using too much RAM

Solution: Restart server

# Stop
pkill -f 9router

# Start
9router

Or use PM2 for auto-restart:

npm install -g pm2
pm2 start 9router --name 9router
pm2 save

Deployment Options

Local Development

npm install -g 9router
9router

Use case: Personal coding, testing

VPS/Cloud Server

# 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

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)

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

npm uninstall -g 9router

Remove Data Directory

rm -rf ~/.9router

Remove Configuration

# Remove environment variables from shell config
nano ~/.bashrc  # or ~/.zshrc
# Delete 9router-related exports

Next Steps


Need Help?