https://github.com/ruuda/deptool
A declarative configuration deployment tool
https://github.com/ruuda/deptool
configuration-management deployment
Last synced: about 5 hours ago
JSON representation
A declarative configuration deployment tool
- Host: GitHub
- URL: https://github.com/ruuda/deptool
- Owner: ruuda
- License: apache-2.0
- Created: 2026-05-06T11:02:34.000Z (about 2 months ago)
- Default Branch: master
- Last Pushed: 2026-06-20T20:09:57.000Z (3 days ago)
- Last Synced: 2026-06-20T22:07:53.035Z (3 days ago)
- Topics: configuration-management, deployment
- Language: Rust
- Homepage: https://docs.ruuda.nl/deptool/
- Size: 708 KB
- Stars: 50
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# 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:
* [Overview](https://docs.ruuda.nl/deptool/)
* [Tutorial](https://docs.ruuda.nl/deptool/tutorial/)
* [Directory layout](https://docs.ruuda.nl/deptool/directory_layout/)
* [Deployment phases](https://docs.ruuda.nl/deptool/deployment_phases/)
* [CLI reference](https://docs.ruuda.nl/deptool/cmd/deptool/)
## 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][contact] if Deptool is useful to you!
[contact]: https://ruudvanasseldonk.com/contact
## Hacking
Deptool is written in Rust and builds with Cargo. To typecheck and run the tests:
```console
$ 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](https://docs.ruuda.nl/deptool/building/).
## 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][cantrill-fly] [consequences][ruuda-llm].
I don’t want to force humans to read LLM-generated text to be able to use a tool
intended for humans.
[cantrill-fly]: https://bcantrill.dtrace.org/2025/12/05/your-intellectual-fly-is-open/
[ruuda-llm]: https://ruudvanasseldonk.com/2025/llm-interactions
## License
Deptool is licensed under the [Apache 2.0][apache2] license.
Please do not open an issue if you disagree with the choice of license.
[apache2]: https://www.apache.org/licenses/LICENSE-2.0