oha
Ohayou(おはよう), HTTP load generator, inspired by rakyll/hey with tui animation.
oha is a fast, single-binary command-line tool for load testing web applications, point it at a URL, set a request count and concurrency level, and watch live latency and throughput stats in your terminal.
oha is a command-line tool for load testing web applications. You point it at a URL, tell it how many requests to send and how many connections to use at once, and it hammers the server while showing you a live dashboard in the terminal. The dashboard updates in real time as the test runs, showing request rates, latency distributions, response codes, and a histogram of response times.
It is written in Rust, which makes it fast and easy to install as a single binary. You can install it via Homebrew on Mac, winget on Windows, pacman on Arch Linux, or a simple cargo command if you have Rust already installed. Pre-built binaries are available on the releases page for all major platforms.
The tool supports HTTP/1, HTTP/2, and experimental HTTP/3. You can control the number of requests to send, set a time limit instead of a request count, cap the request rate in queries per second, add custom headers, send request bodies, and use basic authentication. There is an option to generate target URLs from a regular expression pattern, which lets you test endpoints with varying paths in a single run.
One feature called latency correction addresses a statistical problem common in load testing where fast responses are underrepresented because slow requests block the sampling. Enabling this flag gives a more accurate picture of actual latency under load.
The name comes from the Japanese greeting ohayou, meaning good morning. The project is named in that spirit and is open source. A Docker image is available if you prefer running it in a container rather than installing it directly.
Where it fits
- Load test a web API to find its maximum requests-per-second capacity before a production release.
- Benchmark a server's latency distribution under concurrent load to catch performance regressions.
- Test endpoints with varying paths in a single run by generating target URLs from a regex pattern.