This guide is for running Latitude locally for development. To self-host a production instance, see the Deployment guide instead.
Prerequisites
- Node.js 25 and Python 3.13. If you use mise,
mise installprovisions both. - pnpm 10. Enable it with
corepack enable. - Docker. Docker Desktop or any Docker Engine, used for the infrastructure containers.
- goose — the ClickHouse migration tool. Install with
brew install goose(or see goose releases on other platforms). - uv — the Python package manager for the evaluation optimizer runtime. Install with
brew install uv(or see the uv docs).
Local setup
1
Install dependencies
prepare script.2
Create your environment files
The Then, set
.env.example file carries working local defaults and boots the whole stack API key-free.NODE_ENV=test in .env.test (.env.development already defaults to development). And point LAT_STORAGE_FS_ROOT (in both environments) at an absolute path for the local object store (the default is /tmp/latitude, created automatically).3
Build the workspace
4
Start the infrastructure
docker-compose.yml is for local infrastructure-only: Postgres (with pgvector extension), ClickHouse, two Redis instances (cache + BullMQ), Mailpit (local SMTP), and self-hosted Temporal instance and its UI.5
Run the migrations
6
Seed initial data
7
Start the services
Pick whichever you prefer — all run with hot reload:
8
Sign in locally
Open http://localhost:3000, regsiter or enter a seeded user (
owner@acme.com or admin@acme.com), and click the magic link Mailpit captures at http://localhost:8025.Local services
Once everything is running, these are the local endpoints you can access:Contributing workflow
The pre-commit hook runspnpm check, pnpm typecheck, and pnpm knip. It’s configured automatically on pnpm install; to (re)configure it in an existing clone run pnpm prepare.
Before opening a pull requests, run the same checks CI runs:
You can scope any task to a single package with
--filter, and pass flags after --:
AI features
The stack boots and core observability (ingest + trace viewing) works without API keys, and the full test suite is guaranteed to pass with no keys set. However, there are AI-dependent features that you must add the relevant keys to your environment file to enable them:
Every provider and model is selectable per feature through environment variables — see the AI configuration reference.
What’s next
Contributing
How to propose changes, our PR conventions, and the Code of Conduct.
Start tracing
Point an application at your local instance and watch traces arrive.