Environment variables
Each app's environment lives in the Env tab as managed key → value rows. The rows are the source of truth; Pyvolt generates a .env file on your server from them and restarts your app so changes take effect.
Managing rows
- Add / edit / delete rows inline. Saving writes the file to
/home/pyvolt/sites/<domain>/.envand restarts the app service. - Secrets are masked in the UI. Keys that look secret (
SECRET_KEY,*_API_KEY,*_TOKEN,*_PASSWORD,*_DSN) are masked automatically; you can toggle any row. - Bulk import - paste an existing
.envand preview the merge before saving. Export serialises your rows back to.envtext.
It's all scriptable from the terminal too - for example, upsert a couple of variables:
pyvolt env myapp.com set SECRET_KEY=xxxx DEBUG=FalseSee the CLI reference for the full set: list, get, set and rm.
Platform-managed variables
Pyvolt injects a few variables itself - they're shown read-only and can't be overridden by your rows:
| Variable | Value |
|---|---|
PYVOLT_HOST |
The app's domain - handy for ALLOWED_HOSTS / CSRF_TRUSTED_ORIGINS |
DJANGO_SETTINGS_MODULE |
Your configured settings module (Django apps) |
Where the variables apply
The same .env is loaded by:
- your app process (the start command),
- every background process (workers, schedulers, and any command),
- every scheduled job (cron commands).
One file, one truth - a worker never sees a different environment than the web process.
Release commands (opt-in)
Release-command steps (migrations, collectstatic) run with a minimal
environment by default. If a step needs your variables - the classic case is
manage.py migrate reading DATABASE_URL - turn on Expose to release
commands at the bottom of this tab (or when creating the app, under its env
rows). Apps configured by pyvolt.toml set it in the file
instead:
[app]
release_env = true
Why opt-in: many release steps never need secrets, and the tighter default means a leaky build script or verbose migration log can't accidentally print one. Flip it on when your release steps read config from the environment.
Databases
Selecting or creating a Postgres database on the app-create form adds a DATABASE_URL row automatically (the generated password appears only there - masked). For an existing database the password segment is left for you to fill in.
View this page as markdown - handy as context for your AI tools. Full index at /llms.txt.