Bruno API Client: The Open Source Postman Alternative (2026)
A fast, Git-friendly API client that stores collections on your filesystem
Start Building with Hypereal
Access Kling, Flux, Sora, Veo & more through a single API. Free credits to start, scale to millions.
No credit card required • 100k+ developers • Enterprise ready
Bruno API Client: The Open Source Postman Alternative (2026)
If you have been frustrated by Postman's cloud-sync requirements, account mandates, or pricing changes, you are not alone. Bruno is an open-source API client that takes a fundamentally different approach: your API collections live as files on your filesystem, not in someone else's cloud.
This guide covers everything you need to know about Bruno in 2026 -- installation, core features, how it compares to Postman, and why teams are switching.
Why Bruno Exists
Postman changed its model over the years. What was once a simple desktop app now requires cloud accounts, pushes team collaboration features, and has moved many features behind paid tiers. For developers who just want to test APIs without vendor lock-in, this is frustrating.
Bruno was created to solve this. Its core principles:
- Filesystem-based collections. Your API requests are stored as plain-text files using Bru markup language. No cloud, no sync, no account required.
- Git-friendly. Because collections are files, you can version control them alongside your code.
- Offline-first. Bruno works entirely without an internet connection.
- Open source. MIT licensed. You can inspect, modify, and contribute to the code.
Installation
Bruno is available for macOS, Windows, and Linux.
Desktop App
# macOS (Homebrew)
brew install bruno
# Windows (Chocolatey)
choco install bruno
# Windows (Scoop)
scoop install bruno
# Linux (Snap)
snap install bruno
# Linux (apt - Debian/Ubuntu)
sudo apt install bruno
Or download the installer directly from usebruno.com.
Bruno CLI
For CI/CD pipelines and automated testing, install the CLI:
npm install -g @usebruno/cli
# Run a collection
bru run --env production
Getting Started
Create a Collection
- Open Bruno and click Create Collection.
- Choose a folder on your filesystem where the collection files will live. Pick a location inside your project repository for Git tracking.
- Name your collection (e.g., "My API").
Bruno creates a folder structure like this:
my-api/
bruno.json # Collection config
environments/
development.bru # Environment variables
production.bru
users/
get-all-users.bru # Individual requests
create-user.bru
get-user-by-id.bru
Create Your First Request
- Right-click on your collection in the sidebar.
- Select New Request.
- Enter a name and choose the HTTP method.
Here is what a .bru file looks like:
meta {
name: Get All Users
type: http
seq: 1
}
get {
url: {{baseUrl}}/api/users
body: none
auth: bearer
}
auth:bearer {
token: {{authToken}}
}
headers {
Content-Type: application/json
Accept: application/json
}
assert {
res.status: eq 200
res.body.length: gt 0
}
tests {
test("should return users array", function() {
const data = res.getBody();
expect(data).to.be.an('array');
expect(data.length).to.be.greaterThan(0);
});
}
The Bru language is human-readable and diff-friendly -- exactly what you want in version control.
Set Up Environments
Environments let you switch between development, staging, and production variables:
# environments/development.bru
vars {
baseUrl: http://localhost:3000
authToken: dev-token-12345
}
# environments/production.bru
vars {
baseUrl: https://api.example.com
authToken: {{process.env.PROD_AUTH_TOKEN}}
}
Switch environments from the dropdown in the top-right corner of Bruno's UI.
Key Features
Scripting
Bruno supports JavaScript for pre-request and post-request scripts:
// Pre-request script
const timestamp = Date.now();
bru.setVar("timestamp", timestamp);
// Post-request script
const response = res.getBody();
bru.setVar("userId", response.id);
Assertions
Built-in assertions let you validate responses without writing full test scripts:
assert {
res.status: eq 200
res.body.data.id: isNumber
res.body.data.email: contains @
res.responseTime: lt 500
}
Collection Runner
Run all requests in a collection sequentially or in parallel:
- Right-click on the collection.
- Select Run Collection.
- Choose your environment.
- View results in the runner output.
Import from Postman
Migrating from Postman is straightforward:
- Export your Postman collection as JSON (Collection v2.1).
- In Bruno, go to File > Import Collection.
- Select Postman Collection and choose your exported file.
- Bruno converts everything to
.brufiles in your chosen folder.
# Your Postman collection becomes Git-trackable files
git add my-api/
git commit -m "Import API collection from Postman"
Bruno vs Postman: Complete Comparison
| Feature | Bruno | Postman |
|---|---|---|
| Price | Free (open source) | Free tier + paid plans ($14-$49/user/mo) |
| Storage | Local filesystem | Cloud (requires account) |
| Git integration | Native (files are plain text) | Limited (JSON export/import) |
| Offline mode | Full functionality | Limited without cloud |
| Account required | No | Yes (as of 2023) |
| Collection format | .bru (human-readable) |
JSON (verbose) |
| Scripting | JavaScript | JavaScript |
| Environment variables | File-based | Cloud-synced |
| CLI for CI/CD | @usebruno/cli (free) |
Newman (free) + paid for monitors |
| Team collaboration | Git (pull requests, branches) | Built-in (cloud-based) |
| API documentation | Not built-in | Built-in (paid) |
| Mock servers | Community plugins | Built-in (paid) |
| Performance | Fast (lightweight) | Heavier (Electron + cloud) |
| Privacy | All data stays local | Data on Postman servers |
When Postman Is Still Better
Postman still wins for teams that want built-in cloud collaboration, API documentation generation, and mock servers without any setup. If your team already relies on Postman's workflow features, the switching cost may not be worth it.
When Bruno Is Better
Bruno is the better choice if you:
- Want your API collections version-controlled with your code
- Work offline frequently
- Care about data privacy (no cloud dependency)
- Dislike mandatory account requirements
- Want a fast, lightweight tool
- Use Git-based workflows for everything
Bruno CLI for CI/CD
The Bruno CLI lets you run collections in CI/CD pipelines:
# .github/workflows/api-tests.yml
name: API Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g @usebruno/cli
- run: bru run --env production --output results.json
working-directory: ./api-collection
- name: Upload results
uses: actions/upload-artifact@v4
with:
name: api-test-results
path: ./api-collection/results.json
CLI Options
| Command | Description |
|---|---|
bru run |
Run all requests in the current collection |
bru run --env <name> |
Run with a specific environment |
bru run --output <file> |
Save results to a file |
bru run request.bru |
Run a specific request |
bru run folder/ |
Run all requests in a folder |
bru run --recursive |
Run requests in all subfolders |
Advanced Tips
Secret Management
Never commit secrets to Git. Use environment variables:
# environments/production.bru
vars {
baseUrl: https://api.example.com
}
vars:secret [
authToken
]
Secret variables are prompted at runtime and not stored in the .bru file.
Organizing Large Collections
For large APIs, organize your collection by resource:
my-api/
bruno.json
environments/
auth/
login.bru
refresh-token.bru
logout.bru
users/
list-users.bru
create-user.bru
update-user.bru
delete-user.bru
orders/
list-orders.bru
create-order.bru
This maps cleanly to your API routes and makes navigation intuitive.
Frequently Asked Questions
Can I use Bruno for GraphQL? Yes. Bruno supports GraphQL requests natively. Select "GraphQL" as the request type when creating a new request.
Does Bruno support WebSocket testing? WebSocket support is available in newer versions. Check the Bruno changelog for the latest capabilities.
Is Bruno really free? The core Bruno app is free and open source (MIT license). Bruno offers an optional paid "Golden Edition" with advanced features like visual Git diff and secret management, but the free version covers the vast majority of use cases.
Can I use Bruno with teams? Yes. Since collections are files, teams collaborate through Git -- pull requests, code reviews, branching, and merging all work naturally.
Wrapping Up
Bruno is the API client that developers have been asking for: fast, offline-first, Git-friendly, and free. If you are tired of Postman's cloud requirements and want your API collections to live alongside your code, Bruno is the best alternative available in 2026.
The combination of a clean desktop UI, the Bru markup language, and a CLI for CI/CD makes it a complete tool for individual developers and teams alike.
If you are building applications that consume AI APIs for media generation, try Hypereal AI free -- no credit card required. Bruno is a great tool for testing and integrating the Hypereal API into your projects.
Related Articles
Start Building Today
Get 35 free credits on signup. No credit card required. Generate your first image in under 5 minutes.
