Bruno vs Hoppscotch

A side-by-side comparison of two self-hosted developer tools & git options — licensing, setup difficulty, resource needs, and what each one replaces.

Not the right match-up?
FeatureBrunoHoppscotch
Deploy effortRead-the-docs projectUnder-an-hour setup
Health score100 · Excellent100 · Excellent
CategoryDeveloper Tools & GitDeveloper Tools & Git
LicenseMITMIT
LanguageJavaScriptTypeScript
Setup difficultyEasyEasy
Min. RAM256 MB512 MB
Deploymentbare-metal, sourcedocker, kubernetes
GitHub stars★ 47,149★ 80,488
First released20232019
ReplacesPostman, InsomniaPostman, Insomnia

What are Bruno and Hoppscotch?

Bruno

Bruno is an open-source API client that stores collections as plain text files in your filesystem, making them version-controllable with Git. It runs fully offline as a desktop application.

  • Git-friendly plain-text collections
  • Fully offline operation
  • No account required
  • Scripting and assertions

Read the full Bruno guide →

Hoppscotch

Hoppscotch is a lightweight, fast API client for testing REST, GraphQL, and WebSocket endpoints. The self-hosted edition adds team workspaces and collection sharing.

  • REST, GraphQL, and WebSocket testing
  • Team collections
  • Environment variables
  • Fast lightweight UI

Read the full Hoppscotch guide →

Bruno vs Hoppscotch: key differences

Bruno is written in JavaScript, while Hoppscotch is built with TypeScript. Bruno is the lighter option, starting around 256 MB of RAM against 512 MB for Hoppscotch. Hoppscotch is the more established project (first released 2019), while Bruno arrived in 2023. Hoppscotch lists first-class Docker deployment; Bruno does not.

Last reviewed Aug 26, 2026 · 748 words

Where a collection lives decides this comparison. Bruno writes every request to a .bru text file in a folder you choose, so your API tests are versioned, diffed and reviewed exactly like source code, and there is no server because there is nothing to serve. Hoppscotch keeps collections in a PostgreSQL database behind a web app you run in Docker, so they belong to a workspace and a team rather than a directory. Both replace Postman; they replace it in opposite directions.

One of these is not a self-hosted service

Bruno is a desktop application, Electron-based, for Windows, macOS and Linux. The catalogue lists deployment as bare-metal and source with a 256 MB floor, which is honest: you install it on a laptop, and there is nothing to put on a NAS. Collaboration is git. Two engineers editing one collection resolve it like any merge, and the .bru format is line-oriented enough that conflicts are readable. The bru CLI (npm install -g @usebruno/cli, then bru run --env staging) executes a collection in a pipeline, which is how the tests get into CI without a runner service.

Hoppscotch is the opposite. The public instance at hoppscotch.io is a static web app that fires requests from your browser; the self-hosted Community Edition adds the backend that makes accounts and teams possible. That backend is the catalogue's "multi-container backend stack": frontend, admin dashboard, Node backend and PostgreSQL, wired through one .env file with a long list of OAuth and mail settings. The all-in-one image collapses the first three into one container, but you still run a database, and the 512 MB floor is a starting point. Budget an hour the first time.

The browser's CORS problem, and who has it

Hoppscotch runs in a browser tab, so requests to any API that does not send permissive CORS headers get blocked before they leave. The fixes are the Hoppscotch browser extension, which lifts the restriction, or the proxy setting that relays through the server. A desktop app now removes the issue, but the web edition is what most teams deploy, and every new hire hits the CORS wall once. Bruno never has this problem; it is a native process making native HTTP calls, which is part of why it feels fast against local services on odd ports.

Protocols and the daily grind

Hoppscotch has the wider protocol list: REST, GraphQL with schema introspection, WebSocket, Server-Sent Events, Socket.IO and MQTT, all in the same tabbed interface. Bruno covers REST and GraphQL well, with WebSocket support arriving later and gRPC later still; if your day is mostly pub/sub debugging, Hoppscotch is more comfortable. Both do environments with variables and secrets, both do pre-request and post-response JavaScript, both run assertions. Bruno's declarative assertions block, res.status: eq 200 and friends, reads better in a diff than a script does, and diff readability is Bruno's whole thesis.

Importing from Postman works in both; expect to touch up scripts that used pm.* helpers. The Postman alternatives page covers what survives the move.

What costs money

Both cores are MIT. Bruno funds itself with a paid edition adding features a solo developer rarely needs: extra secret-management integrations, collaboration conveniences, support. Hoppscotch's Community Edition already covers teams; its Enterprise tier adds SSO, audit logs and access controls. Neither locks your data: Bruno's data is text files, and Hoppscotch exports collections as JSON from the app.

Decision table

YouPick
Want collections reviewed in pull requestsBruno
Need a shared URL for a team of 3 to 20Hoppscotch
Run API tests in CI todayBruno
Debug WebSocket, SSE or MQTT oftenHoppscotch
Refuse to run another PostgresBruno
Have non-git users on the teamHoppscotch
Already hosting Gitea and want collections thereBruno

What I'd do

Bruno, kept in a api-tests/ folder in each service's repository, with bru run in the pipeline. It is the one API client whose "sync" strategy I have never had to explain, because it is git. Deploy Hoppscotch when a team appears that will not open a terminal, or when the protocol list matters, and put it behind the same reverse proxy as the rest of your dev tools. Running both is common and harmless: Bruno for the repo, Hoppscotch for the quick shared poke at a staging endpoint.

Why pick each one

Choose Bruno if…

  • Git-friendly text collections
  • Fully offline, no account
  • Lightweight and fast

Watch out for

  • Some features paid
  • No built-in cloud sync
Bruno details

Choose Hoppscotch if…

  • Fast lightweight interface
  • REST GraphQL WebSocket support
  • Team workspaces built in

Watch out for

  • Multi-container backend stack
  • Some features enterprise-only
Hoppscotch details

Frequently asked questions

Is Bruno or Hoppscotch better?

Neither is universally better. Hoppscotch has the larger community; both share a easy setup difficulty, so the decision comes down to features and licensing.

Are Bruno and Hoppscotch free and open-source?

Yes. Bruno is licensed under MIT and Hoppscotch under MIT. Both can be self-hosted at no software cost.

Can I run Bruno and Hoppscotch with Docker?

Bruno: check the project docs for container support. Hoppscotch: yes.

Which is lighter on resources, Bruno or Hoppscotch?

Bruno has the smaller minimum footprint at 256 MB of RAM, compared to about 512 MB for Hoppscotch. Real-world usage depends on library size, user count, and enabled features.

Related comparisons