How to Migrate from Postman to Hoppscotch in 2026
How to Migrate from Postman to Hoppscotch in 2026
Why Switch from Postman?
Postman was the dominant API testing tool for years, but the 2023 changes broke a lot of workflows: the local storage feature was deprecated (all data now requires a Postman account), and the free tier limits collaboration to 3 users. The Professional plan costs $14/user/month — $168/user/year. For a 10-person engineering team, that's $1,680/year for an API client.
Hoppscotch is the open source alternative. It runs in the browser (no Electron app), supports every protocol Postman supports plus several it doesn't (WebSocket, SSE, MQTT, gRPC), and self-hosted versions allow unlimited users with no per-seat licensing.
This guide covers exporting from Postman, deploying self-hosted Hoppscotch, importing your collections, setting up team workspaces, and adjusting to the key differences between the two tools.
Step 1: Export Everything from Postman
Before switching, export all data from Postman. You'll need:
- Collections (API request groups)
- Environments (variable sets for different stages)
- Global variables
Export a collection:
- In Postman, right-click on a collection → Export
- Select Collection v2.1 format (Hoppscotch imports v2.1)
- Save the JSON file
Export all collections at once (API):
# Get all collections via Postman API
POSTMAN_API_KEY="your-postman-api-key" # From Postman Settings → API Keys
# List all collections
curl -H "X-API-Key: $POSTMAN_API_KEY" \
"https://api.getpostman.com/collections" \
> collections-list.json
# Export each collection by ID
jq -r '.collections[].uid' collections-list.json | while read uid; do
curl -H "X-API-Key: $POSTMAN_API_KEY" \
"https://api.getpostman.com/collections/$uid" \
> "collection-$uid.json"
done
Export environments:
- Click the Environments tab in the left sidebar
- For each environment: click ⋯ → Export
- Save each environment JSON file
Step 2: Set Up Hoppscotch
Option A: Use hoppscotch.io (instant, no setup)
Go to hoppscotch.io — sign in with GitHub, Google, or email. Free tier allows unlimited requests with no collaboration limits for small teams.
Option B: Self-host (recommended for teams)
Self-hosted Hoppscotch requires a PostgreSQL database and an SMTP server for authentication emails:
# docker-compose.yml for self-hosted Hoppscotch
version: "3"
services:
hoppscotch-backend:
image: hoppscotch/hoppscotch-backend:latest
restart: unless-stopped
environment:
- DATABASE_URL=postgresql://hoppscotch:password@postgres:5432/hoppscotch
- JWT_SECRET=your-jwt-secret-min-32-chars
- TOKEN_SALT_COMPLEXITY=10
- MAGIC_LINK_TOKEN_VALIDITY=3
- REFRESH_TOKEN_VALIDITY=604800000
- ACCESS_TOKEN_VALIDITY=86400000
# SMTP for magic link login emails
- MAILER_SMTP_URL=smtps://user:pass@smtp.yourdomain.com:465
- MAILER_ADDRESS_FROM=Hoppscotch <noreply@yourdomain.com>
# CORS
- WHITELISTED_ORIGINS=https://api.yourdomain.com,https://app.yourdomain.com
- VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GITHUB,GOOGLE
# OAuth (optional)
# - GOOGLE_CLIENT_ID=your-google-client-id
# - GOOGLE_CLIENT_SECRET=your-google-client-secret
# - GITHUB_CLIENT_ID=your-github-client-id
# - GITHUB_CLIENT_SECRET=your-github-client-secret
depends_on:
- postgres
hoppscotch-app:
image: hoppscotch/hoppscotch-app:latest
restart: unless-stopped
ports:
- "3000:8080"
environment:
- VITE_BASE_URL=https://app.yourdomain.com
- VITE_SHORTCODE_BASE_URL=https://app.yourdomain.com
- VITE_BACKEND_GQL_URL=https://api.yourdomain.com/graphql
- VITE_BACKEND_WS_URL=wss://api.yourdomain.com/graphql
- VITE_BACKEND_API_URL=https://api.yourdomain.com/v1
hoppscotch-admin:
image: hoppscotch/hoppscotch-admin:latest
restart: unless-stopped
ports:
- "3100:8080"
environment:
- VITE_BASE_URL=https://app.yourdomain.com
- VITE_BACKEND_GQL_URL=https://api.yourdomain.com/graphql
- VITE_BACKEND_API_URL=https://api.yourdomain.com/v1
postgres:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: hoppscotch
POSTGRES_USER: hoppscotch
POSTGRES_PASSWORD: password
volumes:
- hoppscotch_db:/var/lib/postgresql/data
volumes:
hoppscotch_db:
# Caddy reverse proxy
app.yourdomain.com {
reverse_proxy localhost:3000
}
api.yourdomain.com {
reverse_proxy hoppscotch-backend:3170
}
docker compose up -d
# Run database migrations
docker compose exec hoppscotch-backend pnpx prisma migrate deploy
Step 3: Import Collections
- Open Hoppscotch → Collections panel (left sidebar)
- Click Import/Export → Import from Postman
- Upload the collection JSON file (v2.1 format)
- Collections import with request folders, headers, body, and parameters
Importing multiple collections:
Repeat for each collection file. Hoppscotch imports them as separate top-level collections, mirroring the Postman structure.
What imports successfully:
- Request name, URL, method
- Headers (static values)
- URL parameters (query strings)
- Request body (JSON, form data, raw text)
- Folder hierarchy within the collection
- Collection-level variables (as environment variables)
What doesn't import:
- Pre-request scripts (JavaScript)
- Test scripts (assertions)
- Dynamic variable generation (
{{$randomInt}}) - Mock servers
Step 4: Set Up Environments
Postman environments become Hoppscotch environments. The key syntax difference: Postman uses {{variableName}} and Hoppscotch uses <<variableName>>.
Create environments in Hoppscotch:
- Click Environments in the bottom panel
- + New Environment
- Add variables with the same names as your Postman environment
# Postman environment variables
baseUrl = https://api.example.com
apiKey = sk_test_xxx
userId = 12345
# Same variables in Hoppscotch
baseUrl = https://api.example.com
apiKey = sk_test_xxx
userId = 12345
Update request URLs after import:
Postman syntax: {{baseUrl}}/users/{{userId}}
Hoppscotch syntax: <<baseUrl>>/users/<<userId>>
After importing a collection, you'll need to find/replace all {{ with << and }} with >> in your request URLs and headers. There's no automated migration for this — it requires a manual pass through each request.
Tip: Use the browser's find-in-page (Ctrl+F) in Hoppscotch to spot any remaining {{ patterns in your requests.
Step 5: Explore Protocol Support
One of Hoppscotch's genuine advantages over Postman is built-in support for protocols beyond REST:
REST API requests: Same as Postman — GET, POST, PUT, PATCH, DELETE with full header and body control.
GraphQL:
- Click GraphQL in the top navigation
- Enter your GraphQL endpoint URL
- Hoppscotch automatically introspects the schema
- Use the schema explorer to browse types and build queries
# Write your query in the editor:
query GetUser($id: ID!) {
user(id: $id) {
name
email
createdAt
}
}
WebSocket:
- Click Realtime → WebSocket
- Enter your WebSocket URL:
wss://api.example.com/ws - Connect, then send and receive messages in the interface
- Message history shows the full bidirectional conversation
Server-Sent Events (SSE):
- Click Realtime → SSE
- Enter the SSE endpoint URL
- Hoppscotch connects and displays incoming events in real-time
- Useful for testing streaming API responses
MQTT:
- Click Realtime → MQTT
- Enter broker URL:
mqtt://broker.example.com:1883 - Subscribe to topics and publish messages
- Event log shows subscribed messages
gRPC (protobuf):
- Click Realtime → gRPC
- Upload your
.protofile - Select service and method
- Fill in request fields and invoke
Step 6: Team Workspaces (Self-Hosted)
On self-hosted Hoppscotch, team workspaces allow shared collections with granular permissions:
- Click Workspaces → New Workspace
- Name it (e.g., "Backend API", "Mobile API")
- Invite team members: Workspace Settings → Members → Invite
- Set roles: Owner (full control), Editor (edit collections), Viewer (read only)
All workspace members see the shared collections in real-time. Changes sync across all connected browsers immediately.
Moving imported collections to a workspace:
- Right-click collection → Move to Workspace
- Select the target workspace
- Collection is now shared with all workspace members
Key Differences: Postman vs Hoppscotch
| Feature | Postman | Hoppscotch |
|---|---|---|
| Interface | Desktop app (Electron) | Web (PWA) |
| Variable syntax | {{variable}} | <<variable>> |
| Pre-request scripts | ✅ JavaScript | Limited (environment variables) |
| Test assertions | ✅ JavaScript | ❌ |
| Mock servers | ✅ | ❌ |
| API monitoring | ✅ | ❌ |
| GraphQL | ✅ | ✅ With schema explorer |
| WebSocket | ✅ | ✅ Built-in |
| SSE | Plugin | ✅ Built-in |
| MQTT | Plugin | ✅ Built-in |
| gRPC | ✅ (beta) | ✅ Built-in |
| CLI runner | Newman | Hoppscotch CLI |
| Offline use | ✅ Desktop | PWA (limited) |
| Team collab | 3 users (free) | Unlimited (self-hosted) |
Step 7: Hoppscotch CLI for CI/CD
Hoppscotch has a CLI runner (hopp) for running collections in CI/CD pipelines — similar to Postman's Newman:
# Install
npm install -g @hoppscotch/cli
# Run a collection
hopp test collection.json \
--env production.json \
--reporter default
# The collection.json is a Hoppscotch export format (not Postman v2.1)
# Export from Hoppscotch UI: Collections → Export → Hoppscotch JSON
In GitHub Actions:
# .github/workflows/api-tests.yml
name: API Tests
on:
pull_request:
branches: [main]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g @hoppscotch/cli
- run: |
hopp test api-tests/collection.json \
--env api-tests/env-staging.json \
--reporter default
Cost Comparison
| Plan | Postman | Hoppscotch Cloud | Hoppscotch Self-Hosted |
|---|---|---|---|
| Free | 3 users | Unlimited | Unlimited |
| Paid | $14/user/month | $9/user/month | $0 (VPS cost only) |
| 10 users | $1,680/year | $1,080/year | $60–120/year |
| Collections | Cloud only (free tier) | Cloud + export | Unlimited |
| Offline | Desktop app | No | No |
Related: Best Open Source Developer Tools 2026 · Hoppscotch vs Bruno: Which API Client? · How to Self-Host IT-Tools
See open source alternatives to Postman on OSSAlt.