GitHub - 1999labs/antics: Misbehave, responsibly · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
1999labs
antics
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>8 Commits<br>8 Commits
.github/workflows
.github/workflows
cmd
cmd
examples
examples
internal
internal
.gitignore
.gitignore
LICENSE
LICENSE
README.md
README.md
go.mod
go.mod
View all files
Repository files navigation
Antics
Misbehave, responsibly.
Antics breaks your own stack on purpose. It kills and freezes processes, eats disk, thrashes I/O, pegs CPU, hogs memory, and exhausts file descriptors, so you find out how your system fails before your users do.
It's chaos engineering for indie devs: no Kubernetes, no platform team, no budget. Just a single binary you point at your own machine on a Friday afternoon.
And it always cleans up after itself. Whatever Antics breaks, Antics puts back, even if you hit Ctrl-C halfway through.
ANTICS — misbehave, responsibly.<br>scenario: api-meltdown
plotting kill<br>→ hunt down processes matching "my-api" and kill them every 5s<br>● live kill<br>plotting diskfill<br>→ write a 500 MB junk file to /tmp/antics-diskfill.junk to eat disk space<br>● live diskfill
⏱ holding the chaos for 30s ..............................
✓ cleaning up after ourselves<br>✓ diskfill restored<br>✓ kill restored
done. the coast is clear. nothing left misbehaving.
Why
Most teams learn how their system fails by watching it fail in front of real users at 2am. The database pool exhausts. A slow dependency cascades into a full outage because nothing had a timeout. The disk fills.
These failures are all knowable — but chaos engineering tools (Gremlin, Chaos Mesh, Litmus) assume you're a big company with a cluster and a platform team.
Antics is the opposite. It's local-first, single-binary, and approachable enough that one developer can try it in five minutes. "Run some antics against staging" is an invitation. "Conduct a chaos engineering experiment" is a project nobody starts.
Install
Download the binary for your platform from Releases, or build from source:
git clone https://github.com/1999labs/antics<br>cd antics<br>go build -o antics ./cmd/
No dependencies. No runtime. One file.
Quickstart
# see what antics are available<br>antics list
# write a starter scenario you can edit<br>antics init
# see what it would do — commits nothing<br>antics run starter.antics --dry-run
# actually do it (and watch it clean up after)<br>antics run starter.antics --hold 30s
Scenarios
A scenario is a batch of antics in a tiny config file. This is examples/api-meltdown.antics — the scenario whose run is shown at the top of this README:
name: api-meltdown
# kill your service every 5 seconds — does it come back?<br>[kill]<br>match: my-api<br>every: 5s
# eat half a gig of disk while it flaps<br>[diskfill]<br>megabytes: 500
The name: field is what the banner echoes back as scenario: api-meltdown when you run it:
antics run examples/api-meltdown.antics
Antics commits each antic, holds the chaos for --hold, then restores everything in reverse order.
Stack as many antics as you want in one file — combine kill, pause, diskfill, iohog, cpuhog, memhog, and fdleak (plus latency and blackhole on Linux) in any combination. They're committed top to bottom and then all run at the same time for the duration of the hold, so you can recreate a cascading failure (a service flapping while the disk fills while the CPU is pegged) instead of one fault at a time.
More ready-to-run scenarios live in examples/:
crash-loop — a service that keeps dying on a tight loop; does your supervisor bring it back?
disk-panic — the classic "disk filled at 2am" failure, in isolation
noisy-neighbor — a runaway process starving everything else of CPU and memory
The antics
Seven antics run anywhere Antics does (macOS and Linux), need no privileges, and clean up after themselves:
antic<br>what it does<br>params
kill<br>kills processes matching a name<br>match, every (optional)
pause<br>freezes matching processes...