Skip to main content
Run the full Manifest stack with Docker. No Node.js required — just Docker.

Quick start

1

Download the compose file

curl -O https://raw.githubusercontent.com/mnfst/manifest/main/docker-compose.yml
2

Start the services

docker compose up -d
This starts Manifest and a PostgreSQL database.
3

Open the dashboard

Go to http://localhost:3001 and log in with the demo account:
  • Email: admin@manifest.build
  • Password: manifest
4

Connect a provider

Open the Routing page and add an LLM provider (OpenAI, Anthropic, Gemini, etc.) with your API key.
5

Connect OpenClaw

In the agent settings, copy the setup command and run it in your terminal:
openclaw config set plugins.entries.manifest-model-router.config.devMode true
openclaw config set plugins.entries.manifest-model-router.config.endpoint http://localhost:3001
openclaw gateway restart

Verify

Send a message through OpenClaw. It should appear in the Manifest dashboard within a few seconds.
curl -X POST http://localhost:3001/v1/chat/completions \
  -H "Authorization: Bearer YOUR_MNFST_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "manifest/auto", "messages": [{"role": "user", "content": "Hello"}]}'

Custom port

To run on a different port (e.g. 8080), update both the port mapping and BETTER_AUTH_URL in docker-compose.yml:
ports:
  - "8080:3001"
environment:
  - BETTER_AUTH_URL=http://localhost:8080
If you see an “Invalid origin” error on the login page, BETTER_AUTH_URL doesn’t match the port you’re accessing the dashboard on.

Standalone (bring your own PostgreSQL)

If you already have a PostgreSQL instance:
docker run -d \
  -p 3001:3001 \
  -e DATABASE_URL=postgresql://user:pass@host:5432/manifest \
  -e BETTER_AUTH_SECRET=$(openssl rand -hex 32) \
  -e BETTER_AUTH_URL=http://localhost:3001 \
  -e NODE_ENV=development \
  -e MANIFEST_TRUST_LAN=true \
  manifestdotbuild/manifest
NODE_ENV=development enables automatic database migrations on startup.

Environment variables

VariableRequiredDefaultDescription
DATABASE_URLYesPostgreSQL connection string
BETTER_AUTH_SECRETYesSession signing secret (min 32 chars). Generate with openssl rand -hex 32
BETTER_AUTH_URLNohttp://localhost:3001Public URL of the app. Set when using a custom port
PORTNo3001Internal server port
NODE_ENVNoproductionSet development for auto-migrations
SEED_DATANofalseSeed demo data on startup
MANIFEST_TRUST_LANNofalseTrust private network IPs for auth (required for Docker)

Stop and clean up

docker compose down       # Stop services (keeps data)
docker compose down -v    # Stop and delete all data

Docker Hub

The image is available at manifestdotbuild/manifest on Docker Hub.