Free, no sign-up. Version 0.7.0.
Installs from the Windows Setup exe, the macOS dmg or zip and the Linux AppImage update themselves in the app (Restart now, or on next quit). The portable exe and zip, the .deb and the tar.gz do not: Help > Check for Updates links the new download.
Coming soon: winget install jtaoufik.Tiger, pending review.
See all downloads and checksums or the install guide. The GitHub Windows builds (Setup exe, portable exe and zip) can show a SmartScreen "unknown publisher" prompt on first run: click More info, then Run anyway.
Features
- Git-native collections. One
.tigertext file per request. Diff, branch and review them like code. - Save values. Capture a status code, a header or a JSON path such as
body.data[0].idfrom a response into a variable for the next request. - Scripts & tests. Pre-request and post-response JavaScript, with
tiger.testassertions that show pass or fail. Postman (pm.*), Insomnia (insomnia.*) and Bruno (bru,res,req) scripts run through a compatibility layer, inside an isolated sandbox with no access to your files or the network. - Collection runner. Run a whole collection or folder in order, with live results, saved values passed between requests, and a stop button.
- Load test. From a request's Load test tab, send it many times with set concurrency and get min, max, average, p50 and p95 timings.
- Team sync. Share a collection through Git with one Sync with team button, a list of your changes, saved versions and side-by-side conflict choices. No Git vocabulary needed, Git users get an Advanced section.
- AI assistants (MCP). A built-in MCP server lets Claude, Cursor and other MCP clients list, read and run your requests. See Connect an AI assistant.
- Environments and secrets. Named variable sets with
{{variable}}interpolation in URLs, headers, params, bodies and auth. Secret variables are masked. Dynamic variables:{{$uuid}},{{$timestamp}},{{$isoTimestamp}},{{$randomInt}}, plus the Postman spellings{{$guid}},{{$randomUUID}},{{$randomBoolean}}and{{$randomAlphaNumeric}}. - Auth and networking. Bearer, Basic, API key and OAuth 2.0 (client credentials). HTTP, HTTPS and SOCKS proxy. Custom CA bundles and client certificates (mTLS) via PEM pair or PFX/PKCS12.
- REST, GraphQL and SOAP. Dedicated GraphQL body with a variables pane. Raw XML bodies for SOAP, and WSDL import that turns each operation into a ready-to-send request.
- Bodies and responses. JSON prettify and minify, multipart and file upload, response search (Cmd/Ctrl+F), sandboxed HTML preview and inline images.
- Import and export. Import Postman v2.0/v2.1 collections, environments and globals, Insomnia v4 or v5, a Bruno folder, OpenAPI 3 or Swagger 2, WSDL, or a pasted curl command, or drop the file or folder on the window. Each import ends with a short report of what came in and what to check. Export to Postman v2.1, OpenAPI 3.0,
.tigeror curl. - Code snippets and cookies. Turn any request into curl, JavaScript fetch or Python. A persistent cookie jar with cross-origin stripping on redirects.
- Keyboard-first. A shortcuts overlay on Cmd/Ctrl+/, a command palette, tab cycling, inline rename and drag and drop. A native File, Edit, Request, View, Window and Help menu on every platform.
- Accessible. Readable contrast, full keyboard use, screen reader announcements and Windows High Contrast support.
- Six languages. English, Simplified Chinese (中文), Hindi (हिन्दी), Spanish (Español), French (Français) and Arabic (العربية) with a full right-to-left layout. Tiger starts in your system language; Settings > General > Language switches the app, its menus and dialogs live, without a restart.
Switching from Postman, Insomnia or Bruno
Export from your current tool and import the file into Tiger. Folders, requests, variables and auth carry over, and the result is a folder you can commit.
On first launch the home screen has an import card for each tool, with where to find the export. You can also drop an export file (or a Bruno folder) anywhere on the window. Tiger works out which tool it came from, imports it, and shows a report: how many requests, folders and environments came in, and a list of anything that only partly mapped, with the request name and what to check. Nothing is thrown away: an unsupported script call or auth type is kept and flagged, not dropped.
The pm.* layer covers pm.test, pm.expect (the common Chai assertions), pm.response (code, status, json(), text(), headers, responseTime, to.have.status, to.have.header, to.be.ok), pm.environment, pm.variables, pm.collectionVariables, pm.globals, pm.request (read, plus adding or removing headers in a pre-request script), pm.info, and the legacy tests[...], responseBody, responseCode and postman.setEnvironmentVariable. Tiger has one variable scope, so every Postman scope reads and writes the active environment.
Imported scripts run in Tiger's isolated script sandbox, the same as your own: a separate sandboxed process with no access to your files, your repository or the network.
More:
- Importing collections: Postman, Insomnia, Bruno, OpenAPI, WSDL and curl.
- Postman to Tiger migration guide.
- A free Postman alternative, plus comparisons with Bruno, Insomnia and Hoppscotch.
How Tiger compares
Tiger is built around a different set of priorities than most API clients. Here is how those priorities translate in practice.
Pricing and features of other tools change, so check their sites too. Full breakdown: https://jtaoufik.github.io/tiger/compare/
Why Tiger
- Collections as plain text in Git. A collection is a folder of
.tigerfiles. Every field is human-readable, so API changes show up as small diffs in pull requests. - No account, fully offline, local-first. Tiger never phones home for your data. Everything lives in a folder you own.
- MCP server for AI assistants. Claude, Cursor and any MCP-compatible assistant can list, read and run requests from your collection without leaving the chat.
- Free and open source. MIT licensed, no per-seat price, no paid tier gating the basics.
The .tiger format
One request per file. Readable in any editor, friendly to git:
meta {
name: Create post
seq: 2
}
post {
url: {{baseUrl}}/posts
}
headers {
Content-Type: application/json
~X-Debug: 1
}
body:json {
{ "title": "Hello from Tiger" }
}
auth:bearer {
token: {{token}}
}
capture {
postId: body.id
}
A ~ prefix disables a line without deleting it. The capture block writes response values into environment variables for the next request in the chain. Environments live in an environments/ subfolder:
meta {
name: production
}
vars {
baseUrl: https://api.example.com
token: abc123
}
Build from source
npm install
npm run dev # launch the app in development mode
npm test # run the test suite
npm run package # build distributables for your platform
Open a collection folder from the sidebar, or try examples/jsonplaceholder to see the format in action.
Connect an AI assistant (MCP)
Tiger ships an MCP server that gives AI clients safe, structured access to a collection. Build it once:
npm run build:mcp
Then register it in your AI client's config. For Claude Desktop, add this to claude_desktop_config.json:
{
"mcpServers": {
"tiger": {
"command": "node",
"args": ["/path/to/tiger/out/mcp/server.mjs", "/path/to/your/collection"]
}
}
}
The assistant gets four tools: list_requests, list_environments, get_request, and run_request. Every response includes the status code, timing, response headers, and a pretty-printed body. Your collection stays on disk; nothing is sent to any third party.
What it's for - letting an AI assistant work with the requests your team already keeps in Git, using the real URLs, auth, variables, and environments instead of guessing or pasting curl into the chat:
- Agentic testing & debugging - "run the
create-userrequest against staging and tell me why it 401s." - Chained workflows - "call
login, take the token, then run/me" (pairs with Tiger's response captures). - Inside an AI coding session - in Claude Code or Cursor, the model exercises your real endpoints through curated, environment-aware requests.
- Read-only exploration - "list the requests and summarize what this API does."
- Smoke checks - point it at a collection and ask it to run the health checks and flag anything non-2xx.
Full guide: https://jtaoufik.github.io/tiger/docs/mcp/
FAQ
Is Tiger a free Postman alternative? Yes. It is MIT licensed, free for personal and commercial use, and covers collections, environments, auth, scripts and tests, a collection runner and Postman import.
Does Tiger work offline, and do I need an account? It works fully offline and needs no account. Requests go from your computer straight to the API you call.
Where are my collections stored? In a folder you choose, as one .tiger text file per request. Put it in any Git repository.
How does Tiger differ from Bruno? Both are open source and offline with plain-text collections. Tiger also ships a built-in MCP server, WSDL/SOAP import, client certificates, a Load test tab and Team sync. See the comparison.
Does Tiger collect my requests? No. It never records URLs, hostnames, headers or bodies. See Privacy for the anonymous usage events and how to turn them off.
More answers in the full FAQ.
Privacy
Tiger sends anonymous usage analytics by default: app opened, request sent (method and status bucket only), and collection imported (source and count). It never records URLs, hostnames, header values, or bodies. The only identifier is a random app-local ID. Turn it off any time in Settings under Privacy.
Architecture
src/core Pure TypeScript: format, interpolation, auth, request building,
response formatting, captures, importers, exporters, codegen.
No DOM, no Node dependency. Fully unit-tested.
src/main Electron main process: windows, application menu, file IO, HTTP,
settings, history.
src/preload The narrow, typed IPC bridge.
src/renderer React UI (glass).
src/mcp The MCP server (stdio) and its filesystem store.
The core is dependency-free and fully unit-tested. The UI and the MCP server are thin layers on top of it.
Contributing
See CONTRIBUTING.md. The short version: tests first, keep core pure, match the existing style.
Support
Tiger is free and open source, built and maintained on personal time. If it saves you from a paid plan or just makes your day a little easier, you can buy me a coffee. Find me on LinkedIn (Taoufik Jabbari). It funds new features and keeps the project independent. Thank you.
License
MIT. See LICENSE.