Bruno
An API client that stores collections as plain files in your repository instead of in someone’s cloud, for exercising an API while you build it.
Homebrew cask Homebrew formula Direct download
What it does
Bruno is a Postman-style client for HTTP APIs, with one structural difference: a collection is a directory of .bru text files on disk. That makes requests reviewable in a pull request, mergeable, and versioned alongside the code they exercise.
There is no account and no mandatory sync. Environments and secrets are files too, so secrets stay out of the collection by convention (.env, or a gitignored environment file).
The CLI
bruno-cli runs the same collections headlessly — the normal way to put API checks in CI:
bru run --env staging --reporter-json results.jsonNotes
The GUI cask and the CLI formula are versioned separately and can drift; keep them close when using .bru features added recently.
Alternative to
| Alternative | Type | Trade-off |
|---|---|---|
| Postman | Freemium | The market standard, but account-bound and increasingly cloud-first |
| Insomnia | Freemium | Lighter than Postman, now also account-gated |
| Hoppscotch and Yaak | Open source / Freemium | Bruno’s file-based instincts |
.http files in VS Code or JetBrains | — | No separate app at all |
| curl or HTTPie | Open source | For anything that does not need to be saved |
Install
brew install --cask bruno # GUI
brew install bruno-cli # CLI