// the find
gitbutlerapp/gitbutler
The GitButler version control client, backed by Git, powered by Tauri/Rust/Svelte
GitButler is a desktop Git client built with Tauri/Rust/Svelte that reimagines branch management with stacked and parallel branches, drag-and-drop commit manipulation, and an undo timeline. It's aimed at developers who find git rebase -i painful and want a visual layer over Git without abandoning Git compatibility. The CLI ('but') shares the same Rust backend as the GUI.
- The parallel branches concept is genuinely novel: working on multiple branches simultaneously without switching, with changes tracked per-branch in the worktree. This solves a real daily annoyance.
- Undo timeline (snapshots of all operations) is implemented at the engine level in Rust, not as a UI afterthought — meaningful protection against destructive rebase/amend operations.
- The Rust backend is shared between GUI and CLI, so the CLI isn't a thin wrapper calling shell git commands — it uses the same core engine, which means behavior consistency.
- Active development cadence: pushed within the last day of review, well-structured CI with E2E tests, OSV vulnerability scanning, and clear CODEOWNERS separation between frontend/backend.
- Fair Source license (not MIT/Apache) is a real adoption blocker for teams with legal review requirements — the non-compete clause, even with a 2-year expiry, will stop corporate contributors and some OSS integrations cold.
- The 'virtual branches' mental model is a significant conceptual departure from standard Git; onboarding is non-trivial and the docs are still catching up with the pace of feature additions.
- Heavy Claude/AI integration baked into the UI (there's a whole codegen component tree with IRC-style chat) suggests product direction is diverging toward AI-assistant features that may not be what people come here for, adding surface area and potential instability.
- Tauri/Svelte stack means you're debugging across three languages (Rust, TypeScript, Svelte) with IPC boundaries in between — when something goes wrong in the diff view or branch operations, the error context can be genuinely difficult to trace.