Local-first, single-binary chaos engineering CLI for indie devs

knownquantity_1 pts0 comments

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...

antics kill chaos disk file diskfill

Related Articles