Configuration Reference
dbuild uses compose.yaml as the primary source of truth for metadata.
Environment Variables
| Variable |
Description |
DBUILD_REGISTRY |
Override the target container registry (e.g., ghcr.io/myorg). |
GITHUB_TOKEN |
Authentication token for GitHub Packages and build secrets. |
GITHUB_ACTOR |
The username associated with GITHUB_TOKEN. |
DOCKERHUB_USERNAME |
Enable mirroring by providing a Docker Hub username. |
DOCKERHUB_TOKEN |
Personal access token for Docker Hub mirroring. |
CHROME_BIN |
Path to the Chrome/Chromium binary for screenshot testing. |
Config File Locations
| File |
Description |
compose.yaml |
The primary source of truth for metadata and documentation. |
.daemonless/config.yaml |
Project-specific build and test overrides. |
/usr/local/etc/daemonless.yaml |
Global templates for shared build variants. |
The x-daemonless section in compose.yaml defines discovery metadata used for documentation generation and the images index.
| Field |
Default |
Description |
title |
(dir name) |
Human-readable application title |
description |
"" |
Short description of the application |
category |
"Apps" |
Application category. Valid values: Base, Databases, Development, Downloaders, Infrastructure, Media Management, Media Servers, Monitoring, Network, Photos & Media, Productivity, Security, Utilities |
upstream_url |
"" |
URL to the upstream source repository |
web_url |
"" |
URL to the official project website |
freshports_url |
"" |
URL to the FreeBSD port on freshports.org (pkg-based images) |
user |
"bsd" |
Internal container user (docs only) |
upstream_binary |
true |
true if :latest is built from an upstream release binary; false if built from FreeBSD ports/packages. Controls the tag description in generated READMEs. |
icon |
":material-docker:" |
Material or SimpleIcon identifier (e.g. :simple-postgresql:) |
notes |
"" |
Free-form Markdown shown in the generated README as a Notes section. Useful for documenting jail requirements like allow.sysvipc. |
community |
"" |
Help link in Name:URL format (e.g. Discord:https://...) |
appjail |
None |
Enable AppJail documentation. Bare key or true uses defaults; pass a dict for custom config. |
healthcheck |
None |
Docker-style healthcheck definition, used as the CIT health URL if cit.health is not set. |
docs |
{} |
Structured env/volumes/ports documentation. Used to generate README reference tables (see docs: sub-keys below). |
image_class |
"service" |
Image class controlling README layout. Valid values: service, cli, base. service (default): persistent daemon with compose/CLI/ansible docs. cli: run-and-exit tool, deployment section replaced with usage example. base: base image for FROM, no deployment docs. |
deprecated |
None |
Mark this image as deprecated. Bare key disables builds; pass a dict with reason, replacement, sunset_date, and/or migration_guide for structured messaging. |
deprecated: sub-keys
Images can be marked as deprecated with a bare key (generic notice) or a structured dict (with context for users migrating away):
x-daemonless:
# Generic — disables CI builds and shows a notice
deprecated:
# Structured — adds context and points to a replacement
deprecated:
reason: "Superseded by seerr"
replacement: "seerr"
sunset_date: "2026-06-01"
migration_guide: "Stop overseerr, copy /containers/overseerr to /containers/seerr."
| Field |
Default |
Description |
reason |
"" |
Human-readable explanation of why the image is deprecated |
replacement |
"" |
Name of the image that replaces this one (e.g. seerr). Used to generate a prominent migration callout. |
sunset_date |
"" |
Date after which the image will no longer be available (e.g. 2026-06-01) |
migration_guide |
"" |
Free-form Markdown with migration steps shown alongside the deprecation notice |
successor |
"" |
Full URL of the successor image (e.g. https://daemonless.io/images/grimmory). Used to generate a migration callout. |
docs: sub-keys
The docs: field accepts three optional sub-keys used to generate README reference tables:
docs:
env:
ENV_VAR: "Description of this variable"
volumes:
/data/path: "Description of this mount"
ports:
8080: "Description of this port"
Build Config (.daemonless/config.yaml)
Top-level build: keys
| Field |
Default |
Description |
pkg_name |
None |
Default FreeBSD package name for version extraction across all variants |
architectures |
["amd64"] |
List of architectures to build (e.g. ["amd64", "arm64"]) |
Variant fields (build.variants[])
| Field |
Default |
Description |
tag |
(required) |
Image tag to push (e.g. latest, 18, pkg) |
containerfile |
"Containerfile" |
Containerfile to build |
args |
{} |
Build arguments passed as --build-arg to the Containerfile |
aliases |
[] |
Additional tags to push alongside this variant (e.g. ["18-pkg", "pkg", "latest"]) |
default |
false |
Mark as the default variant for dbuild test when no --variant is given |
pkg_name |
None |
Override the top-level build.pkg_name for this variant |
tag_desc |
None |
Override the auto-generated tag description in the README version table |
CIT Config (cit:)
See the CIT reference for full details. Quick summary:
| Field |
Default |
Description |
mode |
(auto) |
Test mode: shell, port, health, or screenshot. Auto-detected if omitted. |
port |
None |
TCP port the service listens on |
health |
None |
HTTP path for the health check endpoint (e.g. /ping, /api/health) |
wait |
120 |
Max seconds to wait for the container to be ready |
ready |
None |
String to watch for in container logs before starting tests — avoids fixed sleep delays |
screenshot_wait |
None |
Extra seconds to wait after health passes before capturing the screenshot |
ssim_threshold |
None |
Override the SSIM similarity threshold for screenshot comparison (0.0-1.0) |
https |
false |
Use HTTPS for health and screenshot checks |
compose |
false |
Start the service via compose.yaml instead of podman run |