Now in early release — v0.1.0 Beta

Stop thrashing your working directory.

GitMonster is the worktree-first Git client for developers who run multiple branches in parallel. Every branch gets its own folder, its own terminal, its own state — all in one fast, native desktop app.

Also available for Windows and Linux · Native, not Electron

gitmonster-website · main
Worktrees
main
~/code/gm
feat/queue-refactor
~/code/gm-queue
+37
hotfix/login-race
~/code/gm-login
2
review/1284-auth
~/code/gm-1284
4
Branches · 23
Local · 12
Remote · 11
Pull requests · 6
Stashes · 2
Tags · 14
feat/queue-refactor
~/code/gm-queue · 10 changes · 2 ahead
Merge Into…
worker/queue.ts
@@ -18,6 +18,9 @@
 const q = new Queue();
-q.retries = 3;
+q.concurrency = 4;
+q.onDrain(flushPending);
+q.resume();
zsh · queuezsh · loginzsh · 1284+ new tab
 pnpm test worker/queue
PASS  worker/queue.test.ts (14 tests, 1.2s)
 _
The problem

Switching branches shouldn't mean stashing your afternoon.

You're halfway through a feature. A reviewer pings you on a PR. A hotfix drops. The old way: stash, checkout, hope your half-done work survives the round trip, then dig it back out and realize you dropped a file.

Every traditional Git GUI — GitHub Desktop, Sourcetree, GitKraken, Fork — is built around a single checkout. One folder, one branch, one working state. Context-switching means blowing away what you had loaded.

Worktrees fix this at the plumbing level. But git worktree add is clunky, tracking them across the filesystem is its own job, and no GUI makes the workflow first-class. So most developers never touch them.

Meet GitMonster

The same Git you already know, with the parts that waste your time removed.

GitMonster is a fast, native desktop Git client that treats worktrees as first-class citizens. Open every branch you care about in its own isolated folder, run them side by side, and jump between them in a single click.

Worktree-native, end to end
Spin one up from a form — base branch, new branch name, done. Every worktree shows its sync status, staged / unstaged / untracked counts, and a one-click terminal.
A terminal tab for every branch
A real xterm.js terminal lives at the bottom of the window, with one tab per worktree and your native shell. No more flipping to iTerm to run tests.
Native, not Electron
Built with Tauri 2 and Rust. Small binary, fast startup, low memory footprint. Feels like a real macOS app because it is one.
GitHub built in, not bolted on
Browse, create, review, and merge PRs without leaving the app. Three auth methods so you're never locked in: OAuth device flow, PAT, or gh CLI.
Worktrees, done right

One repo. Every branch. All open at the same time.

The worktree dashboard is the center of gravity in GitMonster. Every branch you care about is a row: branch name, path, sync status, staged/unstaged/untracked counts, clean or dirty. Pick a row, start working. Pick another, keep working.

Worktrees
+ New worktree
mainclean
~/code/gm
feat/queue-refactordirty
~/code/gm-queue
2+3M7?1
hotfix/login-racedirty
~/code/gm-login
1+1
review/1284-authclean
~/code/gm-1284
4
spike/agentsdirty
~/code/gm-agents
M14?3

A dashboard, not a tree of branches

Every worktree lists its ahead/behind status and file counts at a glance. Click any badge to open a filtered file browser scoped to that worktree — staged, modified, untracked, or all.

Create in one form

Pick a base branch, name the new branch, and GitMonster proposes a path like repo-feature-name. Override it with a browse dialog if you want. No terminal, no flags to remember.

Per-worktree terminal, one click

Open Terminal on any worktree and a new tab opens in the bottom strip, cwd'd to that worktree's folder. Your shell, your env, your dotfiles.

Merge, remove, prune — safely

Merge a worktree into another branch, force-remove it if it's dirty, or prune stale entries. Destructive actions get a confirm dialog. You won't blow away work by accident.

Keep a feature branch, a hotfix, and the PR you're reviewing all open simultaneously — no stashing, no checkout churn.

Built-in terminal

A real terminal. In the app. Per worktree.

No separate terminal app required. GitMonster ships a full xterm.js terminal along the bottom of the window — native shell, full ANSI color, responsive resize, Catppuccin Mocha by default.

One tab per session

Spawn a terminal in any worktree's directory with one click. Rename tabs, close tabs, collapse the whole strip when you want more room for the diff viewer.

Your shell, your env

Uses your native $SHELL — zsh on macOS, pwsh on Windows, whatever's in your env on Linux. Spawned via portable-pty so it behaves like a real terminal, not a shim.

Color and resize that actually work

Full ANSI and 256-color support. Resize the strip and the PTY resizes with it — so vim, tmux, and htop render correctly every time.

zsh · queuezsh · loginzsh · 1284zsh · agents+ new
gregj gm-queue feat/queue-refactor
 pnpm test worker/queue
PASS  worker/queue.test.ts (14 tests, 1.2s)
  ✓ drains in order
  ✓ respects concurrency
  ✓ emits onDrain once
 git status -sb
## feat/queue-refactor...origin/feat/queue-refactor [ahead 2]
 M worker/queue.ts
 M worker/queue.test.ts
 _
Pull requests

Review and ship PRs without leaving the app.

GitMonster talks to the GitHub REST API directly — and falls back to the gh CLI when you prefer. Browse PRs, read the diff, check CI status, leave comments, and merge with the method you actually want.

Three auth methods, never locked in

  • 1OAuth device flow — recommended. No token ever hits your disk.
  • 2Personal access token with repo scope, stored in the OS keychain.
  • 3gh CLI passthrough — if you're already logged in, gh does the auth.
Filtered list
Open / Closed / All, with state badges and review decisions.
Three-tab detail
Overview, Diff, and Comments — all in one view.
Create inline
Title, description, base and head branch. No browser tab needed.
Merge your way
Merge commit, squash, or rebase — with an optional delete-branch.
OPEN#1284 approved
Replace retry shim with queued worker
aria → main · 2 commits · opened 4h ago

Replaces the synchronous fetch path with a queued worker. Drops a redundant round-trip and removes the old retry shim.

+248−17212 files changed
All checks passed
✓ lint · 18s
✓ test (unit) · 1m 12s
✓ test (integration) · 3m 04s
✓ build · 2m 41s
Everything you'd expect

All the standard Git workflows, just polished.

Worktrees are the headline, but the rest of the client is complete. You won't fall back to the terminal for the basics.

Branches

Local and remote lists, checkout, merge, rebase, force-delete, ahead/behind.

Commits

100 most recent, with message, author, date, and per-file diffs.

Stash

Create with a message, pop, drop — and the quick 'Stash Changes' action.

Tags

Annotated or lightweight. Newest first. Create and delete inline.

Remotes & sync

Fetch, pull, push. Auto-upstream on first push. Ahead/behind indicators everywhere.

Cherry-pick

Grab any commit from history and lift it onto the current branch.

Revert

One-click revert with auto-commit. Safe, traceable, no guesswork.

Rebase

Standard rebases, interactive where it counts. No surprise rewrites.

Merge

Fast-forward or merge commit — and conflict resolution when it isn't.

Diff viewer

Color-coded unified diffs, used everywhere — changes, commits, PRs, conflicts.

New repos

Init with README, .gitignore, and license templates. Or clone from URL.

Live status

Staged / unstaged / untracked, color-coded by M/A/D/?. Commit with ⌘+Enter.

Merge conflicts

Guided conflict resolution. Or a clean abort if you need out.

When a worktree merge conflicts, GitMonster drops you into a guided flow: a banner with the list of conflicted files, a click-through diff for each one, and the commit button right there when you're done.

Merge conflict · 2 filesAbortCommit merge
worker/queue.ts
README.md
@@ worker/queue.ts @@
<<<<<<< HEAD
  q.concurrency = 4;
=======
  q.concurrency = 8;
>>>>>>> feat/queue-refactor

See exactly what's in conflict

Every conflicted file is listed with the full diff. Resolve in your editor of choice — GitMonster picks up the cleaned file and marks it ready.

Commit the merge from inside the app

Once everything's resolved, one button finishes the merge. Your commit message is pre-filled with something sensible.

Abort cleanly if it's not worth it

Changed your mind halfway through? Hit Abort merge and you're back on your original branch with your working tree intact.

Native, fast, lightweight

No Electron. No Chromium overhead. A real desktop app.

GitMonster is built on Tauri and Rust. The binary is small, the cold-start is fast, the memory footprint is low, and the window uses real native conventions — traffic-light positioning, vibrancy, overlay titlebars on macOS.

Tauri 2
Native window, Rust backend, tiny binary.
Rust
All Git operations shell out to git with structured parsing.
React 19 + TypeScript
Modern UI, modern types.
shadcn/ui + Tailwind
Polished, accessible components.
xterm.js
Real terminal emulation, not a shim.
portable-pty
Native PTY spawning on every supported platform.
GitHub REST + gh
Never locked into one auth or transport.
Settings & personalization

A handful of knobs. None of them in your way.

Theme
Dark, Light, or System. Transparent sidebar with native macOS vibrancy when you want the window to disappear into the background.
GitHub account
Connection status, auth method, connect / disconnect. Switch between OAuth, PAT, and gh without re-installing.
Toolchain
GitMonster detects your git and gh binaries and shows their versions, so you know what you're actually running against.
v0.1.0 Beta · early release

Try GitMonster.

Native binaries for macOS, Windows, and Linux. Grab one and have your worktrees open in under a minute.

Signed binaries · auto-update on macOS and Windows

FAQ

Frequently asked.