{"id":51077425,"url":"https://github.com/ruuda/deptool","last_synced_at":"2026-06-23T15:33:25.904Z","repository":{"id":361932979,"uuid":"1230823886","full_name":"ruuda/deptool","owner":"ruuda","description":"A declarative configuration deployment tool","archived":false,"fork":false,"pushed_at":"2026-06-20T20:09:57.000Z","size":725,"stargazers_count":50,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-06-20T22:07:53.035Z","etag":null,"topics":["configuration-management","deployment"],"latest_commit_sha":null,"homepage":"https://docs.ruuda.nl/deptool/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruuda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-06T11:02:34.000Z","updated_at":"2026-06-20T20:10:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ruuda/deptool","commit_stats":null,"previous_names":["ruuda/deptool"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ruuda/deptool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruuda%2Fdeptool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruuda%2Fdeptool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruuda%2Fdeptool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruuda%2Fdeptool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruuda","download_url":"https://codeload.github.com/ruuda/deptool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruuda%2Fdeptool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34696897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration-management","deployment"],"created_at":"2026-06-23T15:33:25.103Z","updated_at":"2026-06-23T15:33:25.898Z","avatar_url":"https://github.com/ruuda.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deptool\n\nDeptool is a declarative configuration deployment tool. It manages configuration\nfiles on a cluster of unix hosts reachable over SSH. Deptool is designed for\nsmall clusters (1–50 hosts) managed by a small group of operators (1–5 people).\nIt is extremely fast for this use case: it can show a deployment plan in\nmilliseconds, and execute it sub-second.\n\nFor example, this is Deptool updating DNS records on a cluster running NSD:\n\n```\n$ deptool deploy\ns4.ruuda.nl\n    update nsd\n        ~ zones/ruuda.nl.zone\n        restart unit nsd.service\n\ns5.ruuda.nl\n    update nsd\n        ~ zones/ruuda.nl.zone\n        restart unit nsd.service\n\nAuto-rollback if deploy fails.\nApply to 2 hosts in cluster 'prod'? [y/N/d] y\n\n  s4.ruuda.nl: done\n  s5.ruuda.nl: done\n\nChanges deployed successfully to 2 hosts in 0.99s.\n```\n\nTo get started, these are the most useful chapters from the manual:\n\n\u003c!-- The links below are the rendered versions of what's in the docs directory\n     in this repository. --\u003e\n * [Overview](https://docs.ruuda.nl/deptool/)\n * [Tutorial](https://docs.ruuda.nl/deptool/tutorial/)\n * [Directory layout](https://docs.ruuda.nl/deptool/directory_layout/)\n * [Deployment phases](https://docs.ruuda.nl/deptool/deployment_phases/)\n * [CLI reference](https://docs.ruuda.nl/deptool/cmd/deptool/)\n\n## Status\n\n * Deptool is a hobby project without stability promise. I use it to manage my\n   own personal infra, and it works very well for this use case.\n * I’m open sourcing it in the hope that others find it useful too, bug reports\n   are welcome.\n * If there is sufficient interest, I may look into setting up a proper release\n   flow with prebuilt binaries and more care for compatibility between releases.\n   [Drop me a message][contact] if Deptool is useful to you!\n\n[contact]: https://ruudvanasseldonk.com/contact\n\n## Hacking\n\nDeptool is written in Rust and builds with Cargo. To typecheck and run the tests:\n\n```console\n$ cargo check\n$ cargo test\n```\n\nThe tests are safe to run locally. They only operate on temp directories, they\ndon’t invoke `systemd` or `ssh`.\n\nFor a production build you need a static binary,\nsee [docs/building.md](https://docs.ruuda.nl/deptool/building/).\n\n## LLM usage disclosure\n\nDeptool was built with the help of LLMs. The code is primarily written by LLMs,\nbut I carefully review the entire diff and iterate until I am happy with the code\nbefore committing to the repository. I want this to be a high quality codebase,\nnot vibecoded AI slop. The user-facing documentation and this readme are written\nby hand, because even though LLMs could get the content right, you can tell an\nLLM was involved, and that has [negative][cantrill-fly] [consequences][ruuda-llm].\nI don’t want to force humans to read LLM-generated text to be able to use a tool\nintended for humans.\n\n[cantrill-fly]: https://bcantrill.dtrace.org/2025/12/05/your-intellectual-fly-is-open/\n[ruuda-llm]:    https://ruudvanasseldonk.com/2025/llm-interactions\n\n## License\n\nDeptool is licensed under the [Apache 2.0][apache2] license.\nPlease do not open an issue if you disagree with the choice of license.\n\n[apache2]: https://www.apache.org/licenses/LICENSE-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruuda%2Fdeptool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruuda%2Fdeptool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruuda%2Fdeptool/lists"}