Infra Atlas · Toolbox

API & Testing.

Two distinct problems live here: API exploration (Postman replacements that don't require a cloud account and store collections as files) and load testing (JMeter replacements that don't require a Java degree). The tools are different enough in use that the ★ picks are one from each group.

Form
Language
Use case
Picks
Bruno replaces Postman / Insomnia

Desktop API client where collections are stored as plain files in your repo (not in a cloud account). Open a folder → your requests load. Collaborate via git, diff in PRs, no account required, no sync service. The main reason to switch from Postman: your collections are yours and they're version-controlled. MIT-licensed, Electron-based, fast enough for daily use. Growing quickly since Postman removed its offline mode in 2023.

GUI JS emerging dev
usebruno/bruno
Hurl replaces curl scripts / Postman for CI API tests

Runs HTTP requests defined in plain text files (.hurl), with assertions. A test file looks like annotated curl commands: request, headers, body, then HTTP 200, jsonpath "$.id" exists, header "Content-Type" contains "json". Git-versionable, CI-runnable, readable by anyone who knows HTTP. The right tool for API contract testing that belongs in a repo, not a Postman workspace.

CLI Rust emerging dev
Orange-OpenSource/hurl
k6 replaces JMeter / Gatling

Load testing tool where tests are JavaScript: define virtual users, ramp up, run for N minutes, collect metrics. k6 run script.js gives you throughput, latency percentiles, error rate, and checks in the terminal. Integrates with Grafana, InfluxDB, and Prometheus for long-running tests. The developer-ergonomics answer to JMeter — no GUI required, no XML config, version-controlled test scripts.

CLI JS mature load
grafana/k6
hey replaces ab (Apache Bench)

HTTP load generator: fire N requests at a URL, get throughput and latency distribution. hey -n 10000 -c 200 https://api.example.com/health — that's the whole API. No scripting, no config file, just a quick sanity check that an endpoint can handle your expected concurrency. Output includes response time histogram, which ab lacks. The right tool for a 30-second "can this handle load?" question.

CLI Go mature load
rakyll/hey
oha replaces hey (with live TUI output)

HTTP load testing tool similar to hey but with a live TUI showing requests per second, latency distribution, and error rate as the test runs — not just at the end. The real-time view makes it easy to spot when a service starts degrading under ramp-up. Written in Rust; faster than hey at high concurrency. Same single-command API: oha -n 10000 -c 200 https://example.com.

CLI Rust emerging load
hatoo/oha
wrk replaces ab for high-throughput benchmarking

The classic HTTP benchmarking tool: multi-threaded, uses async I/O, can sustain very high request rates to measure maximum throughput. wrk -t12 -c400 -d30s https://api.example.com/ — 12 threads, 400 connections, 30 seconds. Minimal but accurate. Accepts a Lua script for custom request generation. Still the reference point many teams use for "what is the ceiling of this endpoint." The newer oha/hey have better UX; wrk still wins for raw throughput measurement.

CLI C mature load
wg/wrk
*

Bruno and Hurl solve the same "Postman replacement" problem differently — Bruno is a desktop GUI for exploration and collaboration; Hurl is a CLI runner for CI-integrated contract testing. Pick based on whether the primary use case is interactive or automated. For load testing: hey/oha for quick sanity checks; k6 for scripted scenarios with ramp-up, assertions, and metrics export; wrk for maximum-throughput measurement.