Postman vs Bruno

Postman keeps collections in a vendor cloud behind an account, while Bruno keeps them as files you control in Git with no cloud sync. This page sets out which fits your team, what each costs to run, and what moving involves.

On this page

Postman vs Bruno: when each option fits your team

Since Postman's March 2026 plan change, many teams are reviewing whether a cloud workspace still fits how they work. Postman's About plans documentation sets the Free plan to one user who cannot create a team, so a shared collection now means a paid seat or a different tool. Postman fits teams that want a managed cloud workspace where the vendor runs sharing, permissions and hosting, and that accept an account as the entry point for every collection and environment. Bruno fits teams that want the opposite trade: collections stored as plain files in a local folder, versioned in Git, with no account and no cloud sync. The Bruno README states that the project is offline-only and has no plans to add cloud sync.

Four questions usually decide the choice. First, the sharing model: if your engineers already review changes through pull requests, a collection in Git gives you history and review without a new workflow, while a Postman workspace gives you shared editing with vendor-managed access. Second, data location: Postman keeps shared collections in its cloud, whereas Bruno keeps files wherever you put the repository, so embedded credentials stay under your own control. Third, CI needs: Postman collections in pipelines usually run through Newman or the Postman CLI, while Bruno provides bru run with test reports, and the migration effort depends on how many collections depend on Postman scripts.

Finally, check whether SSO, SCIM or bulk import require a paid Bruno edition. Bruno's pricing page places Git push, branch operations, remote connections and merge conflict resolution in the app's paid tiers, and the bulk import of a full Postman data dump is included in the Ultimate edition. Git itself still works outside the app on any edition. Confirm these feature boundaries against the current pricing page before you plan, and ask each vendor for written terms covering seats and support.

Which scenarios favor Postman and which favor Bruno

This table matches common situations to the better fit between Postman's cloud workspaces and Bruno's offline, Git-based files. Read each row for the condition that decides the choice, then confirm the plan, edition and feature details against current vendor documentation before you commit.

ScenarioBetter fitCondition that drives the choice
A single developer on the Free planBruno Open SourcePostman's Free plan now covers one user, so the choice depends on whether you need Postman cloud sync or mock servers. Bruno Open Source needs no account and no license key.
A team that already reviews API changes in GitBrunoBruno stores each collection as files in a folder, so requests go through the same pull requests and diffs as code. Git push and merge conflict resolution in the app's Git UI are paid features, though Git itself works outside the app.
A regulated team that cannot store collections in a vendor cloudBruno or self-hosted HoppscotchBruno keeps collections on the local filesystem with no cloud sync. Postman requires a signed-in account for collections and environments, so confirm your policy before you use it.
A team that depends on Postman mock servers and monitorsPostman, unless you replace themBruno is offline-only and has no cloud sync or hosted mocks. Moving these workloads means planning separate tools for mocking and scheduled runs before you retire Postman.
A team that needs SAML SSOHoppscotch Enterprise Edition or Bruno paid editionsPostman places SAML SSO in a paid add-on. Bruno's paid editions cover SAML SSO and SCIM through a license portal, and Hoppscotch Enterprise Edition adds SAML, OIDC, SCIM and audit logs on your own server. Confirm current tiers with each vendor.
A team that runs collections in CIBruno CLI or Hoppscotch CLI, depending on the pipelineBruno provides bru run with test reports. Teams already using Postman's CLI will need to rewrite scripts and reporters during the move.

Where your API collections live and who can reach them

Postman keeps shared collections and environments in its cloud, and working with them requires a signed-in Postman account. Postman retired its offline Scratch Pad mode in 2023, with deprecated support ending on September 15, 2023, so there is no longer a supported way to keep collections purely on a laptop inside Postman. Every collection, environment and variable a team shares therefore sits in a vendor-controlled service, and access depends on the account, the workspace role and the plan. Before you migrate, export your collections and list every environment that holds a token, password or API key, because those values travel with the data you are moving.

Bruno takes the opposite position. Its README states that the app is offline-only, that there are no plans for cloud sync, and that collections are stored directly in a folder on the user's filesystem so teams can share them through Git or another version control system. Credentials that are needed at runtime should be kept out of the committed files, typically in environment files or a secret manager that is not in the repository, and your Git hosting controls then determine who can read the collection. Confirm with your security team where that Git remote is hosted and who holds read access to it, because that becomes the real access boundary.

If you require EU residency, check the scope carefully. Postman's EU Data Residency instance in Frankfurt is available only to Enterprise customers, so a lower-tier Postman plan does not give you that option. With Bruno, collection files stay wherever your Git repository and laptops are located, and a self-hosted Hoppscotch instance stays wherever you deploy it. Ask your Postman account team in writing which features are excluded from the Frankfurt instance, and document the storage location of every Git remote and workstation that will hold collections.

How data control, identity and compliance differ

Postman, Bruno and self-hosted Hoppscotch differ mainly in where API collections, credentials and access controls sit. The cards below cover the decisions that follow from that difference, so compliance and security teams can map each one to their own controls. DeployOpen prepares controls and evidence for your assessment, but independent auditors and certification bodies issue any audit reports or certifications.

Data location

Postman stores shared collections and environments in its cloud, and its EU Data Residency instance in Frankfurt is available only to Enterprise customers. Bruno keeps each collection as files in a folder on the user's device, so the data stays where the folder is. Self-hosted Hoppscotch keeps team workspaces in your own PostgreSQL database. Ask each vendor where embedded credentials and test data are stored, and check that answer against your residency rules.

Identity and single sign-on

Bruno's Open Source edition needs no license management and no sign-in to the app. SAML single sign-on and SCIM provisioning are in the paid Pro and Ultimate editions, which use license keys managed in a license portal. Hoppscotch Community Edition offers OAuth sign-in, while SAML, OIDC, SCIM and audit logs are in its Enterprise Edition. Confirm which identity features each tier includes before you price seats.

Hosting model

Bruno needs no server, because it runs as a desktop binary on macOS, Windows or Linux and works offline. Self-hosted Hoppscotch needs a server you run, a PostgreSQL database and patching, backups and access control for both. Those operating tasks are the main recurring work, so decide whether your team can run them before choosing Hoppscotch for shared workspaces.

Audit trail and evidence

Postman and Hoppscotch Enterprise record activity in the product, which helps when an assessor asks who changed a shared collection. Bruno does not keep an audit log of its own, so the evidence comes from Git history: commits, author names and reviewed merge requests. Document this difference in your control narrative, and confirm with each vendor which logs its current edition provides.

Access control in Git

With Bruno, access to a collection is the access to its Git repository. Branch protection, required reviews and removal of write access then govern who can change requests, scripts and environment files. Keep secrets out of the repository, because a committed token stays in Git history after it is deleted. Your existing repository permissions can serve as the access model, so review them as part of the rollout.

What the Bruno editions include and what Postman charges for

Bruno's Open Source edition costs nothing and the client is licensed under the MIT License, with copyright held by Anoop M D, Anusree P S and contributors. The license permits use, so teams can install the desktop client without a per-seat fee for the app itself. The edition is not a trial, but two limits matter for team use, and both appear on Bruno's pricing page.

  • Workspace limit: Open Source allows 2 workspaces. Plan your repository layout so teams share a small number of workspaces instead of creating one per project.
  • OpenAPI sync limit: Open Source allows 5 OpenAPI syncs per month. Spec-driven teams that resync often may reach this quickly, so count your sync frequency before you depend on it.
  • Core Git actions: Clone, initialize, diffs, pull and commit are included, which covers day-to-day review of collection changes.
  • Offline storage: Collections are plain files in a folder, so no account or cloud sync is needed to start.

Confirm the current limits on Bruno's pricing page before you commit, because limits can change between releases.

What Postman and Bruno cost to run, by component

Postman and Bruno bill for different things, so a like-for-like comparison starts with the components rather than a headline price. Most of the recurring spend sits in seats, while the one-time work sits in migrating collections and rewriting scripts. The cards below separate the two sides and show which costs a quote should make explicit.

Postman seats and plan terms

Postman is paid per seat on its plans, and the March 2026 change limited the Free plan to one user who cannot create a team. Ask your Postman account team which plan each user needs, whether team admins or guest users count toward seats, and what the contract says about renewal and price changes. Team members who only read collections may still be billed as seats, so count them before you compare.

Postman add-ons and enterprise terms

Single sign-on, advanced security administration and data residency sit in add-ons or the Enterprise tier, so the headline seat price rarely reflects the final bill. Check which features your security team needs, such as SSO, and whether they are included, priced as an add-on or limited to Enterprise. An EU residency requirement may only be met through an Enterprise agreement, which changes the cost base entirely.

Bruno paid editions per seat

Bruno's Open Source edition costs nothing but is limited to 2 workspaces and 5 OpenAPI syncs per month. Bruno's pricing page lists Pro at $6 and Ultimate at $11 per user per month, billed annually, and only paid editions add full Git UI operations and bulk Postman import. Teams that need only the offline client and Git on the command line can stay on the free edition, so price the paid seats only for users who need those features.

Git hosting for shared collections

Bruno keeps collections as files in a folder, so shared work runs through a Git host. The host itself may be an existing forge, a self-hosted GitLab or Forgejo instance, or a paid tier of a cloud service, and each option carries its own licence and support cost. Confirm whether your current Git platform already covers the additional repositories, storage and access controls that API collections need.

One-time migration and script rewriting

Moving from Postman is mostly one-time effort: exporting collections, importing them into Bruno, checking translated scripts and replacing packages Bruno flags as unsupported, such as postman-collection and newman. Folder structure and naming conventions are also set once. Ask any implementation partner to price these as a fixed scope with a written list of collections, so the one-time cost is visible before work starts.

Recurring staff time and reviews

After migration, the ongoing cost is the time spent on conventions, pull request reviews of collection changes, and keeping environments and secrets out of Git. Bruno's files are plain text, so reviews are practical, but someone must own the folder layout and the rules for secret handling. Estimate this as internal hours per month against your own team's rates, because no supplied figure covers it for your environment.

How a move from Postman to Bruno works at a high level

The sequence moves collections out of Postman's cloud and into a folder of files that your team can version in Git, with scripts reviewed and secrets moved out before Postman seats are retired.

  1. Inventory collections and environments

    The team lead or API owner lists every collection, environment and global variable in use, notes which ones are shared, and identifies who edits each one. Owners confirm which collections still reflect live endpoints. The output is a short list that says what will move, what will be archived and who signs off on each item.

  2. Export collections from Postman

    Each owner exports the collections in scope as Collection v2 or v2.1 JSON and exports the matching environments. For an account-wide move, a team admin requests a full data dump, which Bruno's bulk import covers only in its Ultimate edition. Check that every file opens and that the request count matches what Postman shows. The export folder is complete when each collection has a file and a matching environment.

  3. Import collections into Bruno

    An engineer imports the exported JSON into Bruno on a working machine, using the Postman converter, and places the resulting collection folder in a local directory. The import creates one folder per collection with its requests in plain text. Confirm that folder structure, headers, auth settings and request bodies match the originals on a sample of endpoints before going further.

  4. Review translated scripts and flagged packages

    A developer reads every pre-request and test script that Bruno translated from pm.* calls, such as pm.test, pm.environment and pm.response, and checks the results against the original behavior. Scripts that use postman-collection or newman are flagged as unsupported and must be rewritten by hand. The step closes when each collection runs against a test environment and every flagged item has an owner and a fix.

  5. Move secrets out of collections

    The security or platform team identifies API keys, tokens and passwords stored in Postman variables or environments and moves them to a secret manager or to local environment files that are excluded from Git. Bruno's secret manager integrations are one option, and the dedicated vault page covers the details. The check is a search of the collection folders for credential patterns, which should return nothing before the folders are shared.

  6. Commit collection folders to Git

    The team creates a repository for the API collections, commits the folders with a review step, and agrees on branching for changes. Team members clone the repository and open the collections in Bruno. Git operations like push and merge conflict resolution in the Bruno app may need a paid edition, while standard Git commands work on any edition. The step is done when a second team member can clone the repository and run a request from it.

  7. Retire Postman seats

    Once the collections run from Git and the team has used them for a working cycle, the admin removes users from the Postman workspace and cancels or downgrades paid seats. Before cancelling, the admin confirms that no collection, mock or monitor is still needed in Postman and that the archived export is stored where the team can reach it. The move ends when Postman access is removed and the archive is verified.

Common questions about moving from Postman to Bruno

Can our team move from Postman to Bruno without outside help?

Yes, a team with someone comfortable with Git and the command line can usually do the core move in-house. The basic steps are exporting collections as Collection v2 or v2.1 JSON, importing them into Bruno, and committing the resulting folders to Git. What the team needs is time for a pilot collection, a person who owns the conventions for folders and environments, and a review of any Postman scripts that Bruno flags. Teams with many collections, complex test scripts or strict secrets handling often choose a fixed-scope engagement so the work, deliverables and timeline are written down before they start.

How long does a Postman to Bruno migration take?

The duration depends mainly on the work involved, not on the import itself. The main drivers are the number of collections and environments, how many pre-request and test scripts use Postman-specific APIs or packages, and where API keys and tokens are stored today. A small set of collections with simple scripts can be moved in a short working session, while a large estate with shared secrets needs planning and review. Ask any provider for a timeline that lists these drivers and the number of collections in scope, and confirm the final count from your own inventory before agreeing to a date.

Does Bruno have an equivalent to Postman mock servers and monitors?

Bruno's documentation covers importing collections, running them with its CLI and syncing OpenAPI, but mock servers and scheduled monitors are not part of the material this page relies on. Confirm with Bruno directly, using the documentation index and its current feature list, whether it offers either capability in the edition you plan to use. If your team depends on Postman mocks or monitors, plan a separate replacement. For mocks, WireMock, Microcks and Mockoon are self-hosted options described on our Postman mock server page, and scheduled runs can be handled by CI jobs using the Bruno CLI.

What do Newman scripts need to change to run with bru run?

The collection structure carries over in most cases, but the command, reporter and some script calls change. Bruno's CLI runs collections with bru run, and it provides test reports, so pipeline steps that call Newman need a new command and reporter configuration. Bruno translates common pm.test, pm.environment, pm.globals, pm.collectionVariables and pm.response calls during import. Scripts that depend on postman-collection or newman packages are flagged as unsupported and need manual rewriting. Run the converted collection against a staging environment and compare test results before removing Newman from the pipeline.

Does Bruno SSO require a paid edition?

Yes. Bruno's documentation states that the open-source edition needs no license management, while the paid editions use license keys managed in a license portal that also covers SAML single sign-on and SCIM provisioning. Bruno's pricing page lists Pro at $6 per user per month and Ultimate at $11 per user per month, both billed annually. Those prices are list prices from the pricing page and may change, so confirm them with Bruno before budgeting. Offline use and Git-based sharing do not depend on a paid edition.

Which Git features need a paid Bruno edition?

Clone, initialize, diffs, pull and commit are available in the open-source edition. Git push, branch operations, remote connections and merge conflict resolution in the app's Git UI are paid features. Git itself still works outside the app on any edition, so teams can push and merge from the command line if they prefer. Ask your team which of these operations they use every day, since that decides whether a paid seat is needed or whether a standard Git workflow in the terminal is enough.

What does a DeployOpen engagement cover for a Bruno migration?

DeployOpen works on a fixed scope. Before work starts, the scope, deliverables and timeline are agreed in writing. For a Bruno move, that scope can include inventorying Postman collections and environments, converting and reviewing scripts, setting up the Git repository and folder conventions, moving secrets out of collection files, updating CI pipelines to the Bruno CLI, and documenting the new workflow for the team. DeployOpen does not publish a price list, and a quote follows from the written scope. Ongoing support and upgrades are available as retainers.

Where should API keys and tokens go after leaving Postman?

Keep them out of Git and out of collection files. Bruno stores collections as plain files in a folder, so any credential written into a request or environment file would be committed with the rest of the collection. Use environment or secret references that point to a secret manager, and confirm which integrations your Bruno edition supports, such as HashiCorp Vault, AWS, Azure or Google Cloud. Review the converted files for leftover tokens from Postman exports before the first commit, and rotate any credential that has already been shared in a Postman export.

How DeployOpen helps evaluate and migrate from Postman

DeployOpen plans, implements and hands over self-hosted open-source platforms inside your own infrastructure. For Postman vs Bruno, we start with a written scope that settles which collections, environments and CI runs move, and where they will live.

How we scope

  • Inventory the Postman workspaces, collections, environments and scripts your teams depend on today.
  • Confirm which collections need Bruno's Git workflow and which Ultimate-only import or Git features you actually require.
  • Agree in writing which Postman script packages, such as newman, must be rewritten or retired before cutover.
  • Engagements are fixed-scope, with deliverables and timelines agreed before any work starts.

How we build

  • Run a test import of a Collection v2.1 export into Bruno and review every translated pm.* script.
  • Set up a Git repository layout for collections, with secrets kept out of committed files.
  • Wire bru run into your pipeline with test reports, and compare results against your existing Newman runs.
  • Document the target workflow for each team, including branch rules for collection changes.

How we hand over

  • Provide a runbook covering installation, collection structure, environment files and the CLI commands in use.
  • Deliver a list of flagged items from the import, with the owner and decision recorded for each.
  • Train the teams that author and review collections, using your own collections as examples.
  • Hand over documentation for licensing decisions, including which seats, if any, need a paid Bruno edition.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after handover.
  • Retainers can cover Bruno version upgrades and review of changes to collection and script formats.
  • Confirm response expectations and upgrade handling in the written retainer scope, not in general terms.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.