Deployment

One instance: **web + API + Postgres**. Desktop is a surface that talks to it. A single user still signs in.

HowWhere
Composedeploy/local./start.sh
Clouddeploy/cloud — same three services
Orgsdeploy/saas — overlay on that compose

Ports are 3000 (web) and 8080 (API). Postgres stays on the compose network. Override ports in .env or docker-compose.override.yml. Images are gethamster/doso-api and gethamster/doso-web, built on merge to main.

Compose#

1curl -fsSL https://doso.sh/install | bash2# or, from a clone: ./start.sh

Open http://localhost:3000 and create the first account.

Desktop: Settings → Storage → Connect to serverhttp://127.0.0.1:3000.

Need HTTPS? Put your own proxy in front, or use a cloud recipe. Do not run a separate Doso “VPS” stack.

Cloud#

Same three services. The platform terminates TLS. Recipes: deploy/cloud/.

Orgs#

deploy/saas adds tenant-runtime on top of the compose file. Identity stays Better Auth.

Auth#

Compose and cloud both use Better Auth + JWKS. DOSO_AUTH_MODE=local is only for crate tests and the Desktop embedded fallback.