Mándalo vs Postman
Postman is a bigger product than Mándalo and will stay that way. This page is about which of you should switch — and it is honest about the parts where the answer is no.
Who Mándalo is for
- You keep your API definitions in git and want your requests reviewed the same way.
- You want to open a client, send a request, and be done — without signing in first.
- You work in regulated or air-gapped environments where a client that syncs to a vendor cloud is a non-starter.
- You use gRPC or GraphQL alongside REST and are tired of switching tools.
- Your team's collaboration problem is already solved by pull requests, and you would rather not buy a second one.
Who it is not for
- You need mock servers, uptime monitors, or a public API portal. Mándalo has none of them and none are planned soon.
- Your team includes people who do not use git and never will.
- You depend on Postman's collection runner features — data files, per-iteration runs, flow control between requests.
- You test WebSocket, SSE or MQTT endpoints. Mándalo is request/response only.
- You want generated client code in fifteen languages from the request you just sent.
Feature by feature
| Mándalo | Postman | |
|---|---|---|
| Works fully offline | Yes — the app never contacts us | Partly — there is a no-sign-in lightweight client, but the product is built around the cloud |
| Account required | No account, no sign-in | Yes for most of the product |
| Telemetry | None | Yes, per its privacy policy |
| Collection storage | A folder of .http files (.grpc for gRPC) in your directory | Cloud workspace; JSON via export |
| Readable by other tools | Yes — .http is what REST Client, httpYac and JetBrains IDEs read | Postman’s own JSON schema; widely supported as an import format |
| Diff & PR review | Native — files in your repo | Export and diff JSON, or a paid git integration |
| HTTP | Yes | Yes |
| GraphQL | Yes — query plus variables | Yes, with schema introspection |
| gRPC | Unary only, from local .proto, no reflection. Native gRPC on desktop and CLI; gRPC-Web in the browser | Unary and streaming, with reflection |
| Scripting | A pm.* subset in a sandboxed QuickJS engine | Full pm.*, Node-flavoured, with libraries |
| Assertions | Yes — pm.test and pm.expect, with snippets, results in the response pane, and the same run in CI | Yes, with a snippet builder |
| Environments & variables | Yes; unresolved variables fail loud | Yes, with more scope levels |
| Import from Postman | Yes, with a report of what it skipped | — |
| Price | Free — no tiers, no seats; source on GitHub | Free tier, then per-seat |
| Cloud sync | No — sync is git pull | Yes |
| Team workspaces & roles | No UI for it at all | Yes |
| Mock servers | No | Yes |
| API monitoring / uptime | No | Yes |
| WebSocket / SSE / Socket.IO | No | Yes |
| Code generation | No | Yes, many languages |
| Request history | Not synced or persisted across sessions | Yes, synced |
| Web and mobile apps | Desktop (macOS, Windows, Linux) and a full browser build; no mobile app | Desktop, web and mobile |
| CLI runner for CI | mandalo run works and shares the app’s engine (JUnit and JSON reporters), but it is not in the installer yet — you build it from the repo | Yes — Newman and the Postman CLI, packaged and documented |
| Editor integration | A VS Code extension, plus .http files any REST Client user can already open | A VS Code extension |
| API design & schema tooling | No — Mándalo only sends requests | Yes — spec editing, validation, generated docs |
| Public API directory | No | Yes — a large public network of published APIs |
| Collaboration UI | No — review happens in your git host | Yes — comments, forks, pull requests on collections |
| Ecosystem & support | New project, small community, no commercial support | Huge — templates, integrations, docs, enterprise support |
Where the difference actually shows up
The storage row is the one that changes how you work. When a collection is a directory of .http files inside the repo it documents, an endpoint change and its request definition land in the same commit, a reviewer reads both in the same diff, and a feature branch carries the requests that branch's API needs. Nothing syncs, because there is nothing to sync — the mechanism is git pull. It also means leaving is cheap: .http is a format other editors already read, so your requests are not hostage to this app. That is described in full in Collections & git.
The scripting row is the one most likely to bite on day one. Mándalo's sandbox has no Node APIs, no filesystem, no network and no timers, and it stops a script that runs too long. Assertion-and-variable scripts port unchanged; anything that fetches a second URL or drives the runner does not. It refuses loudly with an explanation rather than returning undefined — see Scripts & tests and Importing from Postman.
When you should stay on Postman
Genuinely: stay if any of these is true.
- You rely on mock servers or monitors. There is no substitute here and no plan to build one.
- You need WebSocket or SSE testing.
- Non-engineers on your team need to run requests and would need a git workflow to do it.
- You need a hosted, always-current API portal for consumers outside your organisation.
- Your CI already runs Newman and it works. Mándalo's runner does the job but is not packaged yet — you would be building a binary from source. See what it does before planning around it.
- You depend on OAuth 2 flows being handled for you. Mándalo does bearer, basic and API key; you supply the token.
Both can also coexist. The import is one step and it does not delete anything, so trying Mándalo on one collection costs an afternoon and leaves Postman exactly where it was.
Trying it
The same client runs as a desktop app or straight in your browser — same code, no server on our side either way. The one thing to know about the browser build: browsers enforce CORS, so a host that sends no CORS headers cannot be called from a page, and response headers beyond the safelisted ones are only readable if the server exposes them. That is a browser rule that applies to every browser-based client; the desktop app is unaffected. We will not proxy your traffic to work around it.
Read Getting started, or bring an existing collection across with Importing from Postman. The download is on the releases page, and there is nothing to sign up for.