# XCOpenCodeWeb [![GitHub stars](https://img.shields.io/github/stars/btriapitsyn/openchamber?style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YxZWNlYyIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxwYXRoIGQ9Ik0yMjkuMDYsMTA4Ljc5bC00OC43LDQyLDE0Ljg4LDYyLjc5YTguNCw4LjQsMCwwLDEtMTIuNTIsOS4xN0wxMjgsMTg5LjA5LDczLjI4LDIyMi43NGE4LjQsOC40LDAsMCwxLTEyLjUyLTkuMTdsMTQuODgtNjIuNzktNDguNy00MkE4LjQ2LDguNDYsMCwwLDEsMzEuNzMsOTRMOTUuNjQsODguOGwyNC42Mi01OS42YTguMzYsOC4zNiwwLDAsMSwxNS40OCwwbDI0LjYyLDU5LjZMMjI0LjI3LDk0QTguNDYsOC40NiwwLDAsMSwyMjkuMDYsMTA4Ljc5WiIgb3BhY2l0eT0iMC4yIj48L3BhdGg%2BPHBhdGggZD0iTTIzOS4xOCw5Ny4yNkExNi4zOCwxNi4zOCwwLDAsMCwyMjQuOTIsODZsLTU5LTQuNzZMMTQzLjE0LDI2LjE1YTE2LjM2LDE2LjM2LDAsMCwwLTMwLjI3LDBMOTAuMTEsODEuMjMsMzEuMDgsODZhMTYuNDYsMTYuNDYsMCwwLDAtOS4zNywyOC44Nmw0NSwzOC44M0w1MywyMTEuNzVhMTYuMzgsMTYuMzgsMCwwLDAsMjQuNSwxNy44TDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwMjM5LjE4LDk3LjI2Wm0tMTUuMzQsNS40Ny00OC43LDQyYTgsOCwwLDAsMC0yLjU2LDcuOTFsMTQuODgsNjIuOGEuMzcuMzcsMCwwLDEtLjE3LjQ4Yy0uMTguMTQtLjIzLjExLS4zOCwwbC01NC43Mi0zMy42NWE4LDgsMCwwMDguMzgsMEw2OS4wOSwyMTUuOTRjLS4xNS4wOS0uMTkuMTItLjM4LDBhLjM3LjM3LDAsMDExLS4xNy0uNDhsMTQuODgtNjIuOGE4LDgsMCwwMDItLjU2LTcuOTFsLTQ4LjctNDJjLS4xMi0uMS0uMjMtLjE5LS4xMy0uNTNzLjE4LS4yNy4zMy0uMjlsNjMuOTItNS4xNmE4LDgsMCwwLDEwMyw5MS44NmwyNC42Mi01OS42MWMuMDgtLjE3LjExLS4yNS4zNS0uMjVzLjI3LjA4LjM1LjI1TDE1Myw5MS44NmE4LDgsMCwwLDAsNi43NSw0LjkybDYzLjkyLDUuMTZjLjE1LDAsLjI0LDAsLjMzLjI5UzIyNCwxMDIuNjMsMjIzLjg0LDEwMi43M1oiPjwvcGF0aD48L3N2Zz4%3D&logoColor=FFFCF0&labelColor=100F0F&color=66800B)](https://github.com/btriapitsyn/openchamber/stargazers) [![GitHub release](https://img.shields.io/github/v/release/btriapitsyn/openchamber?style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YxZWNlYyIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxwYXRoIGQ9Ik0xMjgsMTI5LjA5VjIyM2E4LDgsMCwwLDEtMy44NC0xbC04OC00OC4xOGE4LDgsMCwwLDEtNC4xNi03VjgwLjE4YTgsOCwwLDAsMSwuNy0zLjI1WiIgb3BhY2l0eT0iMC4yIj48L3BhdGg%2BPHBhdGggZD0iTTIyMy42OCw2Ni4xNSwxMzUuNjgsMThhMTUuODgsMTUuODgsMCwwLDAtMTUuMzYsMGwtODgsNDguMTdhMTYsMTYsMCwwLDAtOC4zMiwxNHY5NS42NGExNiwxNiwwLDAsMCw4LjMyLDE0bDg4LDQ4LjE3YTE1Ljg4LDE1Ljg4LDAsMCwwLDE1LjM2LDBsODgtNDguMTdhMTYsMTYsMCwwLDAsOC4zMi0xNFY4MC4xOEExNiwxNiwwLDAsMCwyMjMuNjgsNjYuMTVaTTEyOCwzMmw4MC4zNCw0NC0yOS43NywxNi4zLTgwLjM1LTQ0Wk0xMjgsMTIwLDQ3LjY2LDc2bDMzLjktMTguNTYsODAuMzQsNDRaTTQwLDkwbDgwLDQzLjc4djg1Ljc5TDQwLDE3NS44MmptMTc2LDg1Ljc4aDBsLTgwLDQzLjc5VjEzMy44MmwzMi0xNy41MVYxNTJhOCw4LDAsMCwwLDE2LDBWMTA3LjU1TDIxNiw5MHY4NS43N1oiPjwvcGF0aD48L3N2Zz4%3D&logoColor=FFFCF0&labelColor=100F0F&color=205EA6)](https://github.com/btriapitsyn/openchamber/releases/latest) [![Discord](https://img.shields.io/badge/Discord-join.svg?style=flat&labelColor=100F0F&color=8B7EC8&logo=discord&logoColor=FFFCF0)](https://discord.gg/ZYRSdnwwKA) Run [OpenCode](https://opencode.ai) in your browser. Install the CLI, open `localhost:3000`, done. Works on desktop browsers, tablets, and phones as a PWA. Full project overview, screenshots, and all features: [github.com/btriapitsyn/openchamber](https://github.com/btriapitsyn/openchamber) ## Install ```bash curl -fsSL https://raw.githubusercontent.com/btriapitsyn/xcopencodeweb/main/scripts/install.sh | bash ``` Or install manually: `bun add -g xcopencodeweb` (or npm, pnpm, yarn). > **Prerequisites:** [OpenCode CLI](https://opencode.ai) installed, Node.js 20+. ## Standalone Executable (No dependencies) Download the standalone `.exe` file - no installation required, no Node.js needed. > **File size: ~150MB** (single file, self-contained with Bun runtime) ```bash ./XCOpenCodeWeb.exe # Start on port 3000 ./XCOpenCodeWeb.exe --port 8080 # Custom port ``` ## Usage ```bash xcopencodeweb # Start on port 3000 xcopencodeweb --port 8080 # Custom port xcopencodeweb --ui-password secret # Password-protect xcopencodeweb stop # Stop server xcopencodeweb update # Update to latest ```
Connect to external OpenCode server ```bash OPENCODE_PORT=4096 OPENCODE_SKIP_START=true xcopencodeweb OPENCODE_HOST=https://myhost:4096 OPENCODE_SKIP_START=true xcopencodeweb ``` | Variable | Description | |----------|-------------| | `OPENCODE_HOST` | Full base URL of external server (overrides `OPENCODE_PORT`) | | `OPENCODE_PORT` | Port of external server | | `OPENCODE_SKIP_START` | Skip starting embedded OpenCode server |
Docker ```bash docker compose up -d # Available at http://localhost:3000 ``` **Optional env vars:** ```yaml environment: UI_PASSWORD: your_secure_password ``` **Data directory:** mount `data/` for persistent storage. Ensure permissions: ```bash mkdir -p data/xcopencodeweb data/opencode/share data/opencode/config data/ssh chown -R 1000:1000 data/ ```
Background & daemon mode ```bash xcopencodeweb --daemon # Run in background xcopencodeweb stop # Stop background server ```
## What makes the web version special - **Mobile-first PWA** - optimized chat controls, keyboard-safe layouts, drag-to-reorder projects - **Background notifications** - know when your agent finishes, even from another tab - **Self-update** - update and restart from the UI, server settings stay intact - **Cross-tab tracking** - session activity stays in sync across browser tabs Plus everything from the shared XCOpenCodeWeb UI: branchable timeline, Git sidebar, terminal, voice mode, and more. ## License MIT