codebay
v0.13.0
Published
Web UI for spinning up isolated devcontainer instances from any local folder, each with a browser-based VS Code (code-server) — built for parallel Claude Code workflows.
Maintainers
Readme
Codebay
Codebay - the devcontainer manager — a web UI for spinning up isolated devcontainer instances from any local folder or Git repo URL, each running Claude Code in a browser-based VS Code (code-server).
Quick start
Requires Bun >= 1.3.13 (Node.js is not supported) and a running Docker daemon (Docker Desktop, Colima, OrbStack…). macOS and Linux are supported; Windows is untested.
bunx codebay@latestThe UI opens at http://localhost:6969. State (SQLite DB + per-instance workspace copies) lives in ~/.codebay.
Configuration
PORT— server port (default6969)DATA_DIR— where state lives (default~/.codebay)DOCKER_HOST— Docker socket/URL (defaults to your active Docker context)HOST— bind address (default127.0.0.1). Set0.0.0.0to reach codebay from other machines; your instances' forwarded app ports are then published on all interfaces too. Each container's code-server port stays loopback-only regardless — it runs without a password of its own and is reached through the Basic-Auth-gated/p/:id/proxy instead. Existing instances need a Restart to pick up the new binding.PUBLIC_ORIGIN— the origin you actually load codebay from (defaulthttp://localhost:<PORT>). Every form POST — creating an instance, restarting one, saving settings — is checked against it, so reaching the UI at any other address (a LAN IP, a hostname, or a reverse proxy / tunnel that terminates TLS) makes those actions fail with a403 Cross-site POST form submissions are forbiddenuntil you set this. Give the exact scheme + host + port your browser shows, with no trailing slash —PUBLIC_ORIGIN=http://192.168.1.50:6969orPUBLIC_ORIGIN=https://codebay.example.com. Behind a TLS-terminating proxy this is the publichttps://URL, not the loopback address the proxy forwards to.TRUSTED_ORIGINS— comma-separated extra origins accepted alongsidePUBLIC_ORIGIN, for when the UI is legitimately reachable at more than one address (e.g.http://localhost:6969,http://192.168.1.50:6969)BASIC_AUTH_PASSWORD— enables HTTP Basic Auth over the whole UI (disabled when unset); required if you bind beyond loopback withHOST=0.0.0.0CODEBAY_CLAUDE_CODE_TOKEN— Claude Code token to inject into every container (e.g. fromclaude setup-token) instead of discovering the host's credentialsCODEBAY_GITHUB_TOKEN— GitHub token to inject instead of readinggh auth tokenfrom the hostDISABLE_OPEN_BROWSER=1— skip opening the browser on startup
Troubleshooting
403 Cross-site POST form submissions are forbiddenwhen clicking anything that saves — codebay is being reached at an origin other thanhttp://localhost:<PORT>. SetPUBLIC_ORIGINto the URL in your browser's address bar and restart (see Configuration).warn: incorrect peer dependency "[email protected]"on startup — harmless. It comes fromsvelte-french-toast, whose published peer range predates Svelte 5; the library works correctly on Svelte 5. Nothing to fix.
Development
bun install
bun run dev # dev server, local ./.codebay DATA_DIR, no browser launch
bun run checks # format + typecheck + testsThe repo also ships a minimal Bun devcontainer (.devcontainer/) for a containerized setup. New to authoring devcontainers? See the general Devcontainer guide.
License
MIT
