Bruno vs Hurl: open-source API testing tools compared
Metrics as of , from the GitHub or GitLab API of each repository. Refreshed monthly.
Summary
Bruno: Offline API client that stores request collections as plain text files, with a CLI for running them in CI.
Hurl: Command line tool that runs and tests HTTP requests written in a plain text format.
Both are listed under API testing. The table gives repository metrics from the GitHub API with their fetch date, then the documented facts used for every comparison in this category, each linked to the README or docs page it comes from. A cell reads "not documented" when the fact was not found in the project's documentation; that does not mean the feature is absent.
Side by side
| Fact | Bruno | Hurl |
|---|---|---|
| Stars | 47,1111 | 19,2101 |
| Forks | 2,9081 | 7451 |
| Contributors | 4861 | 971 |
| Last release | 2026-08-201 | 2026-04-291 |
| Last commit | 2026-09-221 | 2026-09-211 |
| Commits in 90 days | 5451 | 1631 |
| License | MIT1 | Apache-2.01 |
| Primary language | JavaScript1 | Rust1 |
| Status | active1 | active1 |
| Protocols | REST, GraphQL, SOAP, gRPC, WebSocket source: Docs: Send Requests Overview | HTTP: REST, SOAP and GraphQL APIs, HTML content, XML and JSON based APIs source: README |
| Test authoring format | Requests saved as plain text files in the Bru markup language, edited in a desktop app source: README | Plain text Hurl files that define HTTP requests and asserts source: README |
| Languages for writing tests | JavaScript test scripts with Chai assertions source: Docs: Testing | Hurl plain text file format source: README |
| Parallel or distributed execution | CLI --parallel flag runs requests in parallel source: Docs: Command Options | --parallel runs each file in its own worker thread; --jobs sets the number of parallel jobs source: README |
| CI integration | CLI Docker images with CI examples for GitHub Actions, GitLab CI, Jenkins source: README | CI/CD tutorial with GitHub Actions and GitLab CI/CD examples source: Docs: CI/CD Integration |
| Report formats | JSON, JUnit, HTML source: Docs: Bruno CLI | HTML, JSON, JUnit, TAP source: README |
| Install method | Binary download; Homebrew, Chocolatey, Scoop, Snap, Flatpak, Apt (brew install bruno) source: README | Binaries; Homebrew, Chocolatey, Scoop, winget, cargo, conda-forge, npm, Docker image ghcr.io/orange-opensource/hurl source: README |
1 Fetched from the GitHub or GitLab API on . Hover a value for its own date.
When each fits
Written from each project's documented scope, not from preference. Neither tool is ranked.
Bruno
Fits projects that explore and test APIs from a desktop client with collections kept under version control; its README describes a plain text markup language, Bru, for saved API requests. source: README
Hurl
Fits projects that run and test HTTP requests defined in plain text files from the command line; its README describes chaining requests, capturing values and evaluating queries on response headers and body. source: README
More on these tools
Sources
- GitHub REST API: repository, read
- GitHub REST API: repository, read
- GitHub REST API: contributors, read
- GitHub REST API: contributors, read
- GitHub REST API: latest release, read
- GitHub REST API: latest release, read
- GitHub REST API: commits, read
- GitHub REST API: commits, read
- Docs: Send Requests Overview, read
- README, read
- README, read
- Docs: Testing, read
- Docs: Command Options, read
- Docs: CI/CD Integration, read
- Docs: Bruno CLI, read
Documented facts collected 2026-09-22. See the methodology for how metrics and facts are gathered.