Features
- Plugin system. Plugins are listed under a new
plugins:key incompose-farm.yaml(plugin name → options) and run in the listed order. They are discovered through thecompose_farm.pluginsentry-point group. They hook into the stack lifecycle throughbefore_up,preflight,after_source_stopped,after_up, andafter_stack_removed. Withcompose_argsthey can also add globaldocker composearguments, such as--env-file, to every compose command. See the new Plugins page. - Builtin
commandsplugin: runs shell commands from the config at each hook, either on the target host (run:) or on the machine runningcf(local:). It can also add preflight checks and extra compose arguments. No Python needed. - Builtin
syncplugin: rsyncs each stack directory to its host before every start, over compose-farm's SSH settings. This replaces NFS for compose files. - Example plugins in
examples/plugins/:agenixpasses secrets decrypted on each host to compose as--env-fileand checks them during preflight.zfsgives each stack its own ZFS dataset. The dataset moves with the stack on migration, or all datasets live on one NAS withstorage_host.- Install one next to compose-farm:
uv tool install compose-farm \ --with "compose-farm-zfs @ git+https://github.com/basnijholt/compose-farm#subdirectory=examples/plugins/zfs"
cf checkandcf config validatelist the enabled plugins. Problems found by plugin preflight checks are reported bycf up,cf check, and the host-compatibility check.- The Docker image now includes
rsync.
Bug fixes
cf applyno longer stops a stack on its old host as a stray before migrating it. That also disabled rollback. The migration now stops the old host itself, including when discovery reports that host under an alias.- When cleaning up a failed start on the new host fails, a migration no longer restarts the stack on the old host, so a stack can't end up running on both hosts.
- Stopping orphaned stacks now clears each host from the state as soon as it stops, instead of only when every host succeeded.
Testing
- Added end-to-end tests on disposable Incus VMs (
e2e/). Real multi-host runs coversyncandcommands, ZFS migrations with no lost writes, NFS storage mode, and agenix secrets.
Full changelog: v1.22.1...v1.23.0