LAT_*. A few infrastructure variables (POSTGRES_*, CLICKHOUSE_*) are read directly by the bundled database containers. The committed .env.example is the canonical starting point — it documents both local development and production: copy it to .env.production and apply the values marked # For production on each line.
Each variable is either required (the deployment won’t boot or function without it) or optional — it has a safe default, or it unlocks a feature that stays disabled until you set it (SSO, AI, email).
Secrets
Latitude needs two secrets, generated uniquely per deployment — never reuse the example values:
Generate each with:
POSTGRES_PASSWORD_*, CLICKHOUSE_PASSWORD…) too!
AI
The stack boots and core observability (ingest + trace viewing) works without API keys — AI-dependent features stay disabled, or fail, until you add the relevant provider key: Every internal AI capability is configurable throughLAT_AI_* environment variables. With nothing set, the defaults uses Amazon Bedrock for generation and Voyage AI for embeddings and reranking.
Providers
You have to set the credentials for whichever providers you end up using:Generation
Each feature resolves every setting through a three-tier fallback:- Per-feature variable
LAT_AI_<FEATURE>_<SETTING> - Global variable
LAT_AI_GENERATION_<SETTING> - Built-in default
minimax.minimax-m2.5
<SETTING>:
PROVIDERMODELREASONING(none/default/minimal/low/medium/high/xhigh)TEMPERATUREMAX_TOKENS
Embeddings
Embeddings are configured globally throughLAT_AI_EMBEDDING_PROVIDER and LAT_AI_EMBEDDING_MODEL. It defaults to voyage / voyage-4-large, and powers semantic trace/signal search, search highlights, and signal clustering. Without a working embeddings provider, search falls back to lexical.
Once an embedding model is used on a live deployment, changing it is a difficult task. Different models produce incompatible vector spaces and existing data is never re-embedded, so switching breaks semantic search, signal matching, and clustering.
The model must also emit 2048-dimensional vectors — the dimension is fixed by the database schema and is not configurable.
Reranking
Reranking is configured globally throughLAT_AI_RERANKING_PROVIDER and LAT_AI_RERANKING_MODEL. It defaults to voyage / rerank-2.5, and refines signal-discovery candidate matching. Reranking is optional — when unavailable, discovery falls back to embedding-order matching.
SSO
By default users sign in with email magic links. Add an OAuth provider to enable social sign-in:Integrations
Optional, and cleanly no-op when unset:Infrastructure
These wire Latitude to its datastores, depending on your chosen deployment option you can either point them to the bundled infrastructure services or bring your own infrastructure.Application
Postgres
Primary store for projects, users, and metadata. Requires thevector (pgvector) extension.
ClickHouse
OLAP store for spans and telemetry, in a dedicated database.Redis
Two Redis roles — a cache and the BullMQ job queue (same server or separate). Latitude namespaces all keys underlatitude:, so it can share an instance with other apps.
Temporal
Workflow engine for durable background processes.Object storage
Stores ingested payloads, datasets, and exports — shared by all services. Pick one of two drivers withLAT_STORAGE_DRIVER: fs writes to the local filesystem (a path or volume shared by every service), or s3 points at any S3-compatible service — AWS S3, SeaweedFS, MinIO, or any other managed or self-hosted store.