{"id":20168233,"url":"https://github.com/gwillem/whip","last_synced_at":"2026-03-06T22:03:16.698Z","repository":{"id":255666029,"uuid":"786250538","full_name":"gwillem/whip","owner":"gwillem","description":"Simple and fast devops automation","archived":false,"fork":false,"pushed_at":"2025-12-16T21:28:20.000Z","size":3920,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-18T15:34:54.895Z","etag":null,"topics":["ansible","configuration-management","devops","linux"],"latest_commit_sha":null,"homepage":"https://whip.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gwillem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2024-04-13T21:51:52.000Z","updated_at":"2026-01-04T04:31:02.000Z","dependencies_parsed_at":"2024-09-06T16:37:12.646Z","dependency_job_id":"790ab84a-d65a-4c34-bb43-7660bf3ccd19","html_url":"https://github.com/gwillem/whip","commit_stats":null,"previous_names":["gwillem/whip"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/gwillem/whip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwillem%2Fwhip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwillem%2Fwhip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwillem%2Fwhip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwillem%2Fwhip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gwillem","download_url":"https://codeload.github.com/gwillem/whip/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gwillem%2Fwhip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30200756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ansible","configuration-management","devops","linux"],"created_at":"2024-11-14T01:06:59.344Z","updated_at":"2026-03-06T22:03:16.671Z","avatar_url":"https://github.com/gwillem.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# whip - simple and fast devops automation\n\n![order, order!](doc/order-order.webp)\n\nWhip your servers into line. A _fast_ and _simple_ Ansible replacement optimized for projects with 1 to 20 servers.\n\n# Install\n\n```\nbase=https://github.com/gwillem/whip/releases/latest/download/whip\ncurl -L $base-$(uname -s)-$(uname -m).gz|gzip -d\u003ewhip\u0026\u0026chmod +x whip\n./whip version\n```\n\n# Demo\n\n\u003e [!NOTE]\n\u003e Keep this in mind.\n\n# Features\n\n![](https://buq.eu/screenshots/40234b57e57fda7399a2698a.png)\n\n| Finished   | Planned            | NOT planned\\* |\n| ---------- | ------------------ | ------------- |\n| ssh auth   | external inventory | non-linux     |\n| ssh agent  | facts              | sudo / become |\n| apt        | pip / env          | ssh passwords |\n| file/copy  | roles / includes   | local_action  |\n| shell      | rpm, yum, pacman   | with_xxx      |\n| command    | get_url            | delegate_to   |\n| lineinfile | apt_repository     | set_fact      |\n| vars       | user               | assert        |\n| templates  | mysql              | stat          |\n| vault      | postgresql         | debug         |\n\n# Philosophy\n\nHow will Whip _stay_ fast and simple?\n\nOnly build features that satisfy 95% of use cases. Convention over configuration. Support top used modules only. Only support Linux servers and Linux/Mac clients.\n\nEliminate unnecessary SSH round trips: Ansibles biggest delay is caused by tasks that are sent one by one. Whip bundles tasks into a single job.\n\n# But why?\n\nAnsible started out as fast and simple too. Compared to the popular configuration management systems at the time (Puppet, Chef, CFEngine), it was a breeze of fresh air. Simple configuration files, easy to learn, effective documentation, simple push architecture.\n\nUntil version 2 or so. After the RedHat acquisition, Ansible grew into commercial bloatware. RedHat got rid of the old objectives page (Simple, Fast) and replaced it with corporate marketing fluff. The task parameter documentation is hidden behind white paper downloads. Core modules have grown to support 20 extra options to support esoteric use cases. And above all, its once legendary speed is gone. Ansible feels sluggish today.\n\nAnsible has grown too complex, as illustrated by this Hacker News comment:\n\n\u003e Any sufficiently complicated configuration language contains an ad hoc, informally-specified, bug-ridden, slow implementation of a Turing complete programming language. (jasim @ HN)\n\n# Other reading\n\n- [Top Ansible tasks](https://mike42.me/blog/2019-01-the-top-100-ansible-modules)\n- [I'm done with Red Hat](https://www.jeffgeerling.com/blog/2023/im-done-red-hat-enterprise-linux)\n- [Is Ansible turing complete?](https://stackoverflow.com/questions/40127586/is-ansible-turing-complete)\n- [Ansible's YAML file is essentially code](https://news.ycombinator.com/item?id=16238005)\n- [Configuration complexity clock](http://mikehadlow.blogspot.com/2012/05/configuration-complexity-clock.html?m=1)\n- [Original Ansible site: simple and efficient](https://web.archive.org/web/20130314042108/http://www.ansibleworks.com/)\n- Some recent config mgt alternatives:\n  - [gossh: declarative config management using Go](https://github.com/krilor/gossh)\n  - [JetPorch](https://github.com/jetporch/jetporch_docs/blob/main/SUMMARY.md) ([launched](https://laserllama.substack.com/p/a-new-it-automation-project-moving) and [discontinued](https://web.archive.org/web/20231230013721/https://jetporch.substack.com/p/discontinuing-jet))\n  - [Ploy](https://github.com/davesavic/ploy) Jan 2024, not Ansible compatible\n  - [Bruce](https://github.com/brucedom/bruce) since Apr 2023, not Ansible compatible\n  - [mgmt](https://github.com/purpleidea/mgmt/) since 2016, full featured, high complexity, not Ansible compatible\n  - [Tiron](https://github.com/lapce/tiron) some Ansible runners, written in Rust, uses HCL instead of Yaml\n  - [Sparky](https://github.com/melezhik/sparky) [see also](https://dev.to/melezhik/sparky-simple-and-efficient-alternative-to-ansible-1fod)\n\n# FAQ\n\n#### Is Whip designed to be an Ansible replacement (backwards compatible) or to be a better solution to the same problem?\n\nThe latter, however we stick to most of Ansible's verbiage to ease a transition.\n\n#### Isn't everybody using Docker, Kubernetes and Kamal etc these days?\n\n[Not really](https://trends.google.com/trends/explore?date=all\u0026q=ansible).\n\n#### Why is there an embedded build?\n\nTo support different architectures between host and client\n\n# Changes from Ansible syntax\n\n- tree module with state per line\n- apt module with state per line\n- \"unless\" for command and shell\n\n  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgwillem%2Fwhip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgwillem%2Fwhip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgwillem%2Fwhip/lists"}