# {{capProjectName}} — MariaDB backend env. Copy to `.env` and adjust. # ── Environment ──────────────────────────────────────────────────────── # # DECLARE IT. Every `voltro db …` / `voltro migrate` invocation resolves an # UNSET `NODE_ENV` to `production` — the same way `voltro serve` and `voltro # start` do — so a bare `pnpm migrate` with no NODE_ENV refuses rather than # applying an un-reviewed diff to what might be a production database. It also # decides which `_voltro_*` bookkeeping tables the command declares, and a # migration command that resolves it differently from the serving process # declares a DIFFERENT schema. # # `voltro dev` declares `development` for itself and needs nothing from here; # this line is what makes the explicit schema commands work locally. NODE_ENV=development # ── Database (MariaDB + binlog CDC) ──────────────────────────────────── DB_DIALECT=mariadb DB_URL=mysql://app:app@localhost:3307/{{projectNameSnake}} # Push-based real-time across replicas via the binlog reader. Requires the # DB to run with binlog_format=ROW + binlog_row_image=FULL (the compose # baseline sets these) and a user with REPLICATION SLAVE, REPLICATION # CLIENT. Set CDC=0 to fall back to single-process inline emit. CDC=1 # ── File storage (A2) — MinIO locally, S3 in prod ────────────────────── STORAGE_PROVIDER=minio S3_ENDPOINT=http://localhost:9000 S3_BUCKET={{projectNameSnake}} S3_ACCESS_KEY_ID=minioadmin S3_SECRET_ACCESS_KEY=minioadmin S3_FORCE_PATH_STYLE=1 # ── AI runtime (A3) — set a real provider + key to enable agents ─────── AI_PROVIDER=mock # AI_PROVIDER=anthropic # AI_MODEL=claude-opus-4-7 # ANTHROPIC_API_KEY= # Session signing secret — NO VALUE SHIPS HERE ON PURPOSE. # # `voltro dev` mints a unique one for this project into a gitignored # .env.local on first boot, so local development needs nothing from you. # A shipped placeholder would be a signing key published to everyone who # downloads this template, making every session in your deployment forgeable. # # Your DEPLOYMENT needs its own — `voltro serve` refuses to start without it: # voltro secret generate session VOLTRO_SESSION_SECRET= # ── Cluster (K8s, >1 replica) ────────────────────────────────────────── # The workflow runner must advertise a routable host so a workflow can # resume on another pod. Inject POD_IP via the downward API in prod # (fieldRef: status.podIP); leave unset for single-node local dev. # VOLTRO_WORKFLOW_RUNNER_HOST=