Bruno API Client: Open Source Postman Alternative
Bruno is an open source API client that stores every request as a plain text .bru file on your disk instead of syncing to a vendor's cloud. Reach for it if you want your API collections to live in Git next to your code; skip it if your team depends on real-time cloud collaboration, since Bruno is offline-only by design.
Addressing API Client Challenges
Testing REST and GraphQL endpoints usually means keeping request collections inside a client's own cloud account, where a pull request on API changes isn't possible because there's no text file to diff. Bruno's collections live as `.bru` files on disk, so adding a new endpoint or changing a header shows up as an ordinary Git diff instead of a change buried inside someone's synced workspace.
What is Bruno?
Bruno is an open source API client for testing REST and GraphQL APIs, built as a desktop IDE rather than a browser tool. It saves every request as a `.bru` plain text file on disk instead of inside a cloud account, and its GitHub topics include api-client and http-client. The project has 46,157 GitHub stars. Reach for it if you want local files under your control; skip it if you'd rather test APIs from a browser with nothing to install.
Key Capabilities of Bruno
- ✓Stores every API request as a `.bru` plain text file in a folder on your filesystem, rather than in a proprietary or cloud-hosted format.
- ✓Works with Git or any other version control system, so API collections get diffed and reviewed like the rest of your codebase.
- ✓Ships a separate Bruno CLI package (`@usebruno/cli`) so a collection can execute outside the GUI — install with `npm install -g @usebruno/cli` and trigger it from a script or pipeline step.
- ✓Publishes official Docker images for the CLI on Docker Hub and the GitHub Container Registry, offering `alpine` and `debian` builds for both `linux/amd64` and `linux/arm64` targets, useful in CI/CD.
- ✓Installs as a binary for Mac, Windows, and Linux, or through package managers including Homebrew, Chocolatey, Scoop, winget, Snap, Flatpak, and Apt.
- ✓Runs offline by design. The README says there are no plans to add cloud sync, ever.
- ✓Supports both REST and GraphQL testing inside the same client, per the repo's graphql-client and rest-api topics.
Installing Bruno
Bruno ships as a binary download for Mac, Windows, and Linux from its website, or through package managers: `brew install bruno` on Mac, `choco install bruno` or `winget install Bruno.Bruno` on Windows, and `snap install bruno` or `flatpak install com.usebruno.Bruno` on Linux (Apt and AUR packages are also documented in the README). The separate Bruno CLI installs via `npm install -g @usebruno/cli`, and official Docker images are published to Docker Hub and the GitHub Container Registry for running it in CI/CD without a local Node.js install.
Strengths
- ✓Collections are plain text `.bru` files, so you can `git diff`, branch, and merge them like any other source file.
- ✓No account or cloud sign-in required to use the core client — the README frames this as a deliberate privacy stance, not a missing feature.
- ✓The CLI and Docker images give you a real path to run collections unattended in CI/CD, not just interactively.
- ✓MIT licensed, so there's no ambiguity about using it in a commercial pipeline.
Considerations for Bruno Users
- △Offline-only is permanent by design — the README says there are no plans to add cloud sync, ever, so teams that want built-in real-time collaboration across a distributed team need a different tool or their own sync layer, like a shared Git remote.
- △The README doesn't document version numbers, release cadence, or a changelog, so you can't tell from the repo description alone how mature any given feature is.
- △Some capabilities sit behind separate paid versions — the README points to a pricing page for 'additional features' without listing in the README itself what's free versus paid.
Comparing Bruno to Other API Clients
Frequently Asked Questions About Bruno
Bruno is free and open source under the MIT license, and its README says the majority of features are free. Separate paid versions exist for teams that want extra features beyond the core client.
Bruno does not support cloud sync — it runs offline only, and its maintainers have said publicly they don't intend to add cloud sync at any point, to keep collection data on your own device.
Bruno collections can be version controlled: each request is saved as a `.bru` plain text file in a folder on disk, so Git or any other version control system can track it.
Bruno CLI lets you execute a collection's requests outside the GUI, handy for scripted, repeatable test runs. Install it with `npm install -g @usebruno/cli`, then run commands like `bru run` or `bru run folder --env Local`.
Bruno's own description brands it a lightweight alternative to Postman: instead of a cloud-synced account, Bruno keeps every request in a local `.bru` file you can commit to Git alongside your code.
Bruno is released under the MIT license, a permissive open source license with no restriction on commercial use.
Best use cases
- •Keeping a team's API request collection inside the same Git repo as the backend code it tests, so request changes show up in code review.
- •Running a collection headlessly in CI/CD with the Bruno CLI, e.g. `bru run folder --env Local`, to catch broken endpoints before merge.
- •Testing APIs on a laptop with no reliable internet connection, since Bruno doesn't need a cloud account to function.
- •Running the CLI inside a Docker container in a pipeline that isn't allowed to install Node.js or npm on the build host.
Who should try it — and who should skip
Reach for Bruno if your team already lives in Git and treats API test collections as another artifact worth reviewing in a pull request. Skip it if you need built-in real-time collaboration for a distributed team without setting up your own Git workflow — Bruno has no cloud sync and, per its own README, never will.
