Database and storage

Embedded or external PostgreSQL, where the data directory is, and the secrets that go with each mode.

DataGripe keeps its own state — accounts, projects, documents, domains, history — in PostgreSQL. That is separate from the datasources you connect to, which it never writes into unless you ask it to.

One variable decides the shape.

Default
APP_DATABASE_URL — A PostgreSQL for DataGripe's own state. Setting it selects external mode: accounts on, and the app applies pending migrations at startup.
DATABASE_MODE derived embedded or external, forced. Without it, external when APP_DATABASE_URL is set and embedded otherwise. Set it to run embedded while a stray APP_DATABASE_URL is still in the environment.

Embedded mode

No database to install: the server starts and manages a PostgreSQL cluster of its own, migrates it at startup, and generates the secrets once beside the data directory. There is nothing to configure at all.

Default
EMBEDDED_PG_DATA_DIR ./data/pg Where the cluster lives.
EMBEDDED_PG_PORT 0 The port it listens on. 0 picks a free one at startup, which is what you want unless something else has to reach it.
DATAGRIPE_DATA_DIR per-OS Read by the packaged launcher and the container image, not from a checkout: it puts the cluster, the git checkouts and the generated secrets under one path. ~/.local/share/datagripe by default, /data in the image.

External mode

A PostgreSQL you run. Both secrets are required, because there is no data directory the server owns to generate them into.

Default
CONNECTION_ENCRYPTION_KEY — Encrypts datasource passwords at rest. Losing it orphans every stored password — see Configuration.
SESSION_SECRET — Signs session cookies. Regenerating it signs everyone out and does nothing worse.
MIGRATIONS_DIR the checkout's Directory of migration .sql files. A packaged build ships them beside the bundled server and points here; from a checkout you should not need to set it.

The app checks schema_migrations on every startup, in embedded and external database modes, and applies missing files before accepting HTTP or WebSocket connections. Each migration and its history row commit together. A PostgreSQL advisory lock serializes concurrent app starts and manual runners; a failed migration rolls back and stops startup. The app database account must have permission to apply the schema changes. See upgrading.

This page as Markdown, for an agent or a diff.