Stack Choices
A choice lets an image repository offer alternatives under x-daemonless.choices. The default option is the compose as it stands, so podman-compose up -d with nothing set gives the default. dbuild renders every option into the README and the site.
A database choice
Vikunja declares its database choice like this:
- Roles are type, host, port, user, password, name; omit port if the app has none.
typesonly when the app's word for an engine differs.externalneeds postgres or mariadb inoffers.- Add each variable to the service's
environment:and todocs.env. - Never write a postgres or mariadb service yourself; dbuild adds it.
The empty-default rule
Use ${VAR:-} when the app also reads a config file that env overrides (grafana, gitea). A non-empty default switches an existing install to an empty SQLite database.
A part choice
Immich declares an optional part like this:
profileswitches on services carrying that compose profile.envsets environment variables for that option.dropremoves named services from the stack.askprompts for values in.envand on the site.
When it does not fit yet
- The app takes a single database URL (vaultwarden).
- The stack uses
network_mode: hostor already has its own database service (paperless). - The engine needs per-app server settings (uptime-kuma).
Generate and check
Run dbuild generate then dbuild lint.
Lint checks:
- Offers are known engines.
- Each mapped variable is in the service's environment.
- The default option adds no service.
- The compose has no postgres or mariadb service of its own.
- A part's profile exists on a service.
- A dropped service exists.
Test
Run every offered option from the README's own generated snippet on a FreeBSD host. Check that the app's tables are in the engine picked and no SQLite file appeared.