A fast, native-feeling desktop Git client built around a rich, multi-lane commit graph.
Cross-platform (Windows · macOS · Linux) · Built with Tauri, Rust, and React.
Bonsai is a local Git client built around a smooth, multi-lane commit graph. Rust owns all of the Git logic and the graph-layout math via libgit2; the UI only renders — so the graph stays fast even over histories of 20,000+ commits.
Status: shipping
1.5.0.1.0.0was the first public release (2026-08-18);1.1.0through1.5.0have shipped since. The app is feature-complete for everyday Git work on Windows, macOS, and Linux — see the CHANGELOG.Forge / pull-request support is verified on two of the four providers. Listing, reading, opening, merging, and closing PRs is implemented for GitHub, GitLab, Bitbucket, and Azure DevOps and covered by tests against the mock harness, but only GitHub and Azure DevOps have been exercised against real access tokens on a real repository. Expect rough edges on GitLab and Bitbucket until someone runs them for real. Everything else is release-ready.
Captured against the mock-IPC browser harness with fixture data — see docs/assets/screenshots/README.md for what's shown and how to regenerate these.
- Rich commit graph — multi-colored branch lanes, smooth curved fork/merge
edges, and ref pills for local branches,
origin/*remotes, tags, and HEAD. Virtualized on a canvas so scrolling stays smooth over very large histories. Large histories stream in batches, so the first screenful paints immediately and the rest arrives in the background. - Three-pane workspace — branches / remotes / tags on the left, the graph in the center, and working-directory status, diffs, commit details, and per-branch CI checks on the right. The sidebar is a keyboard-navigable tree, and single-clicking a ref reveals it in the graph.
- Stage & commit — file-level staging/unstaging and commit, with author/committer taken from your Git config.
- Diffs — for both working-directory changes and any commit you select (vs. its first parent), including per-line discard of unstaged changes.
- Branches & remotes — create, checkout, and delete branches; check out any commit into detached HEAD straight from the graph or a ref pill; fetch, fast-forward pull, push, and force-push-with-lease. Tags are synchronised and marked local-only / remote-only / diverged.
- History tools — reflog viewer with restore,
git bisect, merge, rebase, and stashes, all with in-app conflict resolution. - Git-activity log — a dock streaming live git phases and progress, so you can see exactly what Bonsai ran and how far it got.
- Repository management — multiple repos open in tabs, named worktrees, background auto-fetch, first-run onboarding, in-app Git config editing, a repo-health dashboard, and a stale-branch cleanup review.
- Commit identities — multiple Git identities with a color assigned to each, so the header shows at a glance which one your next commit will carry.
- Search & command palette — commit/content search, a
Ctrl/Cmd-K command palette, and filtering for the sidebar lists. - Pull requests — connect one or more GitHub, GitLab, Bitbucket or Azure DevOps accounts with a personal access token to list, read, open, merge, and close/decline PRs, with PR and CI badges in a dedicated forge column beside the graph and a per-branch "Checks" tab. A PR's changed files and per-file diffs are computed locally from base…head, so line counts are correct on every forge. Real-token verified on GitHub and Azure DevOps — see the status note above.
- Auto-update — checks a signed release manifest and updates in place (opt-in).
- AI features (optional, local) — everything AI runs through the Claude Code CLI installed on your own machine, under your own subscription; nothing goes to Bonsai servers. Merge-conflict resolution with a live streaming log, cancel, mid-run questions and a "resolve all conflicts" option; commit messages and a WIP→commits composer; explain-commit and blame-why; semantic history search; changelog and PR-description drafting. AI is off until you enable it and accept the consent dialog, which spells out what is sent.
- AI-ready for other tools — an embedded MCP server exposes structured Git data (graph, diffs, conflicts) to AI tools, plus an optional "what changed" digest.
Prebuilt installers are attached to each GitHub Release.
Note — v1 builds are unsigned. Bonsai does not yet use OS code signing, so the first launch shows a publisher warning. This is expected; here's how to proceed:
- Windows — the SmartScreen dialog says "Windows protected your PC". Click More info → Run anyway.
- macOS — Gatekeeper may block the first launch. Right-click the app → Open, then confirm; or allow it under System Settings → Privacy & Security → Open Anyway.
- Linux — for the
.AppImage, make it executable (chmod +x Bonsai_*.AppImage) and run it; or install the.deb.
OS code signing (Authenticode / Apple notarization) is planned for a later release — see docs/code-signing.md.
Prerequisites (all platforms):
- Rust 1.97 — the channel is pinned by
rust-toolchain.toml, so rustup installs the right toolchain (plusclippyandrustfmt) on first build. - Node 22+ and pnpm — the repo pins pnpm
11.17.0viapackageManager, which itself requires Node >= 22.13. CI builds on Node 22. - The Tauri CLI — installed by
pnpm install; no global install needed.
Plus a per-OS toolchain for building libgit2 and the native webview:
-
Windows — MSVC build tools (the "Desktop development with C++" workload); WebView2 (bundled on Windows 11, otherwise install the Evergreen runtime).
-
macOS — Xcode Command Line Tools (
xcode-select --install); the system WebKit is used, so there is nothing else to install. -
Linux — a C toolchain plus the GTK/WebKit development packages. On Debian/Ubuntu, these are exactly what CI installs:
sudo apt-get update && sudo apt-get install -y build-essential \ libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-devNote webkit2gtk 4.1 specifically — Tauri v2 links against 4.1, and the older
4.0packages will not satisfy it. Other distributions need the equivalent packages.
pnpm install
pnpm tauri dev # run the app in development
pnpm tauri build # produce a release build + installersThe first build vendors and compiles libgit2 — expect ten-plus minutes. It is not stuck.
Frontend-only development (no native window) runs against mock Git data in a plain browser:
pnpm dev:mock # Vite in mock mode; open the printed URL (port 1420)Setup, architecture rules, and the checks CI enforces are in CONTRIBUTING.md; the full test-tier reference is in TESTING.md.
- Backend — Rust, Tauri v2,
git2(libgit2),notify,serde. - Frontend — React + Vite + TypeScript, with
lucide-reactfor all chrome icons; the commit graph is drawn on<canvas>. - Package manager — pnpm.
MIT © 2026 Dan Percic



