An open API service indexing awesome lists of open source software.

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

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