Browse the Knowledge Hub211 resources
Bruno vs Postman, after the 2026 changes
Postman 12 put collections in Git and its March 2026 plans made the Free tier single-user. Bruno stayed free, offline and file based. This compares them on storage, offline use, pricing, CI runners and migration, and says which one to pick.
- options
- 2
- dimensions
- 23
- checked
- October 2026
The short answer
Our recommendation
For an engineering team building API tests that live in a repository and run in CI, choose Bruno. Collections are plain files with no account behind them, the client and CLI are MIT licensed, and every developer and tester can work on the same collection without a paid seat. bru run writes JUnit, JSON and HTML reports from the same files you review in pull requests, so the path from a request you were exploring to a pipeline gate is short.
Choose Postman when the collection is shared well beyond engineering: support, product, partners or customers who read and run requests in a workspace, or when you depend on hosted monitors, mock servers, governance and the wider Postman ecosystem. Postman 12 also closed much of the Git gap, writing collections as per-request YAML files in your repository, so “Postman cannot live in Git” is no longer a reason to leave.
Cost is now the sharpest difference. Since March 2026 Postman’s Free plan is limited to one user and cannot create a team, so a shared workspace means Team seats at a list price of $19 per user a month, billed annually. Bruno’s open source edition costs nothing for any team size, with Pro at $6 per user a month only if you want private Git providers inside the app. If you already run a healthy Postman estate across several roles, keep it. If you are starting a new suite owned by engineers, start in Bruno.
Side by side
23 dimensions that actually decide it
Download or copy the table if you are writing this up for a decision record.
Bruno
Offline-first, open source API client that stores collections as YAML or .bru files in your own repository, with no account or vendor cloud.
MIT and free; paid Pro and Ultimate per user
Postman
API platform with a request client, cloud workspaces, monitors, mocks and governance, plus a Git-native mode since version 12.
Proprietary; Free and Solo single-user, Team per user
| Dimension | Bruno | Postman |
|---|---|---|
| Storage, offline use and collaboration | ||
Where collections live Decides who controls the data and how changes are reviewed. | Plain files in a folder you choose, usually your repository. Nothing leaves your machine. | Postman cloud workspaces, or Collection v3 YAML in your repository through Local View. |
Account required Security reviews and contractors without a company login make this a real constraint. | No. The app and CLI work without any account. | For collections and environments, yes. Signed out, the lightweight client sends requests only. |
Offline use Air-gapped networks, restricted client sites and travel. | Fully offline by design, including runs, environments and scripts. | Lightweight client sends requests offline; the Scratch Pad was removed from version 10.18. |
Review in pull requests Unreviewed API tests drift from the API they claim to check. | Every request is its own text file, so diffs are small and readable. | Per-request YAML diffs well in Local View; cloud-only collections are not reviewable as code. |
Sharing beyond engineering Support, product and partner teams rarely clone a repository. | Through the repository, which suits engineers and few others. | Shared workspaces, comments, published documentation and public collections. |
| Writing requests and tests | ||
Test scripting | JavaScript against bru and res objects, with Chai assertions. | JavaScript pm API with Chai assertions, run in Postman’s sandbox. |
Checks without code Lets testers who do not write JavaScript add meaningful assertions. | Declarative assertions such as res.status eq 201, stored in the request file. | Snippets generate script code; assertions still live as JavaScript. |
Protocols | REST, GraphQL, gRPC, WebSocket and SOAP. | HTTP, GraphQL, gRPC, WebSocket, Socket.IO and MQTT. |
Secrets Tokens in shared environments or committed files are the most common leak. | Secret variables never written to disk, .env files and external secret managers. | Postman Vault for local secrets; environments sync to workspaces unless kept out. |
Mock servers Lets front end and test work start before an endpoint exists. | Local mock server, in beta, stored next to the collection. | Hosted mock servers on every plan, plus local mocks from the CLI. |
| Running in CI | ||
Command line runner The runner, not the client, is what your pipeline depends on. | bru run, installed from npm as @usebruno/cli. | Postman CLI. Newman is no longer maintained and cannot run v12 collections. |
CI reports If JUnit XML disappears, so does the test tab in your CI system. | JSON, JUnit and HTML for every collection format. | JUnit, JSON and HTML for v2.1 collections only; v3 YAML gets terminal output. |
Known CLI gaps These are the failures that appear only after the pipeline is built. | Safe Mode by default blocks npm packages and file access until --sandbox=developer. | No OAuth 2.0, no body files from the working directory, gRPC and GraphQL runs paid only. |
GitHub Actions | Official usebruno/bruno-cli-action, exposing pass and fail counts as outputs. | Official postmanlabs/postman-cli-action. |
Scheduled monitoring A cheap synthetic check on staging or production. | None hosted. Schedule bru run in your own CI. | Hosted monitors: 1,000 requests a month on Free, 10,000 on paid plans. |
| Cost | ||
Licence | MIT for the client and CLI. | Proprietary. Free to install, no open source edition. |
Free use by a team The question most people searching this comparison are really asking. | Yes, any team size, collaborating through your own Git. | No. Free and Solo are single-user; shared workspaces need Team. |
Paid list prices, 13 October 2026 Read from each vendor’s pricing page; both show annual billing. | Pro $6 and Ultimate $11 per user a month, billed annually. | Solo $9 a month; Team $19 per user a month, billed annually; Enterprise quoted. |
What paying adds | Private Git providers in the app, unlimited workspaces and OpenAPI syncs, support. | Shared workspaces, higher monitoring, AI and API allowances, governance on Enterprise. |
| Migration and risk | ||
Importing the other tool’s collections Cheap trials make for honest decisions. | Imports Postman v2 and v2.1 collections and environments, translating common pm scripts. | Imports OpenAPI, cURL and several other clients’ formats, though few teams move this way. |
Bulk migration of a whole account | Postman data dump import is an Ultimate edition feature. | Not applicable. |
Recent breaking changes Both tools changed format and runtime behaviour in 2026. | Version 4 moved secret configuration and made bru.setEnvVar write to disk. | Version 12 introduced Collection v3 and retired Newman as the runner. |
Ecosystem and familiarity Vendor-published collections and onboarding speed for new hires. | Growing quickly, smaller body of answers and integrations. | The format most vendors publish and most testers already know. |
A tick marks the option we would pick on that row alone. Rows without a tick are close enough that the choice should come from elsewhere in the table. Checked October 2026; tool releases move quickly, so verify anything you are about to spend money on.
Pick one
Which one fits your situation
Find the list that describes your team, not the tool with the longest feature table.
Choose Bruno if
- API tests should live beside the service code and change in the same pull request.
- Several developers and testers need the collection and you do not want to buy seats for each.
- Security or client rules forbid sending request data to a vendor cloud.
- Your CI dashboard needs JUnit XML from every run.
- You work offline or on restricted networks.
Choose Postman if
- People outside engineering read, run or comment on the collection.
- You rely on hosted monitors, hosted mock servers or published documentation.
- An established Postman estate already works and the team knows its variable scopes.
- Partners and vendors hand you Postman collections and expect one back.
- Enterprise governance, SSO and audit features are procurement requirements.
What changes the answer
Conditions that reverse the recommendation
A recommendation with no stated limits is a guess. These are the situations where ours does not hold.
The collection is a product for other people
If customers, partners or support staff consume the collection, Postman’s workspaces and published documentation do work that a Git repository cannot.
Monitoring is part of the job
Scheduled runs from Postman’s infrastructure are cheap synthetic monitoring. With Bruno you build the schedule, alerting and history in your own CI.
You already pay for Postman and use what you pay for
A healthy estate with monitors, mocks and shared workspaces in daily use is an asset. Moving it spends effort to arrive at fewer features.
Your scripts lean on Postman-only packages
Collections built on pm.require or Postman package libraries do not translate. Bruno flags them as unsupported, so the rewrite cost belongs in the decision.
In detail
Where the differences actually bite
The dimensions from the table, with the reasoning that would not fit in a cell.
Postman 12 changed the Git argument, not the account argument
For years the case for Bruno was simple: Postman stored collections in its cloud as large JSON documents, and Bruno stored them as small text files in your repository. Postman 12 removed most of that difference. Connect a workspace to a local repository, work in Local View, and each request is written as a Collection v3 YAML file under a postman/ folder. Branches switch what the app shows, and a changed assertion is a small diff.
What Postman 12 did not change is that collaboration in the app runs through an account and a workspace. Collections and environments need a signed-in workspace; signed out, the lightweight client builds and sends requests and keeps history, but does not offer collections. Bruno has no account at all. The app reads and writes a folder, and Git, your editor and your reviewers see exactly the same files.
So ask a narrower question than “Git or cloud?”. Ask who needs to touch the collection and whether each of them can, or should, have a Postman seat. If the answer is “engineers, through pull requests”, Bruno fits with less ceremony. If the answer includes people who will never clone a repository, Postman’s workspaces are doing real work.
What a shared collection costs after March 2026
Postman changed its plans in March 2026. Before that, the Free plan could create a team and invite up to three users. Now Free is limited to one user and cannot create a team, Solo is a paid single-user plan, and shared workspaces need Team, listed at $19 per user a month billed annually on 13 October 2026. Teams on legacy plans keep them until renewal, which is when many find out.
Bruno’s open source edition has no seat count. Collection runs are unlimited on every edition. Pro, at a list price of $6 per user a month billed annually, adds private Git providers inside the app, unlimited workspaces and OpenAPI syncs and support; Ultimate, at $11, adds enterprise administration. Nothing stops a team on the free edition from committing and pushing the collection with ordinary Git tools.
Model the real cost before deciding. Count everyone who edits or reviews the collection, add metered usage such as Postman monitoring requests and AI credits, and include the migration effort. For a ten person engineering team the seat difference is visible in a budget line; for a three person team on a working Postman setup it may not justify a move.
The CI runners behave differently
Postman’s documentation describes Newman as no longer maintained. It only understands v2.1 JSON and cannot run collections created or updated in Postman 12. The Postman CLI replaces it: postman collection run takes a file or a collection ID, most Newman flags carry over, and a local file runs without signing in. Two catches shape the pipeline. JUnit, JSON and HTML reporters work only for v2.1 collections, so converting to v3 YAML removes the JUnit file your CI test tab reads. And the CLI cannot use OAuth 2.0 authorisation or send body files from the working directory.
bru run reads the same files the app edits, in either YAML or .bru format, and writes JSON, JUnit and HTML reports for all of them, with options to strip headers and bodies from reports so tokens stay out of artefacts. Its catch is Safe Mode: since CLI 3.0, scripts that require npm packages, the filesystem or Node built-ins fail until you pass --sandbox=developer, which you should only do for collections you trust.
Both publish an official GitHub Action. In either tool, pass secrets from CI with --env-var rather than committing them in environment files, and tag a smoke subset to run on every pull request with the full collection on merge.
Offline and data residency
Bruno works entirely offline and sends nothing to a vendor service, which is why it is often the answer when a client contract, a regulated environment or an air-gapped network rules out cloud tools. Request examples saved in a collection frequently contain production-like data, and with Bruno that data sits in a repository you already govern.
Postman removed its offline Scratch Pad from version 10.18 and points signed-out users to the lightweight API Client, which sends HTTP, WebSocket, gRPC, GraphQL and other requests offline and stores work locally. For one person debugging an endpoint that is enough. For a team maintaining a regression collection offline, it is not, because collections and environments live in workspaces.
Before you commit
Mistakes teams make on this decision
Assuming the Free plan still covers a small team
Advice written before March 2026 says Postman is free for up to three collaborators. It no longer is for new teams, and legacy plans change at renewal. Price seats before the renewal date, not after.
Converting to v3 YAML and losing JUnit reports
The Postman CLI writes JUnit only for v2.1 collections. Teams that convert for Git review and keep the same pipeline lose their CI test report without a failing build to warn them.
Copying Newman commands from old tutorials
A decade of examples use newman run. Replace it with postman collection run, which keeps most flags, or with bru run if you are moving to Bruno.
Secret variables missing in bru run
Bruno deliberately does not write secret variables to disk, so the CLI sends empty tokens. Pass them with --env-var or read them from process.env through a .env file excluded from Git.
Mixed Bruno versions on one collection
Collections saved by Bruno 4 may not load correctly in older versions. Upgrade the whole team together and pin the CLI version in CI.
Moving an API suite between tools?
QAble builds API regression suites and the CI around them. We will migrate a representative collection, run both in your pipeline and hand back the differences.
API testing servicesSwitching cost
Moving from Postman to Bruno
Export each collection from Postman as v2 or v2.1 JSON, export each environment, and import them in Bruno. During import Bruno translates common script APIs such as pm.test, pm.environment and pm.response into Bruno equivalents. Unsupported pm calls are left as they are and fail at runtime, and Postman-specific packages such as postman-collection are not supported, so search the imported scripts for remaining pm references before the first run. A Preserve scripts option keeps scripts untouched if you would rather convert by hand.
Importing a whole Postman data dump at once is a Bruno Ultimate feature. For most teams, importing collection by collection on the free edition is fine, and it doubles as triage: collections nobody can explain are the ones to leave behind.
Run both for a sprint. Point bru run at the imported collection in CI next to the existing Postman CLI job, compare pass counts and failures, and fix differences in variable scope and secrets, which are where most mismatches come from. Retire the Postman job only once the Bruno run has been green on main for a week, and keep the v2.1 exports until then.
Questions
Questions people ask before choosing
Is Bruno better than Postman?
For engineering teams who want API tests in the repository, reviewed in pull requests and run in CI without paid seats, yes. Bruno is free for any team size and its CLI writes JUnit reports from every collection format. Postman is better when people outside engineering use the collection, or when you rely on hosted monitors, mocks, published documentation and enterprise governance.
Is Bruno free?
Yes. The Bruno app and CLI are open source under the MIT licence, need no account and allow unlimited collection runs. Pro and Ultimate are paid per user, at list prices of $6 and $11 a month billed annually on 13 October 2026, and add private Git providers inside the app, unlimited workspaces and OpenAPI syncs, support and enterprise administration.
Is Postman still free?
For one person, yes. The Free plan includes the request client, Collection Runner, Postman CLI, mock servers and 1,000 monitoring requests a month. Since March 2026 it is limited to one user and cannot create a team, so shared workspaces need the Team plan, listed at $19 per user a month billed annually on 13 October 2026.
Can Bruno import Postman collections?
Yes. Bruno imports Postman v2 and v2.1 collection exports and environment exports, and translates common script calls such as pm.test and pm.environment. Unsupported pm calls stay as written and fail at runtime, so review scripts after import. Bulk import of a full Postman data dump requires the Ultimate edition.
Can Postman collections be stored in Git now?
Yes. Since Postman 12, a workspace can connect to a local repository and Local View writes collections as Collection v3 YAML files, one per request. That makes review practical. Note that Newman cannot run v3 collections and the Postman CLI writes JUnit reports only for v2.1, so check the pipeline before converting.
Can I use Bruno and Postman together?
Yes, and many teams do during a move. A common split is Postman for exploration and sharing with non-engineers, and Bruno for the regression collection that lives in the repository and runs in CI. Bruno imports Postman exports, so the regression pack can start as a copy. Over time, keep one source of truth for each collection, or the two drift.
Does Bruno work offline?
Completely. Bruno is offline-first and does not require an account, so requests, environments, scripts and collection runs all work without a network connection to any vendor service. Postman’s signed-out lightweight client sends requests offline, but collections and environments need a signed-in workspace.
What replaced Newman?
The Postman CLI. Postman’s documentation describes Newman as no longer maintained, able to run only v2.1 JSON collections and unable to run collections created or updated in Postman 12. postman collection run keeps the core options such as -e, -g and -r. If you are moving to Bruno instead, bru run is the equivalent.
How we compared
How this comparison was put together
Postman is part of our everyday toolkit: we run it on client work for API exploration, shared regression collections and CI gates through the Postman CLI. Bruno we have evaluated rather than run long term, by importing real collections, running them with bru run in CI and reading its documentation and release notes closely. Read the Bruno rows as a careful evaluation, not as years of production use.
Where the two are close, the row carries no tick. Both write JavaScript tests with Chai, both have official GitHub Actions and both cover the protocols most product teams call. The rows that decide things are storage, accounts, seat cost and how each CLI reports.
Prices and versions were checked on 13 October 2026 against postman.com/pricing, usebruno.com/pricing and each vendor’s documentation. Both tools shipped breaking changes in 2026, so check the current release notes before you plan a migration. If anything here is out of date, tell us and we will correct it.
Tell us where we are wrongComparisons
More comparisons
Playwright vs Cypress
ComparisonArchitecture, parallelism, debugging and language support compared on the same test suite.Cypress vs Selenium
ComparisonWhere each wins, migration cost in both directions, and which teams should not switch.TestRail alternatives
AlternativesTest management platforms compared on cost, integrations and reporting depth.Jira test management tools
ComparisonXray, Zephyr, QMetry and native options compared for teams already on Jira.Selenium vs Playwright
ComparisonArchitecture, browser coverage, languages, waiting, debugging and migration, with a clear pick for new suites.Puppeteer vs Playwright
ComparisonFor testing and for scraping: browsers, languages, CDP access, PDF and tracing, and when Puppeteer still wins.Selenium alternatives
AlternativesPlaywright, WebdriverIO, Cypress and Robot Framework, each matched to the reason teams leave Selenium.Insomnia vs Postman
ComparisonAPI design versus API testing: storage, pricing, CI reporting and which one suits which team.Postman alternatives
AlternativesBruno, Insomnia, Hoppscotch, REST Assured, Karate and SoapUI compared on price, storage and CI, after Postman 12.Vitest vs Jest
ComparisonESM and TypeScript handling, Vite integration, mocking differences and a migration checklist, without invented benchmarks.Pytest vs unittest
ComparisonFixtures, assertions, parametrisation, plugins and running unittest suites under pytest while you migrate.Gradle vs Maven
ComparisonFor test automation teams: Surefire and Failsafe versus the Gradle test task, parallel tests, caching and CI.Jenkins vs GitHub Actions
ComparisonRunning cost, plugins versus actions, runners, test reporting, sharding, security and migration.GitLab vs GitHub
ComparisonThe platform decision for engineering and QA teams: hosting, pricing tiers, CI/CD, security scanning and test reports.Jenkins alternatives
AlternativesGitHub Actions, GitLab CI/CD, Azure Pipelines, CircleCI and TeamCity, and what each costs to run.k6 vs JMeter
ComparisonScripting model, protocols, distributed runs, CI thresholds, reporting and Grafana Cloud k6 pricing.LambdaTest vs BrowserStack
ComparisonLambdaTest, now TestMu AI, against BrowserStack on devices, parallel pricing, tunnels and test reporting.BrowserStack alternatives
AlternativesSauce Labs, TestMu AI, AWS Device Farm and self-hosted grids, with BrowserStack pricing explained.Want the API suite built, not just the client chosen?
QAble designs API test suites with ISTQB-certified engineers, from exploration to CI gates. Start with a free QA audit of your current API coverage.