Why I built a one-binary alternative to AWX.
July 2026 · the maker
AWX is how most teams run Ansible at scale. To stand it up, you first stand up Kubernetes, Postgres, Redis, and Receptor. Then you keep all of that running. And AWX itself has not shipped a release since July 2024. When a run fails across 600 hosts, you scroll a text log to find the one that broke.
I wanted something I could run from a single binary, that showed me every host at a glance, and that did not need a cluster to exist first. So I built SwitchTender. Trying it is one command: go install github.com/kordloom/switchtender@latest, and if you have Ansible on the PATH, switchtender demo seeds a read-only instance with real runs to poke at.
What it is
One Go binary. It runs Ansible, Terraform, OpenTofu, Bash, PowerShell, Python, and Go. It stores everything in a single SQLite file by default, and speaks Postgres when you want more than one instance. No Kubernetes operator, no Redis, no message bus. One process, one file to back up.
Runs are a live matrix, not a scroll
Every host and every task paints as it happens, in a grid. The failed host is highlighted. You get per-task timing and can drill into stdout, stderr, the return code, and the diff. Six hundred hosts stay readable, because you are looking at a dashboard instead of a wall of text.
It splits big jobs by measured cost, and it remembers your fleet
Ask for four shards and it splits the inventory balanced by each host's measured duration from recent runs, not a flat round-robin. It tracks every host across runs: flaky hosts flagged, durations trended, and drift detected straight from a dry run. A retry re-runs only the shards that failed.
It proves what happened
Every run writes a tamper-evident, hash-chained audit trail you can verify offline, and render into a self-contained evidence report anyone can read. Approval policies can hold a run until someone signs off. A Terraform apply can be held automatically when its plan would destroy more resources than you allow. Roles, teams, and organizations are in the source-available core, not behind a paid tier.
Moving off AWX or Semaphore is one command
It imports your projects, inventories, templates, and schedules, dry run first so you see what it will create, then apply.
switchtender import awx awx-export.json # dry-run report
switchtender import awx awx-export.json --apply # create the objects
A note on the engineering
The workers are leaderless: they claim runs with a single SELECT ... FOR UPDATE SKIP LOCKED, so you scale by starting another process against the same database, with no coordinator to elect. Every release is signed, ships an SBOM, and carries SLSA build provenance you can verify with gh attestation verify, because a tool that runs your infrastructure should be able to prove what it is. And the performance claims are measured and reproducible, not projected.
Where it is behind, honestly
AWX has years of production use, a large installed base, and a real ecosystem. SwitchTender is young, and support for now is me. If you need a vendor with an SLA today, it is not that yet. What it offers instead is everything above, from one binary, without standing up a cluster first.
Try it
Install: go install github.com/kordloom/switchtender@latest, or grab a signed binary from the releases page. A star helps if it is useful. It is source-available under BSL 1.1 and free to self-host. I would like your feedback and your hardest questions: what would you need before you would run this on your fleet?
