Pipelines, first-class
Every stage produces a stream โ Pipeline<T>. Compose with
| at the shell line or .pipe() in TypeScript.
Spec-driven mocks, fixture suites generated from your OpenAPI spec, load gates CI can
fail on, and every process log in one stream โ all composing on the same
| / .pipe(), from the REPL, a crust -c one-liner,
or a .crust script. Zero dependencies, one compiled binary โ and it never
reports a false pass.
curl -fsSL https://raw.githubusercontent.com/lariocpt/crust/main/install.sh | bash $ range(0, 10000) | parallel 100 | GET :3000/health | expect 200 | stats
# { count: 10001, durationMs: 814, p50: 5, p95: 17, p99: 41 }
$ read fixtures/*.json | POST :3000/users | expect 201
$ lines **/*.log | grep ERROR | filter (l => !l.includes('healthcheck')) | wc -l
$ sql "select email from users limit 5" | (r => r.email) Shell stages and TS lambdas are equal citizens โ both sit on the same pipeline. Pipe anything into anything: globs into HTTP, ranges into parallel workers, SQL rows into lambdas.
Every stage produces a stream โ Pipeline<T>. Compose with
| at the shell line or .pipe() in TypeScript.
GET, POST, PUT, PATCH,
DELETE ship as pipeline stages โ auto JSON encoding, headers via
-H, status matchers like expect 201 and
expect 2xx.
POST โฆ | (r => r.json()) | capture ID (b => b.id) โ later
lines expand $ID. Whole CRUD flows as .pipes suites,
no framework.
load 30s 100/s | parallel 50 | GET :3000/health | stats | assert (s =>
s.p95 < 200) โ paced ramps, honest drop accounting, thresholds as
chained asserts.
test-fixture 'fixtures/*.crust.ts' -n1000 -j32 runs your
.crust.ts fixtures with p50/p95/p99 reports.
mock-server ./openapi.yaml โ spec-driven mock with
envelope-aware --stateful CRUD โ persistent via --state
sqlite/postgres, seedable via --seed โ --validate 422s,
and a --proxy mode that audits a real backend's conformance.
skills install drops five Claude agent skills into
.claude/skills/ โ grammar-lint-tested against the live parser, so
examples can't rot.
verify-web-links https://example.com โ crawl your
sitemap, catch broken links and dead anchors, diff Open Graph tags against
fixtures.
Stay in your shell โ call crust -c 'โฆ' from bash/zsh/fish for the
lines where pipeline syntax wins.
Hand-picked workflows you can lift into your own pipelines today.
Paced load scenarios with ramps and drop accounting โ plus
--count + --threads fixture runs at volume.
stats | assert (s => s.p95 < 200) โ thresholds, baselines
via stats --out, and honest exit codes for CI.
Boot a Bun.serve mock from any Swagger / OpenAPI 3.x spec โ stateful CRUD that persists to sqlite/postgres, seeds itself on first boot, and round-trips enveloped entities.
Read recipe โ read fixtures/*.json | POST :3000/users | expect 201 in one
line โ or whole .pipes suites with SQL asserts.
Forensic queries over log trees, live streams from any command via
stdin, and an interactive logs session that
holds the stream while you iterate on filters.
A Bun [test].preload that writes a
.heapsnapshot and prints rss / heap / top-classes after every
bun test.
Install in one curl. Script it with .crust files, drive it from your
shell with crust -c, or live in the REPL.