macrostack
Migration guide · Layer 5

Postman → Bruno

What it saves, what actually moves, what you rebuild — and the thing that catches people.

What it costs, and what it saves

Postman's pricing page, as listed on 2026-10-03: Free is $0, and Postman calls Free and Solo 'single-player plans' with 1 user included. Solo is $9/month billed annually. Team is $19 per user/month billed annually. Enterprise is priced by quote, and annual billing saves 'up to 25%'. Bruno's pricing page, the same day: the MIT-licensed Open Source edition is $0 and includes the API client, scripting, collection runner and secret management. Pro is $6 per user/month and Ultimate $11 per user/month, both billed annually; only Ultimate includes bulk Postman import and secret-manager integrations. At those listed rates, a 10-person team pays $190/month on Postman Team, $110/month on Bruno Ultimate, or $0 on Bruno Open Source. Bruno is a desktop app that saves collections as files, so there is no server to pay for.

95
Bruno
MIT
Effort: Estimate: one to two hours per collection to import and check, plus 1–3 days if the team has heavy pre-request and test scripts or runs Newman in CI. A small team can usually finish within a week.

Moves cleanly

Bruno's importer (+ → Import Collection) reads Postman Collection v2.0 and v2.1 JSON. It rebuilds folders, requests, headers, bodies and auth settings (basic, bearer, API key, AWS Signature v4). It also translates most pm.* script calls to Bruno's own API: pm.test, pm.expect, pm.environment, pm.globals, pm.collectionVariables, pm.response, pm.request, pm.cookies, pm.sendRequest and setNextRequest. Postman environment files import through Environments → Configure environments → Import environment, with every value turned into a string. On Ultimate, a full Postman data-dump zip can be imported in one go.

You rebuild

Secret values. Postman keeps local values off its cloud by default, and a Postman help article says current values don't carry over through export and import. Tokens and keys therefore arrive empty and must be re-entered as Bruno secret variables or in a .env file. Also set up again: Postman Vault references, monitors, mock servers, Flows, Private API Network listings and workspace sharing (replaced by sharing the collection folder through Git). Scripts that use Postman-only packages (postman-collection, postman-runtime, newman, @postman/*) will fail, Bruno says, and must be rewritten.

What Postman costs you today

Free tier centered on a single user; paid plans are Solo $9, Team $19, and Enterprise $49 per user/month (billed annually), with metered AI credits and usage caps (API calls, monitors) layered on top.

What actually holds you in

By default, collections and request history live in Postman's cloud tied to an account, and the platform steers toward its hosted workspaces. Export and newer Git integration exist, but the account requirement and proprietary collection format can make fully local or vendor-neutral workflows less straightforward.

What you are moving to

Bruno is an open-source desktop API client that keeps every request as a plain-text .bru file on your filesystem, so collections version-control in git right alongside the code they test. It runs entirely offline with no account required, imports existing Postman collections, and is notably lightweight and quick to start. The free core is fully featured for individuals and small teams; advanced Git, SSO, and org-scale management sit on paid Pro and Ultimate tiers.

Free and open-source core; optional Pro ($6/user/mo) and Ultimate ($11/user/mo) for advanced Git, SSO, and support

Bruno strengths

  • Fully open-source (MIT)
  • Collections are plain .bru files you version-control in git
  • Works offline with no account
  • Lightweight and fast to start
  • Imports Postman collections

What you give up

  • Advanced Git, SSO, and org features require paid Pro/Ultimate tiers
  • Younger ecosystem than Postman
  • Postman sandbox scripts may need manual rewriting on import
  • No built-in cloud sync for non-technical teammates

The migration, step by step

  1. 1List what you use in Postman: collections, environments, globals, monitors, mocks and any Newman jobs in CI. Export each collection (··· → View more actions → Export → Collection v2.1) and each environment (Environments → ··· → Export). Or request a full dump under Settings → Account settings → Export Data.
  2. 2Install Bruno and create a Git repository for the collections. Import with + → Import Collection, pick the file and choose a folder inside the repo. Then import each environment JSON through Environments → Configure environments → Import environment. Bruno can save collections as OpenCollection YAML, which it recommends for new collections, or as the original .bru files.
  3. 3Work through the import prompts. Install the npm packages Bruno detects. Switch a trusted collection to Developer Mode only if its scripts need lodash, moment, crypto or fs. Re-enter secrets as secret variables, which Bruno stores encrypted on the machine and never writes to the file, or put them in a .env file.
  4. 4Run each collection in the app and from the CLI (npm install -g @usebruno/cli, then bru run --env <name>). Compare pass/fail results with your Postman or Newman runs against the same environment, and fix any lines the translator left as pm.* calls.
  5. 5Parallel run in CI: add a bru run job next to the existing Newman or Postman CLI job for a sprint, and keep both until their results match on every run.
  6. 6Cutover: commit the collections and tell the team where the repo lives. Remove the Newman job and reduce Postman seats at renewal. Archive one final Postman export for reference.

The gotcha

Bruno's import succeeds even when a script cannot be translated. The converter in Bruno's repository first tries a code-level translation, then falls back to text replacement. If both fail, it keeps the original Postman code unchanged. Any pm.* call without a mapping stays in the request and fails only when the request runs; in the converter source read on 2026-10-03 we found no mapping for pm.vault, pm.visualizer or pm.iterationData. Scripts that used libraries Postman's sandbox provides, such as lodash, moment or crypto, also need the collection switched from Safe Mode to Developer Mode. Bruno warns that in Developer Mode scripts can access the filesystem and run system commands, so turn it on only for collections you trust. Run every imported collection once, and search the files for leftover 'pm.' before you call the migration finished.

When to stay on Postman

Stay on Postman if your team relies on its cloud features: monitors running on Postman's servers, mock servers, Flows, the Private API Network, or workspaces shared with people who won't use Git. The same goes if you need Enterprise governance such as advanced role-based access and audit logs. A solo developer on Postman's Free plan already pays nothing, so for them the case for Bruno is keeping collections as files in Git, not saving money.

Compare firstAll 4 Postman alternatives, rankedWhere this sitsLayer 5 — Applications

More Layer 5 migrations

Figures verified 2026-07-05 against vendor pricing pages. Prices change and migrations differ by estate — treat the cost delta as a starting model, not a quote. Rankings and recommendations here are merit-only; affiliate income never changes a verdict. See our methodology.

The Macrostack brief

New swaps, worth your inbox.

A short, occasional email when we add a high-intent alternative or ship a new head-to-head. No spam, no selling your address — unsubscribe in one click.