Why migrate from Postman now
Until February 2026, Postman allowed sharing collections as a team on its free plan. Since the March 2026 update, collaborative workspaces are reserved for paying subscribers, with a minimum price of $19/user/month (Basic plan). For a team of five developers, that is $95/month, or $1,140/year, for a tool whose main value is collection sharing. For a team of ten, the bill exceeds $2,000 per year.
Two open source alternatives cover this need without a subscription. Bruno stores collections directly in your Git repository — each request is a versionable text file readable by any code review tool. Hoppscotch provides a collaborative web interface deployable on your own VPS with Docker Compose in under twenty minutes. Both projects natively import Postman collections and preserve environment variables, pre-request scripts, and automated tests.
The choice between the two depends on your workflow: Bruno suits teams already working in Git who do not need real-time synchronization — each push makes changes available to everyone. Hoppscotch suits teams that share active test environments, prefer a web interface accessible from any workstation, and want immediate visibility into requests modified by a colleague.
What you gain by migrating
- Zero subscription — Bruno is an open source desktop client (MIT), Hoppscotch deploys on any VPS with Docker
- Versioned collections — Bruno stores each request in a
.brufile:git diff,git blame, and code reviews apply naturally - Direct import from Postman — both tools read Postman v2.1 JSON exports and preserve variables, OAuth2 authentication, and automated tests
- No data sent to third parties — self-hosted Hoppscotch contacts no external servers; Bruno never syncs your requests to the cloud
- Lightweight resources — Bruno has no backend; Hoppscotch runs on 1 vCPU / 1 GB RAM for typical team usage
- No per-seat billing — a single Hoppscotch deployment serves the entire team, regardless of size
Prerequisites before you start
For Bruno, only each developer's workstation is involved: the desktop client installs on macOS, Linux, and Windows, with no server. Collections live in a folder in your existing Git repository. No account is required, and no external service is contacted at startup.
For self-hosted Hoppscotch, you need a VPS with at least 1 vCPU and 1 GB RAM (2 GB recommended for the instance with database and cache), Docker and Docker Compose installed, a domain name pointing to the server, and a TLS certificate (Let's Encrypt via Certbot or Traefik). SSH access to the server is also needed for initial configuration and updates.
In both cases, an export of your Postman collections in JSON v2.1 format is required. In Postman, go to File → Export → Collection v2.1 for each collection. Environments are downloaded separately from the Environments tab. Keep these files: they serve both for the initial migration and as a backup.
Migrate to Bruno in six steps
Export your collections from Postman
In Postman, click the
…next to each collection, thenExport. ChooseCollection v2.1 (recommended)and save the JSON file. For environment variables, go toEnvironments, click…thenExportfor each environment.Install Bruno
Download the package from
usebruno.com/downloadsfor your OS. On Debian/Ubuntu:sudo dpkg -i bruno_<version>_amd64_linux.deb. On macOS via Homebrew:brew install --cask bruno. Bruno is signed and requires no account.Create a Bruno collection in your repository
Open Bruno, click
Create Collection, choose a folder in your Git repository (for exampleapi-tests/). Bruno creates abruno.jsonfile there and stores each request as a.brufile — a readable, diffable text format.Import the Postman collection
In Bruno, click
Import Collection→Postman Collection v2 / v2.1, then select your exported JSON file. Requests, folders, pre-request scripts, andpm.test()tests are converted. The{{variable}}variables are preserved under Bruno's{{variable}}syntax.Import environment variables
Click the environment selector in the top right →
Configure→Import. Select the environment JSON file exported from Postman. Verify that secrets are markedSecretin Bruno so they are not committed in plain text to Git.
Deploy self-hosted Hoppscotch with Docker Compose
Retrieve the official Docker Compose file
Clone the repository:
git clone https://github.com/hoppscotch/hoppscotch.git && cd hoppscotch. Thecompose.ymlfile contains three services:hoppscotch(frontend + API),db(PostgreSQL 15), andhoppscotch-migrate(migrations at startup).Configure environment variables
Copy the example file:
cp .env.example .env. Fill in at minimum:DATABASE_URL=postgresql://postgres:yourpassword@db:5432/hoppscotch,JWT_SECRET(a random string of at least 32 characters),VITE_BASE_URL=https://api.your-domain.com,VITE_SHORTCODE_BASE_URL=https://your-domain.com. For OAuth2 (login via GitHub, Google, or GitLab), fill in the corresponding keys in theAuthblock.Start the services
Run
docker compose up -d. On first startup, thehoppscotch-migrateservice applies PostgreSQL migrations, then stops — this is normal. Check withdocker compose psthathoppscotchanddbare inrunningstate.Configure the reverse proxy and TLS
Add an nginx virtual host that proxies port 3000 to
localhost:3000and port 8080 (backend API) tolocalhost:8080. Obtain a Let's Encrypt certificate:certbot --nginx -d your-domain.com -d api.your-domain.com. Reload nginx:systemctl reload nginx.Create the first admin account
Open
https://your-domain.comin your browser. The first account created automatically receives admin rights. Go tohttps://your-domain.com/adminto manage users, enable or disable authentication methods, and define team policies.Import Postman collections into Hoppscotch
In Hoppscotch, go to
Collections→Import / Export→Import from Postman. Select your v2.1 JSON file. Collections, folders, requests, variables, and test scripts are imported. Share the collection with your team via theShare Collectionmenu — each connected member has access in real time.
Insomnia, a third commonly cited API client, went through a turbulent period in 2023: the Kong team removed local synchronization in favor of a mandatory cloud account, before reversing course under community pressure. The project is now split into two branches — insomnium (community fork, offline-first) and official Insomnia (open-core with optional cloud). The comparison below covers Insomnia in its current state (open-core, Apache 2.0 license), which remains a valid alternative for solo developers but loses its advantage when team collaboration is central.
Bruno vs Hoppscotch vs Insomnia — which to choose
Scroll the table
| Criterion | Bruno | Hoppscotch self-hosted | Insomnia open-core |
|---|---|---|---|
| Model | Desktop client (MIT) | Self-hosted web app (MIT) | Desktop client (open-core, Apache 2.0) |
| Collection storage | `.bru` files in Git | PostgreSQL database on your VPS | Local files or paid cloud |
| Real-time collaboration | Via Git (pull/push) | Yes, native in web UI | No on free plan (cloud required) |
| RAM required | < 200 MB (client only) | 1 GB minimum (server) | < 300 MB (client only) |
| Postman v2.1 import | Yes, native | Yes, native | Yes, native |
| OAuth2 / advanced auth | Yes | Yes, with configurable providers | Yes |
| Automated tests (scripts) | Yes (JS) | Yes (JS) | Yes (JS) |
| Team deployment | No server — share via Git | Docker Compose, 1 VPS | Cloud subscription or Enterprise self-hosting |
| Offline access | Full | Partial (offline interface, sync impossible) | Full |
Migrating Postman automated tests
Postman pm.test() scripts use the global pm library. Bruno and Hoppscotch both expose a compatible API: test('test name', () => { ... }) with expect() for assertions. Conversion is straightforward for status code assertions (pm.response.to.have.status(200) → expect(response.status).toBe(200)) and JSON body assertions (pm.response.json() remains identical). Pre-request scripts that modify environment variables (pm.environment.set(...)) are natively supported by both tools.
Host Hoppscotch on a ServOrbit VPS
A VPS with pre-configured Docker is perfectly suited to hosting Hoppscotch: the hoppscotch + db (PostgreSQL 15) + nginx stack fits in 1 GB RAM for typical team usage, and scales to 2 GB if you enable mock generation or CI integration. A dedicated IPv4 simplifies DNS configuration and ensures your test instance traffic is never shared.
A VPS dedicated to your developer tools also centralizes other stack tools: Gitea for source code, Woodpecker CI for continuous integration, and Hoppscotch for API testing form a coherent set on the same server. ServOrbit offers developer-oriented VPS with pre-configured Docker to host Hoppscotch or any API from 99 DH/month.