Bruno
usebruno · API tools
GitHub stars
47,953Awaiting first sync
No measured star history yet
What is Bruno?
Bruno is built on one idea: an API collection should be ordinary files that sit next to your code, not an account in someone else's cloud. Requests, folders and environments are text on your disk, so Git handles history, review and sharing. The project says it has no plans to add cloud sync, and the site states there is no account or login.
Bruno is a desktop app for sending and testing API requests that works fully offline. Collections are saved as plain text files in a folder, in Bru or YAML format, so they sit in Git next to your code. It runs on macOS, Windows and Linux and has a command line tool for automated runs.
Core capabilities
- Store requests, folders and environments as plain text files in your own Git repository.
- Write JavaScript scripts and tests, and keep secrets out of shared files with secret variables or a .env file.
- Run whole collections from the bru command line or a Docker image, and import from Postman, Insomnia or OpenAPI.
Collections that live in your repo
Each request is its own file. Since version 3.0, Bruno can save collections as YAML that follows the OpenCollection specification (an opencollection.yml at the root, one .yml file per request, an environments folder). The older Bru format with .bru files is still supported, and both can be mixed in one collection. In the open-source app, teams use Git from a terminal or editor: git init in the collection folder, then commit, push and pull as usual.
- Git
- Bru
- YAML
- Offline
Scripts, tests, secrets and the command line
Pre-request and post-response scripts are written in JavaScript, with request chaining and dynamic variables for random names, emails and UUIDs. Tests use test() blocks with Chai expect. Environments are files you pick from a menu. Secret variables are stored encrypted on your own machine and are not written into the environment file; a .env file works too. The bru CLI (npm install -g @usebruno/cli, Node 18 or newer) runs a request, a folder or a collection and writes JSON or JUnit reports.
- JavaScript
- Tests
- Secrets
- CLI
Install, import and licence
There is no server to host: download the app for macOS, Windows or Linux, or install it with Homebrew, Chocolatey, winget, Snap, Flatpak or Apt. Importing accepts Postman collections, Insomnia v4 and v5 files, OpenAPI 2.0 and 3.x, WSDL, and a Git clone. The code is MIT licensed. Bruno also sells Pro and Ultimate editions with extra features; this profile covers only the free app.
- MIT
- Desktop app
- Import
- Homebrew
Where it fits
Use cases
- 01
Move a team's API requests out of Postman
Export a collection from Postman as JSON, choose Import Collection in Bruno and select the file. Requests, variables and common pm scripts are converted, and you can then commit the new folder to Git.
- 02
Review API changes like code
Open the collection folder in Git, edit requests in Bruno, then run git add and git commit from a terminal. Teammates pull the branch and review the changed request files in a normal pull request.
- 03
Run API tests in a CI pipeline
Write test blocks with Chai expectations and keep per-environment values in the environments folder. In the pipeline, run bru run with the --env flag and a JUnit report, or use the usebruno/cli Docker image.