If something doesn't work, start here. Most issues fall into a handful of categories.
Another process is bound to the port Micracode wants. Either stop that process or change ports — see "Changing ports" in Configuration.
Quick check on macOS / Linux:
lsof -i :3000
lsof -i :8000(Applies when running from source with bun run dev — in the packaged
desktop app the core is always running in-process.)
Almost always one of:
- The core isn't running. Check the terminal you started
bun run devin for core logs. Re-runbun run dev:coreon its own to see startup errors. NEXT_PUBLIC_API_BASE_URLdoesn't match the core's port. The defaults arehttp://localhost:8000and127.0.0.1:8000, which the browser treats as the same origin.- No API key is configured. See the next section.
Open the browser devtools network tab, find the failing request to
/v1/..., and look at the response — it usually says exactly what's
wrong.
You picked a model for a provider whose key isn't set. Two options:
- Desktop app: open Settings and paste the key.
- From source: add the key to your repo-root
.env(OPENAI_API_KEY=...,GOOGLE_API_KEY=..., orANTHROPIC_API_KEY=...) and restart the core.
Verify what the core thinks is available:
curl http://127.0.0.1:8000/v1/modelsThe available: true/false field per provider is the source of truth.
If bun install or bun run dev complains about Node, you're on the
wrong version. From the repo root:
nvm use # picks up .nvmrc -> 22.18.0If nvm says it isn't installed, run nvm install 22.18.0 first.
The core only reads env vars at startup. Restart it (stop bun run dev
with Ctrl-C and start it again, or restart just bun run dev:core).
For the web app, NEXT_PUBLIC_* vars are baked in at build/dev start —
also a restart.
Keys entered through the desktop app's Settings panel take effect
immediately (they're written to ~/.micracode/auth.json and applied to
the running core).
Check the project folder still exists under ~/opener-apps/ (or
wherever you pointed OPENER_APPS_DIR). The workspace reads
everything from disk, so:
- Folder deleted/moved → project is gone from the UI too.
.micracode/project.jsondeleted or corrupted → the project won't load. Restore from a backup if you have one..micracode/prompts.jsonldeleted → source files are still fine, but chat history is lost. Future turns will work; they just start fresh.
The web app sends strict cross-origin headers
(Cross-Origin-Embedder-Policy: require-corp,
Cross-Origin-Opener-Policy: same-origin) that the in-browser
sandbox needs.
If you're loading external images, fonts, or scripts in your generated
app and they fail, the upstream needs to send
Cross-Origin-Resource-Policy: cross-origin and you need
crossOrigin="anonymous" on the tag. For most third-party assets the
fix is to host them locally inside the project instead.
Check the per-package READMEs (apps/core) and the project's issue tracker on GitHub.