opencode-cloud
A production-ready toolkit for deploying opencode as a persistent cloud service.
Quick install (cargo)
Features
- Cross-platform CLI (
opencode-cloud/occ) - Docker container management
- Service lifecycle commands (start, stop, status, logs)
- Platform service integration (systemd/launchd)
- XDG-compliant configuration
- Singleton enforcement (one instance per host)
Requirements
- Rust 1.85+ - Install via rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Docker - For running the opencode container
Installation
Via cargo (recommended)
From source
Usage
# Show version
# Start the service (builds image on first run)
# Start on a custom port
# Start and open browser
# Check service status
# View logs
# Follow logs in real-time
# Stop the service
# Restart the service
# Install as a system service (starts on login/boot)
# Uninstall the system service
# View configuration
Rebuilding the Docker Image
When developing locally or after updating opencode-cloud, you may need to rebuild the Docker image to pick up changes in the embedded Dockerfile:
# Rebuild using Docker cache (fast - only rebuilds changed layers)
# Rebuild from scratch without cache (slow - for troubleshooting)
--cached-rebuild (recommended for most cases):
- Uses Docker layer cache for fast rebuilds
- Only rebuilds layers that changed (e.g., if only the CMD changed, it's nearly instant)
- Stops and removes any existing container before rebuilding
--full-rebuild (for troubleshooting):
- Ignores Docker cache and rebuilds everything from scratch
- Takes 10-15 minutes but guarantees a completely fresh image
- Use when cached rebuild doesn't fix issues
When to rebuild:
- After pulling updates to opencode-cloud → use
--cached-rebuild - When modifying the Dockerfile during development → use
--cached-rebuild - When the container fails to start due to image issues → try
--cached-rebuildfirst, then--full-rebuild - When you want a completely fresh environment → use
--full-rebuild
Configuration
Configuration is stored at:
- Linux/macOS:
~/.config/opencode-cloud/config.json
Data (PID files, etc.) is stored at:
- Linux/macOS:
~/.local/share/opencode-cloud/
Development
# Install dependencies
# Configure git hooks (once after cloning)
# Build everything
# Compile and run occ (arguments automatically get passed to the binary)
# Run tests
# Format and lint
Note: The git hooks automatically sync
README.mdto npm package directories on commit.
Architecture
This is a monorepo with:
packages/core- Rust core librarypackages/cli-rust- Rust CLI binary (recommended)packages/cli-node- Node.js CLI (deprecated, directs users to cargo install)
Cargo.toml Sync Requirement
The packages/core/Cargo.toml file must use explicit values rather than workspace = true references.
When updating package metadata (version, edition, rust-version, etc.), keep both files in sync:
Cargo.toml(workspace root)packages/core/Cargo.toml
Use scripts/set-all-versions.sh <version> to update versions across all files automatically.
License
MIT