Skip to content

Manual Setup

This is the development workflow: run the core engine and dashboard directly with bun, against a local TimescaleDB container. For a containerized production install, see Docker Compose.

Terminal window
bun install

Run a local TimescaleDB via Docker Compose:

Terminal window
bun run db:start

This uses docker-compose.db.yml, which runs timescale/timescaledb:latest-pg17 and exposes it on localhost:5432.

You can manage the container with bun run db:watch (tail logs), bun run db:stop, and bun run db:down.

Alternatively, point at any existing PostgreSQL + TimescaleDB instance by setting DATABASE_URL in apps/server/.env.

Set connection details in apps/server/.env. The only truly required server variables are DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL, and CORS_ORIGIN; everything else has a sensible default. See the full Environment Variables reference.

4. Apply the schema and TimescaleDB objects

Section titled “4. Apply the schema and TimescaleDB objects”
Terminal window
bun run db:migrate

Runs the journaled migration runner: the Drizzle schema plus the TimescaleDB pipeline (hypertable, continuous-aggregate rollups, policies) — the same thing production deployments run before starting the server. For quick local schema prototyping, bun run db:push + bun run db:timescale still work, but anything that ships must be a generated migration (bun run db:generate, see packages/db/AGENTS.md).

Terminal window
bun run dev

This starts the core engine, the web dashboard, and tails the database together. To run a single app, use bun run dev:web or bun run dev:server.

On first launch you’ll go through onboarding to create the admin account.

See the Scripts reference for the full list of workspace commands.