Developer Tools & Productivity10 MIN READ

Bruno stores API tests in Git, Hoppscotch doesn't

Bruno saves every API collection as a plain text `.bru` file on disk. Hoppscotch keeps collections in a workspace, synced through its own cloud or self-hosted backend. That single design choice is the

Two filing cabinets side by side: left cabinet with organized papers neatly stacked in closed drawers; right cabinet with open drawers and papers spilling out.
FIG. 01  /  Developer Tools & Productivity
In this piece

Bruno saves every API collection as a plain text .bru file on disk. Hoppscotch keeps collections in a workspace, synced through its own cloud or self-hosted backend. That single design choice is the real split between Bruno vs Hoppscotch API testing, and it matters more than most feature lists let on.

Both tools emerged as open source answers to Postman's shift toward a paid, cloud-locked model. Both let you fire off requests, chain scripts, and organize collections into folders. But the question of where your API tests actually live changes how teams review them, share them, and trust them.

This piece breaks down that storage difference, what it means for Git-based workflows, and when each tool actually makes sense.

Git-First vs Browser-First: Two Different Philosophies

Bruno was built around a simple idea: API collections should sit next to your application code. According to DevTools, Bruno stores test collections as local files in the .bru format, which can be version-controlled in Git repositories right alongside your source.

Hoppscotch takes the opposite approach. According to DevTools, it operates as a browser-first client where teams share workspaces without needing Git integration or local file management at all.

Neither approach is wrong. They're built for different habits.

  • Bruno assumes your team already lives in pull requests and code review.
  • Hoppscotch assumes your team wants to open a tab and start testing immediately.

If your workflow revolves around repos, Bruno fits naturally. If your workflow revolves around a shared link, Hoppscotch fits naturally.

Why API Tests in Git Actually Matter

Storing API tests in Git isn't just a technical preference. It changes how a team catches mistakes.

When a .bru file changes, that change shows up as a diff in a pull request. A reviewer can see exactly which endpoint changed, which header got added, or which assertion got loosened, the same way they'd review a code change.

Compare that to a shared workspace model. Someone edits a request, and unless the tool has built-in change history, that edit is mostly invisible until a test fails. There's no diff. There's no comment thread tied to a specific line.

This is the core argument for choosing Bruno for a Postman alternative in 2026: API testing starts to look like software engineering instead of a side activity. Tests get versioned, reviewed, and rolled back using the same muscle memory developers already use for code.

Storage Models Explained: Local Files vs Cloud Workspaces

The practical difference comes down to where the data physically sits.

Bruno's model is offline-first. According to VS.dev, API tests built in Bruno function without an internet connection, since all data stays on the local filesystem. You open the app, your collections are already there, and nothing needs to sync before you can run a request.

Hoppscotch's workspace model depends on a backend, whether that's the hosted version or a self-hosted instance. Collections live in that backend, and team members pull from the same shared source. This makes real-time collaboration simpler, since everyone sees the same workspace state without merge conflicts.

Storage Models Explained: Local Files vs Cloud Workspaces
Storage modelDetail
BrunoLocal .bru files, Git-versioned
HoppscotchCloud or self-hosted workspace
Offline use*Bruno works fully offline
Shared editingHoppscotch syncs live across users

This table shows where each tool's collection data actually lives and who it depends on.

The tradeoff is clear. Bruno gives up real-time multi-user editing in exchange for file-level version control. Hoppscotch gives up that Git history in exchange for instant, synced collaboration.

Scripting Capabilities: Chai Assertions vs the Hopp Namespace

Writing test logic looks different in each tool.

According to QAJobFit, Bruno uses Chai assertions along with res and bru APIs for scripting. If you've written tests in a JavaScript testing framework before, this will feel familiar fast. A basic assertion in Bruno looks like this:

javascript
test("status code should be 200", function() {
  expect(res.getStatus()).to.equal(200);
});

test("response should contain user id", function() {
  const body = res.getBody();
  expect(body).to.have.property("id");
});

Hoppscotch, according to QAJobFit, uses its own hopp namespace for native scripts rather than relying on an external assertion library. It's purpose-built for the tool, which means less overhead to learn the syntax, but also less transfer value if your team already knows Chai or Mocha-style assertions from other projects.

Neither approach is objectively harder. Teams already using Chai elsewhere will find Bruno's scripting familiar. Teams starting fresh may find Hoppscotch's native approach simpler to pick up without extra context.

CI/CD Integration: Running Tests in Automated Pipelines

This is where the Git-first design pays off directly.

Because Bruno collections are just files in your repo, a CI pipeline can check them out, run them with Bruno's CLI, and fail the build if an endpoint breaks. There's no separate export step, no API call to pull a workspace, no extra credential to manage for syncing. The tests are already sitting in the same checkout your pipeline uses for everything else.

A simple pipeline step might look like this:

yaml
test-api:
  stage: test
  script:
    - npm install -g @usebruno/cli
    - bru run ./api-tests --env staging

According to a Medium piece by Vignaraj, Bruno performs well specifically in environment configuration within version-controlled setups, and integrates cleanly with local pipeline execution. That's a direct result of treating API tests as code rather than as a separate artifact.

Hoppscotch can also run in CI, typically through its CLI against a workspace or exported collection, but it requires that extra step of pulling the collection from wherever it's hosted. For teams that already distrust extra moving parts in a pipeline, that's one more thing that can fail silently.

Ledger comparing Bruno and Hoppscotch across 2 criteriaFIGURE 1 / COMPARISON30-day GitHub star growthBRUNOHOPPSCOTCHStars gained624 stars1.4% growth rate195 stars0.2% growth rateProject sizeSmallerClosing the gapLargerGap narrowing
Bruno is gaining stars faster than Hoppscotch despite being the smaller project

Team Collaboration Patterns: Pull Requests vs Shared Workspaces

Collaboration looks completely different depending on which model a team adopts.

With Bruno, collaboration happens through the same channels as code. Someone opens a branch, edits a .bru file, opens a pull request, and a teammate reviews the diff before merging. It's slower by design, since every change passes through review, but it leaves an audit trail.

With Hoppscotch, collaboration happens in real time inside a shared workspace. Multiple people can be in the same collection at once, editing requests and seeing each other's changes live. It's faster for quick iteration, especially when a team is debugging an API issue together on a call.

Teams that already use pull requests for everything else will find Bruno familiar. Teams that value speed over process, especially smaller teams or those doing rapid prototyping, will likely prefer Hoppscotch's shared workspace feel.

According to a report from Jose Manuel Ortega, Hoppscotch has been in development longer and carries a larger established community than Bruno. That maturity shows up in polish and plugin ecosystem, even as Bruno's adoption curve steepens.

Migrating From Postman: Converting Collections to .bru Files

Teams leaving Postman usually have years of saved collections they don't want to rebuild from scratch.

According to Pickuma, Bruno's desktop interface supports importing Postman collections directly, converting them into .bru files on the local filesystem during the process. That means an existing Postman export can become a Git-tracked set of files in a few clicks, without manually recreating every request.

A rough migration path looks like this:

  • Export your Postman collection as a JSON file.
  • Open Bruno and use the import option to point at that file.
  • Review the converted .bru files for any scripts that didn't translate cleanly.
  • Initialize or add the collection folder to your existing Git repo.
  • Commit the initial import as a baseline for future diffs.

This is one of the more practical reasons Bruno gets mentioned as a serious Postman alternative in 2026 conversations: the migration isn't a rewrite, it's closer to a format conversion. Hoppscotch also supports Postman imports, but since the destination is a workspace rather than a file tree, there's no equivalent step of adding the result to a Git repo.

Offline-First Development: An Advantage for Distributed Teams

Distributed teams, especially those working across unreliable connections or in environments with strict network policies, benefit from Bruno's local-first model in a way that's easy to overlook.

Because everything lives on disk, a developer working from a train, a flight, or a restricted corporate network can still open their collections, run requests against a local mock, and edit test scripts. Nothing waits on a sync. Nothing depends on a workspace being reachable.

Hoppscotch's self-hosted option narrows this gap somewhat, since teams can run their own backend instead of depending on the hosted cloud version. But even self-hosted, it's still a client-server model rather than a pure local file setup, which means some dependency on network access to that backend remains.

For teams spread across time zones or working with spotty infrastructure, that distinction adds up over a year of daily use.

Growth Signals: Momentum Behind Bruno

Adoption numbers give a rough sense of where momentum sits, even if they don't settle the debate on their own.

According to OpenAlternative, Bruno gained 624 GitHub stars in the last 30 days, a 1.4% growth rate. Hoppscotch, over the same window, gained 195 stars, a 0.2% growth rate. OpenAlternative also notes that Bruno remains the smaller project overall, but is closing the gap in community adoption.

None of that tells you which tool fits your team. But it does suggest the Git-first pitch is resonating with a growing slice of developers who've gotten tired of cloud-locked testing tools.

Using Bruno and Hoppscotch Together

These two tools don't have to be an either-or decision. A common pattern among teams is using Hoppscotch for fast, throwaway exploration, like poking at a new endpoint a teammate just built, and Bruno for the tests that actually need to persist, get reviewed, and run in CI.

That split plays to each tool's strength. Hoppscotch's zero-install browser access removes friction for one-off checks. Bruno's Git-backed structure handles the tests that matter long-term, the ones a team wants versioned and reviewed like any other code change.

FAQ

Q: Can Bruno and Hoppscotch be used on the same project?

A: Yes. Some teams use Hoppscotch for quick manual checks during development and Bruno for the structured, version-controlled test suite that runs in CI. There's no conflict between the two since they don't share a storage format.

Q: Is storing API tests in Git actually more secure than a cloud workspace?

A: It depends on your repo's access controls. Git-stored tests inherit whatever permissions and encryption your existing repository already has, which many teams already trust. Cloud workspaces depend on the provider's own security practices, so the comparison really comes down to which system your organization already audits more closely.

Q: Does Bruno require a paid tier for team features?

A: Bruno's core desktop app and .bru file format are open source and free. Some collaboration and sync features sit behind a paid Pro tier, similar to how many open source dev tools structure their business model, but the Git-based workflow itself doesn't require a subscription.

Q: Is Hoppscotch harder to self-host than it looks?

A: Self-hosting Hoppscotch requires running its backend infrastructure yourself, which is more setup than Bruno's zero-infrastructure local file model. Teams without existing DevOps capacity may find the hosted cloud version simpler to start with before considering self-hosting.

Key Takeaways

  • Bruno stores collections as local .bru files, which makes Git version control, pull request review, and offline work possible out of the box.
  • Hoppscotch keeps collections in a shared workspace, favoring real-time collaboration and zero-install browser access over file-based version history.
  • Bruno's scripting uses Chai assertions, familiar to anyone who's written JavaScript tests before, while Hoppscotch uses its own hopp namespace.
  • CI/CD integration favors Bruno for teams that already treat tests as code, since the collection is already sitting in the repo the pipeline checks out.
  • Migrating from Postman to Bruno is largely a format conversion, not a rebuild, thanks to built-in import support.
  • The two tools aren't mutually exclusive. Many teams run Hoppscotch for exploration and Bruno for the tests that need to live in version control long-term.

Sources

Researched from the following. Figures and claims were current when this piece was written and may have moved since.

  1. DevToolsdev.tools
  2. QAJobFitqajobfit.com
  3. VS.devvs-site-weld.vercel.app
  4. Pickumapickuma.com
  5. Jose Manuel Ortegajosemanuelortega.me
  6. Mediummedium.com

Comments

Comments are read before they appear. No account, no email.