Tiger vs Bruno

Tiger and Bruno share the same founding conviction: API collections belong in your Git repository, not in a vendor's cloud. Both are MIT-licensed, fully offline, and require no account. This page lays out where they differ, fairly and without marketing spin, so you can choose the right tool for your team.

What they have in common

Before the differences, the common ground is substantial. Both tools store every request as a human-readable plain-text file - .tiger for Tiger, .bru for Bruno - inside a normal folder on disk. That folder is a Git repository, so requests get versioned, branched, diffed, and reviewed alongside code. Neither product requires an account, neither phones home with your request data, and both run natively on macOS and Windows (Tiger also ships first-class Linux builds as of 0.4.0). Both support REST, GraphQL, {{variable}} interpolation, named environments, OAuth 2.0, pre- and post-request JavaScript, and collection-level runners.

Tiger can import a Bruno collection folder directly. Collections, environments, headers, query parameters, bodies, and variable references all carry over. Tiger stores the imported requests in its own .tiger format afterward.

Side-by-side comparison

Capability Tiger 0.4.0 Bruno
License MIT MIT
Collections as plain text in Git Yes - .tiger files Yes - .bru files
Account required Never Never
macOS / Windows / Linux native builds Yes - all three Partial - macOS + Windows; Linux via community builds
MCP server for AI clients Yes - tiger-mcp binary ships with the app; exposes list_requests, list_environments, get_request, run_request tools No
WSDL / SOAP import Yes - each binding operation becomes a POST with a ready-to-fill SOAP envelope; SOAP 1.1 + 1.2 (added in 0.4.0) No
Client certificates (mTLS) Yes - PEM pair or PFX/PKCS12, plus custom CA bundle No
Performance / load runs Yes - configurable N requests with concurrency; reports min, max, avg, p50, p95 No - requires an external tool such as k6 or wrk
Response captures for request chaining Yes - declarative capture block in the .tiger file; no scripting required Scripts - possible via pre/post-request JavaScript; no dedicated capture syntax
Collection runner with pass/fail assertions Yes - live verdicts, stop button, capture chaining across requests Limited - basic runner; assertion support is less complete
Built-in Git UI (commit, push, pull, diff, branch) Yes - commit, push, pull, diff, branch, checkout, clone, discard, log, sync inside the app No - Git operations happen outside the app
Response search (Cmd/Ctrl+F) Yes - highlight + match cycling No
HTML and image response preview Yes - sandboxed HTML frame; inline image preview No
Multipart file upload Yes - per-row file picker; @file: paths in .tiger Yes
Dynamic variables ({{$uuid}}, {{$timestamp}}, etc.) Yes Partial
Pre/post-request JavaScript Yes Yes
GraphQL with variables pane Yes Yes
OAuth 2.0 client credentials Yes Yes
Import: Postman v2.0/2.1, Insomnia v4, OpenAPI 3 / Swagger 2, Bruno, curl, WSDL All six Most - Postman, Insomnia, OpenAPI, curl; not WSDL
Export: Postman v2.1, OpenAPI 3.0, curl, fetch All four Partial
Community and ecosystem Newer - smaller community; active development Established - launched 2022; tens of thousands of GitHub stars; broad plugin ecosystem
CLI runner No - desktop only Yes - @usebruno/cli runs collections in CI
Documented file format spec Internal - readable but not formally published Documented - published .bru spec; third-party tooling built on it

Where Tiger goes further

Built-in MCP server

Tiger ships a Model Context Protocol server (tiger-mcp) that exposes your saved requests as tools for any MCP-compatible AI client. Claude Desktop, Cursor, and others can call list_requests, list_environments, get_request, and run_request against your collection without leaving the chat. The server reads your collection from disk; your request data goes nowhere except to the API you are calling.

Configure it in claude_desktop_config.json like this:

{
  "mcpServers": {
    "tiger": {
      "command": "node",
      "args": [
        "/path/to/tiger/out/mcp/server.mjs",
        "/path/to/your/collection"
      ]
    }
  }
}

WSDL / SOAP import (new in 0.4.0)

Point Tiger at a .wsdl file and it parses the binding operations and generates one POST request per operation. Each request arrives with:

For teams that maintain legacy enterprise services alongside modern REST APIs, this means everything lives in one client rather than keeping a separate SOAP tool.

Client certificates and mTLS

Tiger accepts a custom CA bundle for self-signed or internal PKI certificates, and supports client certificate authentication via either a PEM key/cert pair or a PFX / PKCS12 file. This covers mutual TLS scenarios common in financial services, healthcare, and internal microservice meshes. Bruno does not currently ship this capability.

Performance runs

Select any request, open the Perf tab, set the number of iterations and a concurrency level, and Tiger fires the requests and reports min, max, avg, p50, and p95 latency inline. No external tool, no subscription. Bruno has no equivalent; you would reach for k6 or wrk.

Declarative response captures

Tiger's capture block in the .tiger format lets you pull a value from any response - status code, a response header, or a JSON path like body.data[0].id - and write it into an environment variable for the next request. This is declared in the file, not in a script, so it shows up in diffs and reviews without requiring anyone to read JavaScript:

capture {
  token: body.access_token
  userId: body.user.id
}

Bruno can achieve the same result through a post-request script, but there is no dedicated syntax, so the intent is less visible in code review.

Built-in Git UI

Tiger surfaces Git operations - status, diff, commit, push, pull, branch, checkout, clone, discard, log, and sync - inside the app. Team members who do not use a terminal can still participate in version control without a separate GUI client.

Where Bruno goes further

CLI runner for CI

Bruno ships @usebruno/cli, a standalone Node package that runs a collection from the command line. This makes it straightforward to add API test suites to a CI pipeline without any desktop app. Tiger is desktop-only; there is no equivalent CLI runner today.

Community and ecosystem

Bruno launched in 2022 and has tens of thousands of GitHub stars. The ecosystem includes community-built plugins, integrations, and third-party tooling built on the documented .bru file format. If you need to find a ready-made solution for an unusual workflow, the Bruno community is a larger pool to draw from.

JavaScript scripting maturity

Bruno's pre- and post-request scripting, assertions, and test output have had more time to mature and accumulate community examples. Both tools run sandboxed JavaScript, but Bruno's ecosystem of documented patterns for complex scripting scenarios is broader.

Which should you choose?

Choose Tiger if any of these apply:

Choose Bruno if any of these apply:

Tiger imports Bruno collections directly. If you want to try Tiger without abandoning your existing collection, open Tiger, choose Import, pick your Bruno folder, and your requests will be ready in seconds.

Frequently asked questions

Does Tiger export back to Bruno's format?

Not currently. Tiger exports to Postman v2.1, OpenAPI 3.0, curl, and JavaScript fetch. If you need to move work back to Bruno, exporting to Postman v2.1 and then importing that into Bruno is the most complete path.

Do both tools support secret variables?

Yes. In Tiger, marking a variable as secret masks its value in the UI so it does not appear in screenshots or screen shares. The value is still stored in the environments file on disk, so how you handle that file in Git (gitignore, secrets manager, etc.) is your responsibility - the same is true in Bruno.

Which tool is better for a team?

Both store collections in Git, which is the most durable basis for team collaboration. Tiger's built-in Git UI lowers the bar for team members who do not use the terminal. Bruno's CLI runner is valuable if your team wants collection tests to run automatically in CI. The right answer depends on which gap matters more to your team.

Is Tiger's MCP server safe to use?

The MCP server reads your collection from disk and sends requests to the URLs defined in your collection, exactly as if you pressed Send yourself. It does not send your collection data to any third party. The AI client sees the request definition and the response; your API credentials stay in your environment files on your machine.

Related pages

Importing collections
How to import from Bruno, Postman, Insomnia, OpenAPI, WSDL, and curl.
MCP server
Connect Tiger to Claude, Cursor, or any MCP-compatible AI client.
Environments and variables
Named environments, secret values, and {{variable}} interpolation.
Tiger vs Postman
How Tiger compares to Postman on features, pricing, and privacy.