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 (current release) vs Postman (desktop and cloud)
 MándaloPostman
Works fully offlineYes — the app never contacts usPartly — there is a no-sign-in lightweight client, but the product is built around the cloud
Account requiredNo account, no sign-inYes for most of the product
TelemetryNoneYes, per its privacy policy
Collection storageA folder of .http files (.grpc for gRPC) in your directoryCloud workspace; JSON via export
Readable by other toolsYes — .http is what REST Client, httpYac and JetBrains IDEs readPostman’s own JSON schema; widely supported as an import format
Diff & PR reviewNative — files in your repoExport and diff JSON, or a paid git integration
HTTPYesYes
GraphQLYes — query plus variablesYes, with schema introspection
gRPCUnary only, from local .proto, no reflection. Native gRPC on desktop and CLI; gRPC-Web in the browserUnary and streaming, with reflection
ScriptingA pm.* subset in a sandboxed QuickJS engineFull pm.*, Node-flavoured, with libraries
AssertionsYes — pm.test and pm.expect, with snippets, results in the response pane, and the same run in CIYes, with a snippet builder
Environments & variablesYes; unresolved variables fail loudYes, with more scope levels
Import from PostmanYes, with a report of what it skipped
PriceFree — no tiers, no seats; source on GitHubFree tier, then per-seat
Cloud syncNo — sync is git pullYes
Team workspaces & rolesNo UI for it at allYes
Mock serversNoYes
API monitoring / uptimeNoYes
WebSocket / SSE / Socket.IONoYes
Code generationNoYes, many languages
Request historyNot synced or persisted across sessionsYes, synced
Web and mobile appsDesktop (macOS, Windows, Linux) and a full browser build; no mobile appDesktop, web and mobile
CLI runner for CImandalo 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 repoYes — Newman and the Postman CLI, packaged and documented
Editor integrationA VS Code extension, plus .http files any REST Client user can already openA VS Code extension
API design & schema toolingNo — Mándalo only sends requestsYes — spec editing, validation, generated docs
Public API directoryNoYes — a large public network of published APIs
Collaboration UINo — review happens in your git hostYes — comments, forks, pull requests on collections
Ecosystem & supportNew project, small community, no commercial supportHuge — 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.