Changelog¶
Versioning policy¶
Deptool versions are named MAJOR.MINOR.PATCH.
- The major version number is purely cosmetic and represents the author’s sentiment.
- The minor version is bumped for new features and changes that are not bugfixes.
- The patch version is bumped for bugfixes.
The version number is not a semantic version. Changes that have compatibility impact will be clearly marked as such in the changelog.
1.3.0¶
Released 2026-11-04, shortly after the transitory 1.2.0 release.
Compatibility¶
- The
--limitoption that limits which hosts Deptool deploys to, has been renamed to--host. This is for symmetry with the new--appflag, which limits which apps get deployed. - The store format is now at version 2. Deptool 1.3 automatically upgrades stores when it acquires a deploy lock on a host. This will show up as a “stale” error once per host. After the conversion, Deptool 1.2 is no longer able to deploy to that host.
New features¶
deptool deploy,diff,reapply, andstatusnow accept--appto limit the apps to deploy. This is particularly useful in collaborative settings with multiple operators, to avoid stepping on each others’ toes.
Improvements¶
- When
--hostand--applimits are used, Deptool no longer inspects the respective directories in the config tree. This means that a broken configuration for a host or app (e.g. a syntax error in a manifest) no longer blocks deploys for other apps, and to other hosts. - Due to store format version 2, hosts can now be renamed without causing problems for Deptool. When a host is renamed both in
/etc/hostnameand in the config tree, no additional action is needed. Deptool still verifies that/etc/hostnamematches the name used in the config tree.
Other changes¶
- Deploy no longer repairs drift in managed symlinks for apps that did not change in the deploy, and it no longer runs
daemon-reloadwhen a deploy affects only apps that have no systemd units or quadlets. This makes Deptool more predictable, especially when used with the new--appfilter: Deptool only takes action for apps listed in the plan. A downside is that drift can linger for longer. Usedeptool reapplyto remove drift. - Store format version 2 records only a host’s own tree in that host’s store. This means that Deptool no longer leaks cluster configuration to all hosts. The ref
refs/heads/mainis no longer written to in the store. To correlate commits that were deployed in the same Deptool run, the newDeploy-Runtrailer assigns a new unique id to every run.
1.2.0¶
Released 2026-11-04. This release is in preparation for future changes that will enable filtering which apps to deploy, in addition to the existing host filter.
New features¶
deptool diffnow accepts--word-diffand--word-diff-regexfor more control over how the diff is rendered, in particular to inspect the diff for changes in files with long lines.
Improvements¶
- When the agent crashes in the middle of a session, Deptool now reports the unexpected exit and the agent’s stderr, rather than failing with a protocol error.
- Deptool now records the store format version on hosts it deploys to. This is in preparation for changing the store format in a future version. When a host has a newer store version than what Deptool can handle, it now aborts rather than continuing and misinterpreting the store.
1.1.0¶
Released 2026-09-02. This release incorporates improvements and bugfixes from four months of production usage.
Compatibility¶
- Symlinks into
/etc/systemd/networkand/etc/containers/systemdare no longer allowed directly. They have been superseded by the dedicatednetworkdandquadletsdirectories, which trigger a configuration reload in addition to linking the files in place. Deploying with the new version handles this update transparently. - The remote installation command that
deptoolruns on the target system has changed: it removes shell brace expansion, to improve compatibility with shells that do not support it. This can affect users who pin the exact command used by Deptool in thesudoersfile.
New features¶
- Add support for systemd-networkd config. Deptool executes
networkctl reloadafter a managed networkd file changes. - Add support for Podman quadlets.
- Add
deptool reapply, a command that re-applies the currently deployed revision on every host in the cluster. This command should not be needed normally, but it helps to recover from manually created drift and bugs. - Add support for building on OpenBSD amd64. Thanks to Mikołaj Kucharski for contributing this feature.
Improvements¶
- The handling of systemd restarts has been improved with more reliable failure detection. Deptool now also restarts units simultaneously, and it reports which units it is waiting for during a deploy. See the new Check systemd unit status section for the details of the new behavior.
- Deptool now performs additional safety checks that detect when the hostname of a managed host has been changed. This prevents misinterpreting the configuration deployed on the host, which will still hold the old name. See the new Renaming a host chapter for how to handle renames.
- Subdirectories in the
systemddirectory (used for systemd drop-ins) are now handled correctly, see the directory layout chapter. - It is now possible to remove all apps from a host by leaving the host’s directory empty in the config tree. Previously this required creating a placeholder file in the directory as a workaround.
- List which specific systemd units failed to become active, if any.
- Deptool now reports errors that happen on the target host with clearer messages and more context. In particular, IO errors always include the path involved in the failed operation, and stderr of commands that failed on the target host is forwarded to the operator.
- Do not depend on shell brace expansion when installing the agent to improve compatibility, and print stderr when agent installation fails to aid debugging.
- The
deployandreapplycommands now prompt again for confirmation on invalid input, rather than treating any invalid input as “no”. - The
syncandpingcommands now exit with a non-zero exit code if there is an error on any host, just likedeployalready did. - An empty
--limitis now an error, instead of silently behaving as if no limit was passed and applying against the entire cluster.
Bugfixes¶
- Fix two bugs that each prevented systemd units enabled by Deptool from starting after a reboot. See the Update systemd units section for details about the new behavior.
- Files in the config tree that are outside app directories (e.g. a readme per host) are no longer committed to the store, and no longer cause empty plans for a host when only such files changed. For hosts that had such files, the first deploy with the new Deptool version can still show an empty plan.
- Trigger
systemctl daemon-reloadafter an app with a systemd unit changes. Previously it was triggered only when units were enabled or disabled. - Avoid a scenario where an existing symlink that points to a directory could prevent Deptool from reconciling symlinks with an “Is a directory” error.
- A symlink or special file in the config tree is now rejected with a clear error, rather than crashing Deptool during the planning phase.
- Running Deptool with a config tree directory that does not exist, now fails with a clear error, and no longer saves the bad path as the default cluster for subsequent runs.
- Validate the contents of the
BUILD_COMMITenvironment variable at build time to avoid a runtime crash indeptool --version. - Correct output messages that could be misleading or not technically correct in certain situations.
1.0.0¶
Released 2026-05-06.
This is the initial public release. It’s accompanied by an announcement post. The 1.0 version number represents the fact that the author uses this version successfully for personal infra. It’s not a stability commitment, though if future changes have compatibility impact, they will be clearly marked as such in this changelog.