Loadr – a Rust load-testing tool that began as a single Claude prompt

reaandrew1 pts0 comments

loadr — the load testing platform. k6, JMeter, Gatling & Locust ideas in one Rust binary.

landmark (closed by each page before its footer).<br>--><br>Skip to main content

Demos<br>Plugins<br>Docs<br>Product

Features<br>Protocols<br>Web UI<br>Distributed<br>Compare vs k6 / JMeter<br>Roadmap<br>GitHub<br>Download

Rust · single binary · zero dependencies

Find the<br>breaking point.

loadr brings together the best ideas from k6, JMeter,<br>Gatling and Locust in one place: declarative YAML tests, embedded JavaScript, six protocols, plugins,<br>a built-in live web UI, and distributed execution with<br>mathematically exact percentiles. All in one binary.

Get loadr<br>Read the docs

cargo install --git https://github.com/levantar-ai/loadr loadr-cli<br>copy

loadr run checkout.yaml

live-demo — 1 scenario(s), 8.1s

checks........................: 100.00% — ✓ 752 ✗ 0<br>✓ status is 200 (376 / 376)<br>✓ under 200ms (376 / 376)

http_req_duration.............: avg=4.96ms med=3.02ms p(95)=10.73ms p(99)=49.38ms<br>http_req_tls_handshaking......: avg=0µs (connections reused per VU)<br>http_req_waiting..............: avg=4.85ms med=2.90ms p(95)=10.57ms<br>http_reqs.....................: 376 (46.66/s)<br>iterations....................: 376 (46.66/s)<br>vus...........................: value=5 min=4 max=5

thresholds:<br>✓ http_req_duration: p(95)0.95 (observed: 1.00)<br>✓ http_req_failed: rate

load executors

protocols built in

binary, zero deps

p99.9

HDR-exact, fleet-wide

Why loadr

Four tools' best ideas. One Rust binary.

loadr draws, with thanks, on four projects that shaped load testing: k6's execution model, JMeter's request arsenal, Gatling's flow-control DSL and feeders, and Locust's behaviour model — brought together and reimplemented in Rust. See what we built on →

Honest load, honest numbers

Open-model arrival-rate executors keep the offered load constant even when your<br>system slows down — saturation shows up as dropped_iterations,<br>not silently lower throughput (requests per second, RPS). Every latency is an HDR histogram: p(99.9) is exact, never estimated, never averaged.

Tests you can code-review

Declarative YAML with a generated JSON Schema — your editor autocompletes it,<br>loadr validate lints it with line numbers and<br>did-you-mean fixes, and the diff in your PR actually means something.<br>Drop into JavaScript exactly where logic demands it.

A platform, not just a CLI

Built-in management web UI (think RabbitMQ for load tests), distributed<br>controller/agent mode over mTLS gRPC, six metric exporters, WASM & native plugins,<br>and importers that eat your existing .jmx plans and k6 scripts.

See it in action

Real recordings. Real runs. No mockups.

Every clip is the actual loadr binary executing against a live server.

View all 22 demos →

The live web UI, mid-run

Live charts, threshold pills, run controls, editor and fleet view — a real browser session.

0:40

The quickstart 0:24

A distributed fleet, live 0:34

Everything, in the box

The exhaustive feature list

If it's listed, it ships in the binary — and every item links to its documentation.

All 7 k6 executors

constant-vus, ramping-vus, constant-arrival-rate, ramping-arrival-rate, per-vu-iterations, shared-iterations, externally-controlled — identical semantics, open and closed models.

Concurrent scenarios

Any number of named scenarios per test with independent executors, stages, start times, graceful stop and ramp-down — browsers, API clients and batch jobs in one run.

Thresholds as CI gates

p(95), rate>0.99, any percentile, tag-filtered selectors, abort_on_fail circuit breakers with warm-up delay. Exit code 99 on failure — k6-compatible.

CI-native: GitHub Action + JUnit

A first-party setup-loadr / run action installs the CLI and runs your plan, and --junit emits a JUnit report every CI test panel renders — GitHub, GitLab, Jenkins, CircleCI.

Checks + JMeter assertions

k6-style checks that never fail requests, and JMeter-style assertions that do: status, body contains/regex, JSONPath, XPath, duration, size, headers, JS expressions — with abort actions.

Correlation & extraction

JSONPath, regex capture groups, XPath 1.0, CSS selectors, boundary extractors and headers — extracted values flow into later requests as ${name} and into JS.

Data-driven testing

CSV & JSON feeders with sequential, random or shuffle strategies (shared or per virtual user (VU), recycle or stop-at-EOF), inline rows, and secrets that never reach logs.

Flow control & weighted tasks

repeat, while, if/else and weighted / uniform / round-robin random branches — Gatling's loops and switches and Locust's weighted-task model, in declarative YAML.

Throttling

A global request-rate ceiling (throttle: { requests_per_second }) on top of any executor — Gatling's reachRps, for staying under a known rate limit no matter how fast the target is.

Embedded JavaScript

QuickJS per VU with k6-style imports (k6/http, check, sleep, metrics), setup()/teardown(), scenario functions, beforeRequest/afterRequest hooks, inline ${js: …} — sandboxed with time & memory...

loadr load binary rate jmeter live

Related Articles