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