Skip to main content

Single box

The default deployment. One machine runs the whole stack: the Postgres database, the api, the web frontend, and the bundled Caddy proxy that terminates HTTPS. This is what Install walks through, and what the setup builder generates without any extra changes.

What runs

The docker-compose.yml defines four services, all pulled as prebuilt images from the registry:

  • db: Postgres, with its data under ./data/db.
  • api: the backend.
  • web: the frontend, bound to loopback and fronted by Caddy.
  • caddy: HTTPS, active when COMPOSE_PROFILES=caddy (the builder sets this for every mode except plain HTTP and host-run Tailscale).

Only Caddy publishes ports on the LAN (80 and 443). Everything else talks over the internal compose network. All state lives in bind-mounted folders under ./data/.

Sizing

A used mini PC or a small-form-factor desktop with 8 to 16GB of RAM and an SSD has plenty of headroom for an instance with several active workspaces. At runtime the stack is a Node process, Postgres, and a proxy; the built-in AI features call out to whatever provider you connect rather than computing on the box. The full sizing notes are in Self-hosting.

Day two

Updates, backups, and the common failure modes are in Operating. The short version: copy the ./data/ tree for a full backup, and docker compose pull && docker compose up -d to update.

If your box already has a reverse proxy or a Postgres you would rather reuse, see behind a reverse proxy and external database.