Git workflow
Because every request is a plain-text .tiger file on disk, the collection
folder is a normal Git repository. Tiger surfaces the most common Git operations
directly in its sidebar panel so you never have to leave the app to version-control
your API definitions.
Why Git and API clients belong together
Requests evolve alongside the services they test. An endpoint gets a new required header, a payload schema changes, authentication switches from API key to OAuth. With most API clients those changes are opaque: the tool syncs its own binary format to a private cloud and there is no history you can inspect or discuss. Tiger takes the opposite approach: each change to a request is a line change in a text file, so your normal diff, blame, and code-review workflow applies directly.
A Tiger collection stored in a shared Git repository gives a team a single source of truth for how the API is called, with a full audit trail and the ability to propose and review changes before they land on main.
Tiger shells out to the git binary that is already on your
PATH. SSH agent forwarding, credential helpers, GPG signing, and any
other configuration you have set up in your terminal all work automatically.
The Git panel
Select a collection in the sidebar and open its Git panel (the icon that looks like a branch, or via the collection context menu) to see the current state of the repository. The panel shows:
- The current branch name.
- How many commits the local branch is ahead of or behind the upstream.
- A list of every changed file and its status - modified, added, deleted, or untracked.
Status is polled every 60 seconds passively. The passive poll deliberately does not contact the network: ahead/behind counts are computed from refs already on disk. Network-touching operations (fetch, pull, push, sync) only run when you explicitly trigger them.
Supported operations
Status
Lists every file that differs from the last commit, together with a short status
code (M modified, A added, D deleted,
?? untracked). The count of changed files appears as a badge on the
collection in the sidebar so you can see at a glance that there is unsaved work.
Diff
Click any file in the changed-files list to open a unified diff view. The diff
covers both staged and unstaged changes. Untracked files appear with a
new file (untracked) marker so nothing is silently hidden.
Because .tiger files are structured plain text, the diff is readable
without special tooling. A field change like updating a base URL from staging to
production looks exactly like what it is:
- baseUrl: https://staging.api.example.com
+ baseUrl: https://api.example.com
Commit
Enter a commit message and press Commit. Tiger stages every changed and untracked
file in the collection folder (git add -A) and then creates the commit.
There is no partial staging UI; the intent is that a commit records a coherent
snapshot of the collection. If you need fine-grained staging, use your terminal
alongside Tiger - the two operate on the same working tree.
Pull
Pulls the upstream branch with --ff-only. This means the operation
succeeds only when no local commits exist that are not already on the remote, keeping
the history linear. If the pull cannot fast-forward (because you have local commits
and the remote has diverged), Tiger reports the conflict and suggests using Sync
instead.
Push
Pushes the current branch to its configured upstream remote. If no upstream is set yet, use Set remote first (see below). Push uses your system Git credentials, so SSH keys, macOS Keychain entries, and Git credential helpers all work without additional setup.
Fetch
Refreshes the remote-tracking refs so the ahead/behind counts in the status panel reflect the real state of the remote. Fetch does not modify your working tree or local branch. It is triggered automatically as part of Sync but can also be run on its own from the panel menu.
Branches and checkout
The branch picker in the Git panel shows all local branches and the current branch.
Select a branch to check it out. You can also create a new branch by typing a name
that does not yet exist in the picker - Tiger runs git checkout -b
<name> and switches to it immediately.
Switching branches changes the files on disk, so the collection view updates to
reflect the requests on the new branch. This is useful for keeping a
main branch with approved requests and a feature branch where new
endpoints are drafted.
Log
The log view shows the most recent 20 commits: short hash, subject line, author name, and a human-readable relative timestamp (2 days ago, 3 weeks ago). The log is read-only; to inspect a specific commit in detail use your terminal or a Git GUI alongside Tiger.
Discard
Discards all uncommitted changes to tracked files by running
git reset - . followed by git checkout - .. Untracked
files (files that have never been committed) are left in place. Tiger shows a
confirmation prompt before discarding because the operation is not reversible without
a prior stash.
Discard permanently removes uncommitted edits to tracked files. It does not touch untracked files. There is no undo inside Tiger; commit or stash first if you might want those changes back.
Init
If you opened a plain folder that is not yet a Git repository, the Git panel shows
an Initialize repository button. This runs git init
in the collection root. After initialization the full Git panel becomes available.
You can then add a remote and push to share the collection with your team.
Set remote
Paste a repository URL (HTTPS or SSH) into the Set remote field to connect the local
repository to a remote. If an origin remote already exists, Tiger
updates its URL; otherwise it adds a new origin. After setting the URL
Tiger immediately publishes the current branch with
git push -u origin HEAD so future push and pull operations know their
upstream.
Accepted URL formats:
https://github.com/org/repo.gitgit@github.com:org/repo.gitssh://git@gitlab.com/org/repo.git
Clone
From the sidebar welcome screen, choose Clone a repository, paste a
URL, and pick a parent directory. Tiger runs git clone and then opens
the resulting folder as a collection. This is the recommended way to bring a shared
team collection onto a new machine.
Sync
Sync is a single-button operation designed for teams that want a simple "share and receive" workflow without thinking about pull vs push order. It does the following in sequence:
- If there are any uncommitted changes, commits them with the message you typed (defaulting to Update collection).
- Runs
git fetchto refresh the remote-tracking refs. - Pulls the upstream branch using a merge strategy
(
git pull --no-rebase) so the operation tolerates both sides having new commits. - Pushes the local branch to the remote.
If the merge step hits a conflict, Tiger aborts the in-progress merge so the working tree is never left in a half-merged state. It reports a clear message telling you to open the folder in your editor, resolve the conflict markers, and then sync again.
Sync is the right operation for day-to-day team sharing. Use plain Pull only when you know you have no local commits and want a strict fast-forward.
Reviewing API changes in a pull request
Because every request is a text file, opening a pull request against a Tiger collection on GitHub, GitLab, or Bitbucket gives reviewers a meaningful diff in the platform's own review UI. Here is a typical workflow:
- Create a feature branch. In the Tiger Git panel, type the new branch name in the branch picker and press Enter. Tiger creates and checks it out.
-
Add or modify requests. Work normally inside Tiger - add a new
endpoint, change a header, update the body schema. Each change lands in the
corresponding
.tigerfile on disk. - Commit. Write a descriptive message such as Add POST /orders endpoint with auth header and commit from the panel.
- Push. Push the branch to the remote. If this is the first push of the branch, Tiger sets the upstream automatically.
- Open a pull request on your Git host. Reviewers see line-level diffs like the one below and can comment on specific fields.
--- a/orders/create-order.tiger
+++ b/orders/create-order.tiger
post {
- url: {{baseUrl}}/v1/orders
+ url: {{baseUrl}}/v2/orders
}
headers {
+ X-Idempotency-Key: {{idempotencyKey}}
Content-Type: application/json
}
A reviewer can check out the branch locally, open the collection in Tiger, run the requests against a staging environment, and leave comments - the same loop they follow for code review. Once approved the branch is merged and the change is part of the permanent history of the collection.
Authentication and credentials
Tiger never manages Git credentials itself. It shells out to the system
git binary with GIT_TERMINAL_PROMPT=0, which prevents Git
from trying to open an interactive password prompt inside the app. All credential
resolution happens through the helpers you have already configured:
- SSH keys and your
ssh-agentare used automatically for SSH remotes. - macOS Keychain, Windows Credential Manager, and the Git credential store work for HTTPS remotes.
- If a push or pull fails with an authentication error, configure the credential helper in your terminal first, then retry from Tiger.
Merge conflicts
Tiger does not have a merge conflict editor. When a pull or sync produces conflicts,
Tiger aborts the merge and tells you which step failed. Open the collection folder
in your editor of choice (VS Code, Neovim, etc.), resolve the standard
<<<<<<< conflict markers in the
.tiger files, save the files, and then commit the resolution from Tiger
or your terminal. After the commit, sync again to push the resolved state to the
remote.
Because the format is structured plain text, conflict markers appear inline with the field values and are easy to read:
headers {
<<<<<<< HEAD
Authorization: Bearer {{stagingToken}}
=======
Authorization: Bearer {{productionToken}}
>>>>>>> origin/main
}
Working without a remote
Git is not required to use Tiger, and a remote is not required to use Git inside Tiger. If you initialize a repository but do not add a remote, commit and log operations work fully locally. Sync reports Changes saved locally (no team remote configured) and returns successfully. Push and pull are the only operations that require a configured remote.
Limitations
- There is no partial staging (no interactive
git add -p). Every commit captures the entire working tree. Use your terminal for cherry-picked staging. - The log view is limited to the 20 most recent commits. For full history, use your terminal or a dedicated Git GUI.
- There is no stash UI. Use
git stashin the terminal when you need to set aside changes temporarily. - Submodules are not supported.
- Tiger requires
gitto be onPATH. On macOS, install the Xcode Command Line Tools (xcode-select --install) or Homebrew Git. On Windows, install Git for Windows.