Free, open source, git-native API client. A local-first Postman, Insomnia and Bruno alternative for macOS, Windows and Linux: plain-text .
Overview
Tiger: free, open source, git-native API client A local-first Postman, Insomnia and Bruno alternative for macOS, Windows and Linux, with a built-in MCP server. No account, no cloud. Website · Docs · Compare · FAQ · Download for testing REST, GraphQL and SOAP APIs. Every request is a plain-text .tiger file in a folder you own, so you can commit your collections to Git, branch them and review API changes in pull requests. It works offline, needs no account, and includes an so AI assistants such as Claude and Cursor can list and run your saved requests. If you are looking for a , an or a (like Bruno or Insomnia, with your data kept local), Tiger is built for that. 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.
README
Tiger: free, open source, git-native API client
A local-first Postman, Insomnia and Bruno alternative for macOS, Windows and Linux, with a built-in MCP server. No account, no cloud.
Website · Docs · Compare · FAQ · Download
Tiger is a free, open source API client for testing REST, GraphQL and SOAP APIs. Every request is a plain-text .tiger file in a folder you own, so you can commit your collections to Git, branch them and review API changes in pull requests. It works offline, needs no account, and includes an MCP server so AI assistants such as Claude and Cursor can list and run your saved requests. If you are looking for a Postman alternative, an offline API client or a git-based API client (like Bruno or Insomnia, with your data kept local), Tiger is built for that.
Download
Free, no sign-up. Version 0.7.0.
| Platform | Download | Notes |
|---|---|---|
| Windows | Microsoft Store | Recommended: signed by Microsoft, no warning, updates itself. |
| Windows (Setup exe) | Setup installer | No Store needed. Adds Start menu and desktop shortcuts. |
| Windows (portable) | Portable EXE | No install. Run it from any folder or USB drive. |
| macOS (Apple Silicon) | Download .dmg | M1 and later. Signed and notarized. |
| macOS (Intel) | Download .dmg | Signed and notarized. |
| Linux | AppImage | Self-contained, updates itself. |
| Linux (Debian, Ubuntu) | .deb | sudo apt install ./Tiger-linux-amd64.deb |
| Windows (portable zip) | Portable zip | Unzip and run Tiger.exe. Tip: right-click the zip, Properties, tick Unblock before unzipping. |
| macOS (zip) | Apple Silicon · Intel | Unzip and move Tiger.app to Applications. |
| Linux (tar.gz) | tar.gz | Extract and run ./tiger-api-client. |
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.
| What you have | Postman | Insomnia | Bruno |
|---|---|---|---|
| Requests, folders, method, URL, query, headers | Yes | Yes | Yes |
| Disabled headers and params | Yes | Yes | Yes |
| JSON, text, XML, form, GraphQL bodies | Yes | Yes | Yes |
| Multipart form-data with files | Yes, file paths kept (check they exist) | Yes | Yes |
| Binary file body | Flagged | Flagged | Not in Bruno |
Path variables (/users/:id) |
Yes, value written into the URL | Yes | Yes |
| Collection auth | Yes | Not in Insomnia | Yes (collection.bru) |
| Folder auth, inherited by nested folders | Yes | Yes | Yes (folder.bru) |
| Bearer, Basic, API key, OAuth 2 client credentials | Yes | Yes | Yes |
| Other auth (Digest, AWS, NTLM, OAuth 1, other OAuth 2 grants) | Flagged, set to no auth (a saved OAuth 2 token becomes Bearer) | Flagged | Flagged |
| Environments | Yes, including secret and disabled values | Yes, sub environments merged over the base | Yes |
| Nested environment JSON | Not in Postman | Yes, as dotted names ({{api.url}}) |
Not in Bruno |
| Collection variables | Added to every imported environment | Not in Insomnia | Added to every imported environment |
| Globals | Become an environment named Globals | Not in Insomnia | Not in Bruno |
| Folder variables | Not in Postman | Flagged | Flagged |
| Collection and folder headers | Not in Postman | Not in Insomnia | Copied into each request |
| Pre-request and test scripts | Yes, runs through a pm.* compatibility layer |
Yes (insomnia.*) |
Yes (bru, res, req, test, expect) |
| Collection and folder scripts | Copied into each request | Copied into each request | Copied into each request |
| Declarative assertions | Not in Postman | Not in Insomnia | Converted to tests where the operator maps |
pm.sendRequest, pm.cookies, require(), CryptoJS, async code |
Kept and flagged | Kept and flagged | Kept and flagged |
| Dynamic variables | $guid, $timestamp, $isoTimestamp, $randomInt, $randomUUID; faker ones are flagged |
{% uuid %} and {% now %}; other tags are flagged |
Same as Postman |
| gRPC and WebSocket requests | Not in Postman exports | Skipped and counted | Not supported |
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.
| Feature | Tiger | Postman | Bruno | Insomnia | Hoppscotch |
|---|---|---|---|---|---|
| Local-first / offline | Yes | Partial - cloud workspace required for most features | Yes | Partial - cloud sync optional but nudged | Partial - self-host or web app |
| Plain-text & git-native | Yes - one .tiger file per request |
No - proprietary cloud or JSON export | Yes - .bru files |
No | No |
| No account required | Yes | No | Yes | No | Partial - self-host avoids it |
| Free / per-seat price | Free (MIT) | Free tier; paid from $14/mo per user | Free (MIT) | Free tier; paid from $8/mo per user | Free (MIT, self-host) |
| Open source | Yes | No | Yes | Partial - core open, cloud closed | Yes |
| Built-in MCP server | Yes | No | No | No | No |
| SOAP / WSDL import | Yes - operations become ready-to-send POST requests | Yes | No | No | No |
| OpenAPI & Postman import | Yes | Yes | Yes - Bruno import only | Yes | Yes |
| Pre / post scripting | Yes | Yes | Yes | Yes | Partial |
| Collection runner | Yes | Paid tiers | Yes | Yes | Partial |
| Native macOS / Windows / Linux | Yes | Yes | Yes | Yes | No - web app |
| No traffic telemetry | Yes - requests never leave your machine | No | Yes | No | Partial - depends on hosting |
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:
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.
Install
This server does not publish a one-line install command.
Open the repository installation guideConfiguration
{
"mcpServers": {
"tiger": {
"command": "node",
"args": ["/path/to/tiger/out/mcp/server.mjs", "/path/to/your/collection"]
}
}
}