Host dockingstation (25+ AI coding agents) as cloud instances on Contree.
Turn the local dockingstation container into a scalable cloud platform where teams can spin up isolated instances of all 25+ AI tools instantly. No local installation needed.
Dockingstation is a Docker container bundling 22+ AI coding agents (Claude Code, GitHub Copilot, Gemini, Aider, etc.). This project makes it cloud-native:
Local dockingstation container
β
Push to Docker registry
β
dockingstation-cloud API (Cloudflare Workers)
β
Spin up cloud instances via Contree
β
Access dockingstation in browser
- β Instant cloud instances β Create a dockingstation instance in <30s
- β Isolated environments β Each user gets their own VM sandbox
- β No setup β Access from browser, no local installation
- β 25+ AI tools β All bundled in one container
- β Team-ready β Share instances, manage permissions
- β Cost-effective β Pay only for running instances
βββββββββββββββββββββββββββββββββββ
β User's Browser β
β (http://dockingstation.cloud) β
ββββββββββββββββββ¬βββββββββββββββββ
β
βββββββββββββββββvββββββββββββββββββ
β Cloudflare Worker (Control Plane)β
β β’ Instance CRUD β
β β’ Auth + API keys β
β β’ Contree orchestration β
ββββββββββββββββββ¬ββββββββββββββββββ
β
βββββββββββββββββvββββββββββββββββββ
β Contree (Compute) β
β β’ Provisions MicroVMs β
β β’ Manages snapshots β
ββββββββββββββββββ¬ββββββββββββββββββ
β
βββββββββββββββββvββββββββββββββββββ
β Dockingstation Container β
β ββ Claude Code β
β ββ GitHub Copilot β
β ββ Gemini CLI β
β ββ Aider β
β ββ 18 more AI agents β
β ββ VS Code Web β
β ββ Linux Desktop (noVNC) β
βββββββββββββββββββββββββββββββββββ
dockingstation-cloud/
βββ apps/
β βββ worker/ # Cloudflare Worker API
β βββ src/
β β βββ index.ts # Hono app + routes
β β βββ routes/
β β β βββ instances.ts # POST/GET/DELETE instances
β β β βββ health.ts # Health check
β β βββ middleware/
β β β βββ auth.ts # JWT/API key auth
β β βββ lib/
β β β βββ contree-client.ts # Contree API calls
β β β βββ provisioner.ts # Instance provisioning
β β βββ globals.d.ts
β βββ wrangler.toml
βββ packages/
β βββ shared/
β β βββ src/
β β βββ instance.ts # Instance types
β β βββ api.ts # API response wrappers
β β βββ index.ts
β βββ contree-client/
β β βββ src/
β β βββ client.ts # Contree API client
β β βββ types.ts
β β βββ index.ts
β βββ cli/
β βββ src/
β βββ commands/
β β βββ create.ts # Create instance
β β βββ list.ts # List instances
β β βββ delete.ts # Delete instance
β βββ index.ts
β βββ cli.ts
βββ Dockerfile.dockingstation # Build dockingstation for Contree
βββ package.json
βββ pnpm-workspace.yaml
βββ turbo.json
βββ tsconfig.json
βββ README.md
- Node.js 18+, pnpm
- Contree account + API key
- Docker (to build dockingstation image)
git clone https://github.com/opencolin/dockingstation-cloud.git
cd dockingstation-cloud
pnpm install# Build from source (or pull pre-built)
docker build -f Dockerfile.dockingstation -t dockingstation:cloud .
# Tag and push to registry
docker tag dockingstation:cloud docker.io/opencolin/dockingstation:cloud
docker push docker.io/opencolin/dockingstation:cloudcd apps/worker
echo "CONTREE_API_KEY=your_key_here" > .dev.vars
echo "CONTREE_BASE_URL=https://api.contree.co" >> .dev.varscd apps/worker
pnpm devVisit http://localhost:8787 (Worker API) and http://localhost:8787/api/health to test.
curl -X POST http://localhost:8787/api/instances \
-H 'Authorization: Bearer demo_token' \
-H 'Content-Type: application/json' \
-d '{}'Response:
{
"ok": true,
"data": {
"id": "instance_abc123",
"status": "provisioning",
"webUrl": "https://dockingstation.cloud/i/instance_abc123",
"createdAt": "2026-04-19T10:30:45.123Z"
}
}Once status: "running", visit the web URL.
POST /api/instances
curl -X POST http://localhost:8787/api/instances \
-H 'Authorization: Bearer <token>'GET /api/instances
curl http://localhost:8787/api/instances \
-H 'Authorization: Bearer <token>'GET /api/instances/:id
curl http://localhost:8787/api/instances/instance_abc123 \
-H 'Authorization: Bearer <token>'DELETE /api/instances/:id
curl -X DELETE http://localhost:8787/api/instances/instance_abc123 \
-H 'Authorization: Bearer <token>'Manage instances from the terminal:
# Install globally (once built)
npm install -g @dockingstation-cloud/cli
# Create instance
dockingstation create
# List instances
dockingstation list
# Get instance details
dockingstation get instance_abc123
# Delete instance
dockingstation delete instance_abc123
# Open in browser
dockingstation open instance_abc123cd apps/worker
pnpm dev# Build
pnpm turbo build
# Deploy to Cloudflare
cd apps/worker
wrangler deployRequires:
- Cloudflare account + API token
- Wrangler configured (
wrangler login) - Contree API key set in Cloudflare secrets
| Feature | opencode.cloud | dockingstation-cloud |
|---|---|---|
| Base image | opencode server | dockingstation container |
| Primary tool | opencode (1 agent) | 22+ AI agents |
| Use case | AI-assisted coding | Multi-tool evaluation |
| Branching | Yes (explore approaches) | Optional (future) |
| Architecture | Sessions + CRDT collab | Instances + isolated envs |
Hono app setup:
import { Hono } from 'hono';
import { healthRoute } from './routes/health';
import { instancesRoute } from './routes/instances';
type Env = {
CONTREE_API_KEY: string;
CONTREE_BASE_URL: string;
KV: KVNamespace;
};
const app = new Hono<{ Bindings: Env }>();
app.get('/api/health', healthRoute);
app.route('/api/instances', instancesRoute);
export default app;Type definitions:
export interface Instance {
id: string;
userId: string;
status: 'provisioning' | 'running' | 'paused' | 'destroyed';
contreeInstanceId: string;
webUrl: string;
createdAt: string;
updatedAt: string;
}Contree orchestration:
export async function provisionInstance(
contreeClient: ContreeClient,
userId: string
): Promise<Instance> {
// 1. Import dockingstation image
// 2. Spin up MicroVM
// 3. Start dockingstation server
// 4. Return instance metadata
}- β Basic instance CRUD
- β Contree integration
- β API endpoints
- β³ CLI tool
- Web dashboard (list, create, delete instances)
- User authentication (OAuth)
- API keys management
- Instance sharing
- Branching/snapshots (per instance)
- Collaborative instances
- Team management
- Billing/usage tracking
All requests require authentication:
# JWT token
-H 'Authorization: Bearer eyJ...'
# API key
-H 'Authorization: Bearer ds_live_...'Sandboxes are isolated per user via Contree MicroVM isolation.
| Component | Cost |
|---|---|
| Instance creation | $0.10 |
| Per hour running | $0.50 |
| Storage per GB/month | $0.01 |
Billed only while running.
See CONTRIBUTING.md (coming soon).
MIT
Questions? Open an issue on GitHub.
Want to contribute? Fork + submit PR.
Found a bug? Report it with steps to reproduce.