# mulTmux A collaborative terminal tool that lets multiple users interact with the same tmux session in real-time. ## Features - **Real-time Collaboration**: Multiple users can connect to the same terminal session - **tmux Backend**: Leverages tmux for robust terminal multiplexing - **Token-based Auth**: Secure invite links with expiration - **Presence Indicators**: See who's connected to your session - **Low Resource Usage**: ~200-300MB RAM for typical usage - **Easy Deployment**: Works alongside existing services on your server ## Architecture ``` ┌─────────────┐ ┌──────────────────┐ │ Client │ ──── WebSocket ────────> │ Server │ │ (CLI) │ (token auth) │ │ └─────────────┘ │ ┌────────────┐ │ │ │ Node.js │ │ ┌─────────────┐ │ │ Backend │ │ │ Client 2 │ ──── Invite Link ──────> │ └─────┬──────┘ │ │ (CLI) │ │ │ │ └─────────────┘ │ ┌─────▼──────┐ │ │ │ tmux │ │ │ │ Sessions │ │ │ └────────────┘ │ └──────────────────┘ ``` ## Installation ### Server Setup 1. **Deploy to your AI server:** ```bash cd multmux chmod +x infrastructure/deploy.sh ./infrastructure/deploy.sh ``` This will: - Install tmux if needed - Build the server - Set up PM2 for process management - Start the server 2. **(Optional) Set up nginx reverse proxy:** ```bash sudo cp infrastructure/nginx.conf /etc/nginx/sites-available/multmux sudo ln -s /etc/nginx/sites-available/multmux /etc/nginx/sites-enabled/ # Edit the file to set your domain sudo nano /etc/nginx/sites-available/multmux sudo nginx -t sudo systemctl reload nginx ``` ### CLI Installation **On your local machine:** ```bash cd multmux/packages/cli npm install npm run build npm link # Installs 'multmux' command globally ``` ## Usage ### Create a Session ```bash multmux create my-project --repo /path/to/repo ``` This outputs an invite link like: ``` multmux join a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 ``` ### Join a Session ```bash multmux join a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 ``` ### List Active Sessions ```bash multmux list ``` ### Using a Remote Server If your server is on a different machine: ```bash # Create session multmux create my-project --server http://your-server:3000 # Join session multmux join --server ws://your-server:3001 ``` ## CLI Commands | Command | Description | |---------|-------------| | `multmux create ` | Create a new collaborative session | | `multmux join ` | Join an existing session | | `multmux list` | List all active sessions | ### Options **create:** - `-s, --server ` - Server URL (default: http://localhost:3000) - `-r, --repo ` - Repository path to cd into **join:** - `-s, --server ` - WebSocket server URL (default: ws://localhost:3001) **list:** - `-s, --server ` - Server URL (default: http://localhost:3000) ## Server Management ### PM2 Commands ```bash pm2 status # Check server status pm2 logs multmux-server # View server logs pm2 restart multmux-server # Restart server pm2 stop multmux-server # Stop server ``` ### Resource Usage - **Idle**: ~100-150MB RAM - **Per session**: ~5-10MB RAM - **Per user**: ~1-2MB RAM - **Typical usage**: 200-300MB RAM total ## API Reference ### HTTP API (default: port 3000) | Endpoint | Method | Description | |----------|--------|-------------| | `/api/sessions` | POST | Create a new session | | `/api/sessions` | GET | List active sessions | | `/api/sessions/:id` | GET | Get session info | | `/api/sessions/:id/tokens` | POST | Generate new invite token | | `/api/health` | GET | Health check | ### WebSocket (default: port 3001) Connect with: `ws://localhost:3001?token=` **Message Types:** - `output` - Terminal output from server - `input` - User input to terminal - `resize` - Terminal resize event - `presence` - User join/leave notifications - `joined` - Connection confirmation ## Security - **Token Expiration**: Invite tokens expire after 60 minutes (configurable) - **Session Isolation**: Each session runs in its own tmux instance - **Input Validation**: All terminal input is validated - **No Persistence**: Sessions are destroyed when all users leave ## Troubleshooting ### Server won't start Check if ports are available: ```bash netstat -tlnp | grep -E '3000|3001' ``` ### Can't connect to server 1. Check server is running: `pm2 status` 2. Check logs: `pm2 logs multmux-server` 3. Verify firewall allows ports 3000 and 3001 ### Terminal not responding 1. Check WebSocket connection in browser console 2. Verify token hasn't expired 3. Restart session: `pm2 restart multmux-server` ## Development ### Project Structure ``` multmux/ ├── packages/ │ ├── server/ # Backend server │ │ ├── src/ │ │ │ ├── managers/ # Session & token management │ │ │ ├── websocket/ # WebSocket handler │ │ │ └── api/ # HTTP routes │ └── cli/ # CLI client │ ├── src/ │ │ ├── commands/ # CLI commands │ │ ├── connection/ # WebSocket client │ │ └── ui/ # Terminal UI └── infrastructure/ # Deployment scripts ``` ### Running in Development **Terminal 1 - Server:** ```bash npm run dev:server ``` **Terminal 2 - CLI:** ```bash cd packages/cli npm run dev -- create test-session ``` ### Building ```bash npm run build # Builds both packages ``` ## License MIT ## Contributing Contributions welcome! Please open an issue or PR.