2
15
Fork
You've already forked deptool
0
A declarative configuration deployment tool https://docs.ruuda.nl/deptool/
  • Rust 99%
  • Nix 0.5%
  • Shell 0.5%
Find a file
2026年07月09日 01:40:42 +02:00
build Don't make symlinks from build script after all 2026年04月25日 23:52:00 +02:00
docs Update changelog + docs for new empty dir behavior 2026年07月09日 01:40:42 +02:00
src Test that deploying an empty host removes apps 2026年07月09日 01:35:17 +02:00
tests Rename and reorder fields for consistency 2026年05月14日 13:13:36 +02:00
.gitignore Document the filesystem layout 2026年04月20日 23:55:12 +02:00
.gitmodules Begin writing some proper documentation 2026年04月18日 21:21:26 +02:00
build.rcl Don't make symlinks from build script after all 2026年04月25日 23:52:00 +02:00
build.rs Include committer date in embedded version metadata 2026年04月27日 14:15:25 +02:00
Cargo.lock Bump version to 1.0.0 2026年05月06日 12:58:53 +02:00
Cargo.toml Bump version to 1.0.0 2026年05月06日 12:58:53 +02:00
CLAUDE.md Make Claude record its learnings 2026年06月23日 00:03:17 +02:00
CONTRIBUTING.md Initial commit 2026年02月18日 21:21:07 +01:00
flake.lock Add Nix flake for static build 2026年04月02日 21:05:24 +02:00
flake.nix Include committer date in embedded version metadata 2026年04月27日 14:15:25 +02:00
LICENSE Initial commit 2026年02月18日 21:21:07 +01:00
mkdocs.yml Add a changelog 2026年05月06日 12:50:32 +02:00
README.md Show example output in readme and index 2026年05月06日 12:58:53 +02:00
rust-toolchain.toml Add an empty Rust crate 2026年02月18日 21:32:05 +01:00

Deptool

Deptool is a declarative configuration deployment tool. It manages configuration files on a cluster of unix hosts reachable over SSH. Deptool is designed for small clusters (1–50 hosts) managed by a small group of operators (1–5 people). It is extremely fast for this use case: it can show a deployment plan in milliseconds, and execute it sub-second.

For example, this is Deptool updating DNS records on a cluster running NSD:

$ deptool deploy
s4.ruuda.nl
 update nsd
 ~ zones/ruuda.nl.zone
 restart unit nsd.service
s5.ruuda.nl
 update nsd
 ~ zones/ruuda.nl.zone
 restart unit nsd.service
Auto-rollback if deploy fails.
Apply to 2 hosts in cluster 'prod'? [y/N/d] y
 s4.ruuda.nl: done
 s5.ruuda.nl: done
Changes deployed successfully to 2 hosts in 0.99s.

To get started, these are the most useful chapters from the manual:

Status

  • Deptool is a hobby project without stability promise. I use it to manage my own personal infra, and it works very well for this use case.
  • I’m open sourcing it in the hope that others find it useful too, bug reports are welcome.
  • If there is sufficient interest, I may look into setting up a proper release flow with prebuilt binaries and more care for compatibility between releases. Drop me a message if Deptool is useful to you!

Hacking

Deptool is written in Rust and builds with Cargo. To typecheck and run the tests:

$ cargo check
$ cargo test

The tests are safe to run locally. They only operate on temp directories, they don’t invoke systemd or ssh.

For a production build you need a static binary, see docs/building.md.

LLM usage disclosure

Deptool was built with the help of LLMs. The code is primarily written by LLMs, but I carefully review the entire diff and iterate until I am happy with the code before committing to the repository. I want this to be a high quality codebase, not vibecoded AI slop. The user-facing documentation and this readme are written by hand, because even though LLMs could get the content right, you can tell an LLM was involved, and that has negative consequences. I don’t want to force humans to read LLM-generated text to be able to use a tool intended for humans.

License

Deptool is licensed under the Apache 2.0 license. Please do not open an issue if you disagree with the choice of license.