What it does
Bruno is a local-first API client with a desktop interface and CLI runner. Collections live on the filesystem as readable request files rather than requiring a cloud workspace.
Why it’s interesting
API changes and their tests can be reviewed together in a pull request. Keep credentials out of committed collection files and inject environment-specific values at runtime.
Real-world use case
Store an API collection beside a backend service. Developers run it locally while CI checks response status codes and important fields.
What I can learn
- 01
Language tooling
parse the Bru request format into structured data.
- 02
Local-first UX
synchronize files with an Electron interface.
- 03
CLI orchestration
resolve variables, send requests, and evaluate assertions.
One thing to explore
Bru language parser
Follow the implementation and connect it to the learning points above.
Explore the source (opens in a new tab)10-Minute Challenge
Run a GitHub API assertion
Before you start: Node.js, npm, and network access. GitHub may rate-limit anonymous API requests.
- Create a collection folder containing bruno.json and github.bru with the contents below.
- From that folder, run npx @usebruno/cli run.
- Change the expected status code and confirm that the assertion fails.
{ "version": "1", "name": "API demo", "type": "collection", "ignore": ["node_modules", ".git"] }meta { name: GitHub Zen type: http seq: 1}
get { url: https://api.github.com/zen body: none auth: none}
assert { res.status: eq 200}npx @usebruno/cli run