Skip to main content
This page is for contributors who want to develop Roomote itself from a local checkout. If you want to operate Roomote for a team, start with Self-hosting instead. The full contributor walkthrough lives in the repository LOCAL_DEVELOPMENT.md.

Prerequisites

  • Docker Engine with Compose — for the Postgres, Redis, and artifact storage containers (Docker Desktop on macOS also works). x86_64 and arm64 are both supported; on Apple Silicon the task worker builds and runs natively, with no amd64 emulation.
  • mise — manages the repository toolchain (Node.js, pnpm, and friends).
  • OpenCode CLI — provides the opencode binary used to run tasks (npm install -g opencode-ai).
  • A public HTTPS URL — set R_PUBLIC_URL to a URL that reaches local port 13000. An ngrok domain, Cloudflare Tunnel, Tailscale Funnel, or your own domain works. Install ngrok only when you use an ngrok domain.

Install and run

pnpm dev starts all services locally under PM2 supervision: it prepares service code, resolves your public callback URL, starts Postgres, Redis, and MinIO if needed, builds the local worker release archive, and starts the Roomote services. The public development edge also proxies signed artifact-storage paths to local MinIO. Hosted compute providers such as E2B, Modal, Daytona, and Box can therefore upload screenshots and other artifacts without direct access to your machine’s localhost ports. An explicit S3_PRESIGN_ENDPOINT continues to take precedence when you use separate object storage. pnpm dev requires the public HTTPS URL even when you only plan to use the dashboard, because the development stack resolves callback and artifact URLs during startup. Useful process-management commands:

Validation

When to use self-hosting instead

Use Self-hosting when you want a stable deployment for a team, want published images instead of a local checkout, or do not plan to edit Roomote code. Local development is intentionally more moving parts because it runs the development services, queues, workers, and callback plumbing from source.