A fast, multi-repository Git desktop client built with Tauri 2, React 19, and Rust.
Features • Screenshots • Installation • Development • Tech Stack
l8git is a desktop Git client that manages multiple repositories simultaneously in a single, focused interface. Built for developers who juggle several projects, it combines Git operations, pull request management, CI monitoring, and more — all without leaving a fast, native desktop app.
Instead of switching between windows or terminals, l8git puts every repository on a tabbed workspace with instant access to commits, branches, stashes, diffs, remotes, submodules, worktrees, hooks, and CI pipelines.
- Tabbed interface — add any number of local repositories and switch freely
- Parallel operations — fetch, pull, or push on all repos at once
- File system watcher — automatic refresh when files change on disk
- Persistent state — reopens your exact workspace layout on launch
- Status — full file-level status (staged, unstaged, untracked) with inline diff counts
- Staging — stage/unstage individual files, hunks, or discard changes
- Commit — write commit messages, amend commits, or generate AI-powered commit messages via OpenRouter
- Branching — create, checkout, delete local and remote branches
- Merging — merge with strategies (fast-forward,
--ff-only,--no-ff, squash) and conflict resolution - Rebase — interactive rebase via git bisect integration
- Cherry-pick — pick individual commits, continue/skip/abort on conflicts
- Revert — revert commits with merge mainline parent selection
- Reset — soft/mixed/hard reset to any ref
- Stash — push, pop, apply, drop, show, and branch from stashes
- Tags — create, delete, and delete remote tags
- Remotes — list, add, update, and remove remote URLs
- GitHub — list, view, create, comment, review, merge PRs; view check runs and legacy commit statuses
- Bitbucket — list, view, create, comment, merge PRs; view commit statuses
- GitHub Enterprise — compatible with self-hosted GHE instances
- Auto-merge — enable/disable auto-merge on GitHub PRs
- PR checkout — checkout PR branches directly from the UI
- Avatar resolution — commit author avatars via GitHub/Bitbucket APIs
- Web URL — quickly open a PR comparison page in your browser
- GitHub Actions — list workflow runs, view jobs and steps, rerun and cancel workflows
- Bitbucket Pipelines — view commit and PR pipeline statuses
- Check annotations — view inline check run annotations with output logs
- Workflow file editor — read, edit, and save
.github/workflows/*YAML files directly
- Three-way merge editor — view base, ours, and theirs for conflicted files
- Inline conflict editing — edit merged content and mark as resolved
- Stage resolved files — automatically stages files after resolution
- Merge/cherry-pick state inspection — view in-progress conflicts with path lists
- Commit history — virtualized infinite-scroll log with date-ordered commits
- Search commits — search by hash, author, email, subject, body, or changed paths
- Blame annotations — inline git blame with author, date, and commit hash
- Language statistics — per-repo breakdown of programming languages
- File explorer — browse repository files, view file contents at any commit
- Diffs — staged, unstaged, and commit-to-commit diffs with syntax highlighting
- Submodules — list, init, update, sync, add, and deinit submodules; view submodule commit references
- Worktrees — add, remove, lock, unlock, prune, and move git worktrees
- Git hooks — list, view, edit, create, delete, and toggle hook executability
- Bisect — start, mark (good/bad/skip), and reset bisect sessions
- Git LFS — handles binary file detection and diff reporting
- Embedded terminal — xterm.js-based terminal for each repository
- Resizable — supports interactive shell commands, resize, and repaint
- AI commit messages — generate meaningful commit messages using AI via OpenRouter
- Themes — light, dark, and system theme with smooth transitions
- Animations — configurable UI animation preferences
- Internationalization — i18n support with locale switching
- Keyboard shortcuts — hotkey system via TanStack Hotkeys
- Auto-updater — Tauri updater with automatic update checks
- Git credentials — store and manage HTTPS credentials for GitHub, GitHub Enterprise, Bitbucket, and GitLab
Coming soon.
Download the latest .dmg from the releases page.
Download the latest .msi installer from the releases page.
Download the .deb or .AppImage from the releases page.
Note: You need
gitinstalled and available in yourPATH.
- Bun — package manager and runtime (install)
- Rust with
rustup— Tauri backend (install) - macOS: Xcode Command Line Tools (
xcode-select --install) - Windows: Microsoft C++ Build Tools (WebView2 ships with Windows)
- Linux: WebKitGTK and development packages — see Tauri prerequisites
# Clone the repository
git clone https://github.com/Leon-Achteresch/l8git.git
cd l8git
# Install dependencies
bun install
# Start the development desktop app
bun run tauri devbun run devOpens at http://localhost:1420 — Tauri APIs are unavailable in the browser.
# Frontend only (typecheck + Vite production build)
bun run build
# Desktop installer/app bundle
bun run tauri buildbun run tauri:iconReads from public/icons/ios/AppIcon~ios-marketing.png.
| Path | Contents |
|---|---|
src/ |
React UI — TanStack Router routes, Zustand stores, UI components (shadcn/ui + Radix + Motion), i18n locales |
src-tauri/src/ |
Rust backend — Git operations (git.rs), PR/CI provider APIs (pr.rs, providers.rs), credentials (credentials.rs), terminal (terminal.rs), file watcher (watcher.rs), shell helpers (shell.rs) |
public/ |
Static assets and app icons |
.github/workflows/ |
CI/CD release pipeline configuration |
TypeScript paths: @/* maps to ./src/* (see tsconfig.json).
| Layer | Technology |
|---|---|
| UI Framework | React 19 with TypeScript |
| Build Tool | Vite 7 + @vitejs/plugin-react |
| Styling | Tailwind CSS 4 + tw-animate-css |
| UI Components | shadcn/ui, Radix UI, Base UI, Motion, Vaul, Sonner, Embla Carousel |
| Routing | TanStack Router v1 |
| State Management | Zustand v5 |
| Icons | Lucide React |
| Rich Text | Monaco Editor, React Markdown + remark-gfm |
| Charts | Recharts |
| Date Handling | date-fns |
| Internationalization | i18next + react-i18next |
| Code Editor | Monaco Editor via vite-plugin-monaco-editor |
| Desktop Runtime | Tauri 2 (Rust backend) |
| Terminal | xterm.js with fit and web-links addons |
| Git Integration | Rust std::process::Command — shell-based git execution |
| HTTP Client | reqwest (Rust) — GitHub, Bitbucket, GitLab API access |
| File Watching | notify + notify-debouncer-full (Rust) |
| PTY | portable-pty (Rust) — terminal emulation |
| AI | OpenRouter SDK — AI commit message generation |
l8git follows a two-process architecture:
-
Rust backend (
src-tauri/) — handles all Git operations via shell commands, manages HTTP requests to GitHub/Bitbucket/GitLab APIs, watches filesystem changes, manages credentials, and runs an embedded terminal via portable-pty. Tauri commands expose every operation to the frontend through a typed IPC bridge. -
React frontend (
src/) — renders the UI using TanStack Router for client-side routing and Zustand for state management. The UI is organized into panels (commit, stash, PR, submodules, worktrees, hooks, CI) that swap based on the active sidebar tab. File diffs and commit history use virtualized rendering for performance with large repositories.
Git operations run on a blocking thread pool via tokio::task::spawn_blocking and are fully asynchronous from the UI perspective.
Contributions are welcome! Please open an issue or pull request on GitHub.
Built with ❤️ by Leon Achteresch