Installation
Prerequisites
Section titled “Prerequisites”| Requirement | Version | Notes |
|---|---|---|
| Node.js | 24+ | Required for native fetch, WebSocket, and module features |
| pnpm | 10+ | Workspace manager. Install via corepack enable |
| Git | 2.30+ | For cloning the repo |
| Docker | 24+ | Optional. Required only for sandbox execution |
Clone and install
Section titled “Clone and install”git clone https://github.com/openmotoko/openmotoko.gitcd openmotokocorepack enablepnpm installConfigure environment
Section titled “Configure environment”Copy the example env file and fill in your API keys:
cp docker/.env.example .envRequired variables:
| Variable | Purpose |
|---|---|
OPENMOTOKO_PASSWORD | Login password for the web UI |
| At least one LLM key | ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_AI_API_KEY |
See Environment Variables for the full reference.
Build all packages
Section titled “Build all packages”pnpm buildThis compiles every package in the monorepo in dependency order.
Start development
Section titled “Start development”pnpm devThis starts both the API server (port 3457) and the web UI (port 5173) in parallel.
You can also start them individually:
pnpm dev:apipnpm dev:webVerify the installation
Section titled “Verify the installation”Open http://localhost:5173 in your browser. Log in with the password you set in OPENMOTOKO_PASSWORD.
Check the API health endpoint:
curl http://localhost:3457/api/healthCommon problems
Section titled “Common problems”| Problem | Cause | Fix |
|---|---|---|
EACCES on install | Permissions issue | Run corepack enable as admin, or use volta |
| Port 3457 in use | Another process on that port | Set OPENMOTOKO_PORT to a different port |
| No models available | Missing API keys | Add at least one LLM provider key to .env |
| Docker sandbox fails | Docker not running | Start Docker Desktop or the Docker daemon |
sharp build error | Missing native deps | Run pnpm approve-builds then pnpm install again |
| WebSocket disconnects | CORS mismatch | Set OPENMOTOKO_CORS_ORIGIN to your frontend URL |