
oha
A command-line tool that sends many HTTP requests to a web server and shows live results.
- Stars
- 10.7k
- Forks
- 307
- Licence
- MIT
- Language
- Rust
- Last update
- 4 days ago
- Type
- CLI
What it is
oha is a command-line program that sends a large number of HTTP requests to a web address to see how it performs under load. While it runs, it shows a live terminal display with progress and results. It is written in Rust and is inspired by the older hey tool.
- Run 10,000 GET requests against a local server with 50 connections and see latency results
- Limit traffic to a set number of queries per second with -q to test steady load
- Send a POST request with a body from a file using -D
- Test an HTTP/2 endpoint using the --http2 option
- Run a timed test for a set duration with -z, such as 3 minutes
Great for
- Developers checking how an API or website handles many simultaneous requests
- Backend engineers comparing performance before and after a change
- People who prefer a terminal tool with a live view over reading raw output
- Users who want to set a request rate limit or test over HTTP/2
Not ideal for
- Testing a whole user journey across many steps, since the README describes sending requests to a URL rather than scripted scenarios
- Anyone needing a graphical interface, since the tool is terminal-based
- Testing live production systems without permission, because heavy load can cause outages
How to get it
- 1
Install with a package manager
You'll need: Rust (stable), with make and cmake, if installing via cargo
Install via Cargo
cargo install ohaInstall on macOS with Homebrew
brew install ohaInstall on Arch Linux
pacman -S ohaInstall on Windows with winget
winget install hatoo.oha - 2
Run it
- Install oha using one of the commands above, or download a binary from the release page
- Run oha with a target URL, for example: oha https://example.com
- Use -n to set the number of requests and -c to set concurrent connections
- Watch the live display, then review the summary when the test finishes
- 3
Get the most out of it
- Use -z with a duration like 30s to run a timed test instead of a fixed request count
- Use -q to cap requests per second for steady-rate testing
- Use --http2 and -p to send parallel requests over HTTP/2
- Use --no-tui for plain output when running in scripts or CI
- Use --latency-correction with -q or --burst-delay to address the coordinated omission problem
Downloads
Strengths
- Live terminal display shows progress while the test runs
- Many options cover headers, bodies, authentication, TLS certificates and HTTP versions
- Available through several package managers and as pre-built binaries for major operating systems
Trade-offs
- The README describes some features as experimental, such as HTTP/3 support
- Behavior differs from the similar hey tool in places, such as how -q is applied, so existing scripts may need changes
- Large numbers of connections may require raising the system's open-file limit, as the README notes
How it compares
| Project | Stars | Type | Level | Updated | Best for |
|---|---|---|---|---|---|
| oha (this) | 10.7k | CLI | beginner | 4 days ago | Developers checking how an API or website handles many simultaneous requests |
| vegeta | 25.2k | CLI | intermediate | 1 months ago | Backend developers checking how an HTTP API behaves under a fixed request rate |
| locust | 28.3k | App | intermediate | 4 days ago | Backend or QA engineers who want load tests kept in version control as normal code |
| fx | 20.7k | CLI | beginner | 15 days ago | Developers who work with JSON output from APIs or log files in the terminal |
| http-server | 14.2k | CLI | beginner | 7 months ago | Front-end developers who want to preview a static site or single-page app locally |
| mitmproxy | 46.6k | Dev tool | intermediate | 4 days ago | Developers debugging how an app talks to a backend API |
Stats synced from GitHub. The assessment above was drafted with AI from the project's README on 2026-10-29 and may miss recent changes — check the README before relying on a command. MIT licence: free to use, modify and distribute, including commercially, as long as you keep the copyright notice.