A free, standalone desktop API client (REST, SOAP, GraphQL, gRPC, WebSocket & more) that runs 100% offline. Collections stay in local SQLite, tokens in your OS keychain — nothing ever goes to a vendor cloud. Built-in offline dev tools. Open source (MIT).
Hey Product Hunt 👋
We're the team behind Apinizer (API management). For years, our customers — banks, government agencies, insurers, hospitals, defence — told us the same thing: "When we test our APIs, our data must never leave the machine."
But modern API tools keep moving the opposite way. Collections, tokens, request/response bodies increasingly sync to a vendor cloud. For teams in regulated or air-gapped environments, that isn't a feature — it's an unacceptable risk. That was our #1 reason to build this.
Two more reasons: these tools keep changing (yesterday's free feature is behind a login/cloud/paywall today), and even the small utilities we open every day — jwt.io, text diff — force us online.
So we built Testnizer:
🔒 Fully offline. The UI physically can't reach the internet (CSP connect-src 'self') — every request goes through a local process you control. Collections live in local SQLite on your disk; tokens sit in your OS keychain (Keychain / DPAPI / libsecret). Nothing leaves your machine.
🧰 The tools you use daily, built in and offline. JWT decode/encode, text diff, JSONPath, XPath, XSLT, Jolt, Hash, HMAC, Base64, UUID, Epoch, Regex, JSON↔XML, WS-Security… everything you'd normally paste into jwt.io — now without going online.
🌐 One app, every protocol. REST, SOAP, WebSocket, GraphQL, gRPC, SSE, Socket.IO, MCP.
🔎 Open source (MIT). Don't take our word that your data stays local — read the code.
💻 Free & standalone for Windows, macOS, and Linux. No server, no account, no cloud.
We're building in the open and it's still early — if you hit a bug or want a feature, tell us on GitHub issues. Every piece of feedback goes straight into the roadmap. 🙏
Would love to hear what you think!
🌐 https://www.testnizer.com
🐙 https://github.com/apinizer/test...
Report
finally a desktop api client that doesn't nag me to sign up. love that collections live in sqlite and secrets stay in the keychain. one thing i'd really appreciate is a built-in mock server so i can stub responses from my saved collections and let the frontend dev hit them without spinning up anything else.
Thanks — though the no-signup part is more a side effect than the goal. What we actually wanted was: nothing goes to a cloud, it all stays on your machine, it stays secure, and everything I need for API work lives in one place. The SQLite storage and the keychain handling you noticed are just that decision showing through.
Which is also why the mock server is already in there — "one place" wouldn't mean much if stubbing a response sent you somewhere else. That you assumed it wasn't is on us, not on you; we've clearly buried it too well.
Right-click a request, a folder, or the project root → Create Mock Server from this…. It scaffolds the routes off your saved collection (method + path, :id params included) and runs inside the app, so there's nothing extra to start. Set the bind host to 0.0.0.0 and your frontend dev can hit it across the LAN.
One honest caveat: it mirrors the URL surface, not the bodies. If you'd rather not write those by hand, point Proxy unmatched requests to upstream at the real API with Record proxied responses as new endpoints switched on — one pass and the stubs come back filled with real payloads.
1.5 pushes further in the same direction. It's mostly a security release — keystores, JWT/JOSE, SAML, TLS inspection, all of it offline — and the mock server picks some of that up: it can serve a JWKS at /.well-known/jwks.json, so a service under test can fetch your keys from it.
Report
No reviews yetBe the first to leave a review for Testnizer — The offline API client
Apinizer
finally a desktop api client that doesn't nag me to sign up. love that collections live in sqlite and secrets stay in the keychain. one thing i'd really appreciate is a built-in mock server so i can stub responses from my saved collections and let the frontend dev hit them without spinning up anything else.
Apinizer
Thanks — though the no-signup part is more a side effect than the goal. What we actually wanted was: nothing goes to a cloud, it all stays on your machine, it stays secure, and everything I need for API work lives in one place. The SQLite storage and the keychain handling you noticed are just that decision showing through.
Which is also why the mock server is already in there — "one place" wouldn't mean much if stubbing a response sent you somewhere else. That you assumed it wasn't is on us, not on you; we've clearly buried it too well.
Right-click a request, a folder, or the project root → Create Mock Server from this…. It scaffolds the routes off your saved collection (method + path, :id params included) and runs inside the app, so there's nothing extra to start. Set the bind host to 0.0.0.0 and your frontend dev can hit it across the LAN.
One honest caveat: it mirrors the URL surface, not the bodies. If you'd rather not write those by hand, point Proxy unmatched requests to upstream at the real API with Record proxied responses as new endpoints switched on — one pass and the stubs come back filled with real payloads.
1.5 pushes further in the same direction. It's mostly a security release — keystores, JWT/JOSE, SAML, TLS inspection, all of it offline — and the mock server picks some of that up: it can serve a JWKS at /.well-known/jwks.json, so a service under test can fetch your keys from it.