v0.5.0Stacked PR chains, agent review, LFS

Every repository.
Every agent. One window.

l8git is a native desktop Git client for developers who juggle a dozen repositories. Interactive rebase, stacked pull requests, CI, conflict resolution and four coding agents in isolated worktrees — without opening a browser, and without an Electron runtime.

macOS · Windows · Linux — free and open source under the MIT license. No account, no telemetry by default.

Mmy-appfeat/auth1
Aapi-servermain
Ddesign-systemmain
Mmobile-appfix/crash2

Changes

5 files
All files
Staged3
oauth.tsauth+8212
pkce.tsauth+56
token.tsauth+344
Unstaged2
README.md+51
.env.example+2
auth/oauth.tsStaged
@@ -14,7 +14,12 @@ export async function exchangeCode(code) {
1414 const verifier = await getStoredVerifier()
15 const res = await fetch(TOKEN_URL, { method: "POST" })
15+ const res = await fetch(TOKEN_URL, {
16+ method: "POST",
17+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
18+ body: new URLSearchParams({ code, code_verifier: verifier }),
19+ })
1620 const tokens = await res.json()
21+ scheduleRefresh(tokens.expires_in)
1722 return tokens
3 files stagedAmend

feat(auth): add OAuth2 flow with PKCE

Implement authorization code flow with PKCE for secure token exchange and add refresh token rotation on expiry.

EN
Interactive rebase, stacks, reflogAgents in isolated worktreesAI that suggests, never decidesNative Tauri + Rust, no Electron

Pull requests, reviews and CI on

GitHubGitLabBitbucketGiteaForgejoCodeberg

Cloud, Enterprise and self-hosted. Capabilities are detected per host.

AI, on your terms

OpenAIAnthropicGoogleOllamaOpenRouterAny OpenAI-compatible endpoint

Or none at all — every AI feature is opt-in, and Ollama keeps it on your machine.

A Git client, not a subscription

Everything is in the box on day one. The roadmap commits to it staying that way — no paywall, no fair-source clause, no proprietary components.

100%

Open source

MIT, no paywall, no fair-source clause

4

Git forges

GitHub, GitLab, Bitbucket, Gitea/Forgejo

6

AI providers

including Ollama, fully local

4

Agent CLIs

each in its own git worktree

7

Languages

EN, DE, ES, FR, PT, ZH, JA

3

Platforms

macOS, Windows, Linux

Multi-repo workspace

You do not work on one repository

Most Git clients are built as if you did. l8git assumes a service, its client, a design system and three side projects — all open, all watched, all one keystroke away.

Tabs, not windows

Add as many local repositories as you like. Switching costs nothing and nothing loses its state.

One action, every repo

Fetch, pull or push across the whole workspace at once, with progress and a cancel button.

Watched on disk

The UI refreshes itself when files change — and skips node_modules, target and build output.

Nothing gets lost

A cross-repo inbox plus native notifications for red CI, review requests and finished agents.

Workspacepush all
my-appfeat/auth1
api-servermain3
design-systemmain
mobile-appfix/crash2
docsmain
5 repositories, one action — running in parallel
Inbox4 repos

CI failed on main

api-server

2m

Review requested · #204

design-system

18m

Codex finished · awaiting review

my-app

31m

#88 merged by teammate

mobile-app

1h

Twenty-two panels, one sidebar — reorderable, hideable, all reachable from ⌘1…⌘8

CommitHistoryPull RequestsCI / ChecksInboxAgentsStashSubmodulesWorktreesHooksTerminalBlameReflogCommand logBisectTagsStacksLFSMedia diffCredentialsHotkeysPalette
CommitHistoryPull RequestsCI / ChecksInboxAgentsStashSubmodulesWorktreesHooksTerminalBlameReflogCommand logBisectTagsStacksLFSMedia diffCredentialsHotkeysPalette
CommitHistoryPull RequestsCI / ChecksInboxAgentsStashSubmodulesWorktreesHooksTerminalBlameReflogCommand logBisectTagsStacksLFSMedia diffCredentialsHotkeysPalette
CommitHistoryPull RequestsCI / ChecksInboxAgentsStashSubmodulesWorktreesHooksTerminalBlameReflogCommand logBisectTagsStacksLFSMedia diffCredentialsHotkeysPalette

Everything in the box

Ten areas, no upsell between them

Pick a corner of the app. Every item below ships today, in the free and open-source build.

Every repository in one window

Add as many local repositories as you want. l8git keeps them all in a tabbed workspace, watches them on disk, and reopens the exact layout you left behind.

  • Tabbed multi-repo interface

    Add any number of local repositories and switch between them without losing state.

  • Parallel operations

    Fetch, pull or push across every repository at once instead of one by one.

  • File system watcher

    The UI refreshes itself the moment files change on disk — no manual reload, and build directories are ignored.

  • Persistent state

    Your workspace layout, open tabs and active panel come back exactly as you left them.

  • Command palette

    Every action in the app is reachable from Mod+K without ever touching the mouse.

  • Rebindable hotkeys

    Remap every shortcut, with conflict detection and panel-scoped bindings that may safely overlap.

Workspacepush all
my-appfeat/auth1
api-servermain3
design-systemmain
mobile-appfix/crash2
docsmain
5 repositories, one action — running in parallel

Agents

Four agents working at once, and none of them can touch your checkout

Codex, Claude Code, OpenCode and Cursor run as chats inside l8git. Every session opens its own git worktree, so sessions run in parallel, your working copy stays untouched, and nothing lands until you have read it hunk by hunk.

Codex

OpenAI

Embedded as a chat, running in its own worktree.

Claude Code

Anthropic

Full session review before a single line lands.

OpenCode

Open source

Same review and finish flow as every other provider.

Cursor

Cursor

Parallel sessions across every repository you have open.

  1. Prompt

    Talk to the CLI inside the repo tab.

  2. Worktree

    The session gets its own worktree and branch.

  3. Review

    Keep or discard every hunk it produced.

  4. Finish

    Commit, merge back, clean up — one click.

An agent overview lists every thread across every repository with its live status and token cost, so a session that has been waiting on you for an hour is visible instead of forgotten.
Claude Code · worktree sessionagent/refresh-split
LA

Extract the token refresh into its own module and cover it with tests.

Created src/auth/refresh.ts, moved rotation logic, added 6 tests. All green.

src/auth/refresh.ts+1180
src/auth/oauth.ts+974
src/auth/refresh.test.ts+960
src/debug.log+410
3 of 4 files kept · 12.4k tokensCommit & merge back

AI suite

AI that suggests. You decide.

Six providers, every feature opt-in, every output a draft. l8git never applies an AI change on its own — not to a conflict, not to a commit, not to a branch.

OpenAIAnthropicGoogleOpenRouterOllamaOpenAI-compatible

Commit messages

Read from the staged diff, written in the language you configure per repository.

Commit splitting

A pile of changes grouped into logical commits — every group editable first.

PR descriptions

Drafted from the diff between the base and the compare branch.

Conflict suggestions

Proposed resolutions inside the three-way editor. Proposed — never applied.

Editable prompts

Every feature's system prompt is yours to change, with reroll and hints on any output.

Local models

Ollama is a first-class provider. No key, no network, nothing leaves the machine.

Commit messageollama · local

feat(auth): add OAuth2 flow with PKCE

Implement the authorization code flow with PKCE for secure token exchange, and rotate refresh tokens on expiry.

RerollHintENCommit
Commit splitting14 files
refactor(auth): extract token rotation3 files
test(auth): cover refresh rotation2 files
chore: drop debug logging1 files
Proposed grouping — edit any commit before it is applied
Three-way mergeauth/oauth.ts

ours

const token = await rotate(refresh)

theirs

const token = await refreshToken(session)

merged

const token = await rotate(session.refresh)

AI suggested the merged line — accept, edit or ignore

Rebase completed

6 commits replayed onto main

Undo
Git command logtransparency
git rebase --onto main feat/base feat/oauth412ms
git status --porcelain=v2 --branch18ms
git push --force-with-lease origin feat/oauth1840ms
git merge --no-ff feat/auth-ui96ms
Merge failed — undo restored the previous HEAD without --hard
Reflogrestore point
HEAD@{0}rebase (finish)feat/oauth
HEAD@{1}commit (amend)a3f19c2
HEAD@{2}reset --mixed1c9e4a8
HEAD@{3}checkoutmain → feat/oauth
Reset back to any point — keeping or discarding local changes

Safety net

A Git client you can be careless in

The reason people drop back to the terminal is that a GUI did something they could not see and could not take back. l8git makes both impossible.

Universal undo

Merge, rebase, reset, cherry-pick, revert, commit, amend — all reversible, and never with --hard.

Reflog you can click

See where HEAD has been and go back, keeping or discarding your local changes on the way.

Every command, written down

The transparency log records each git invocation with its arguments, duration and exit status.

Credentials in the keychain

HTTPS tokens live in the OS keychain, never in a plaintext config. A full security review has been completed.

AGitclientshouldnotmakeyouchoosebetweenaGUIyoucanseeandaterminalyoucantrust.l8gitshowsyoueverycommanditruns,letsyouundoeveryoperationitperforms,andkeepseveryrepository,everybranchandeveryagentinonewindow.Itisfree,itisMIT,anditstaysthatway.

Flow

Reachable without the mouse, rebindable without a config file

Every action in l8git sits behind the command palette, and every shortcut can be remapped in Settings with conflict detection built in.

reb⌘K
Rebase current branch onto…
Undo last operation
Start agent session in new worktree
Generate commit message
Toggle terminal dock
Open reflog
Terminalzsh · my-app

cargo test --package l8git

running 214 tests

test result: ok. 214 passed; 0 failed

ModKCommand paletteGlobal
Mod1Jump to sidebar panelGlobal
ModOOpen local repositoryGlobal
ModShiftRReload all repositoriesGlobal
SStage selection, hunk or fileCommit
[Previous hunkCommit
]Next hunkCommit
RInteractive rebase from selectionHistory
CCheck out selected commitHistory
YCopy commit hashHistory
NNew branchBranches
Mod/Show all shortcutsGlobal

Panel-scoped bindings may reuse the same key as long as they belong to different panels — a clash with a global shortcut is always flagged.

Comparison

What you usually pay for, or drop to the terminal for

Feature availability as of l8git 0.5.0 and the current stable release of each client. Corrections are welcome as a pull request.

l8gitGitHub DesktopSourcetreeGitKraken
Multi-repository workspaceTabs, parallel opsTabsTabs
Visual interactive rebase
Stacked branches & PR chains
Universal undo + git command logUndo only
Embedded coding agents in worktrees
Local AI models (Ollama)
Self-hosted forgesGitLab, Gitea, GHEPartialPaid tier
Embedded terminal per repo
Native runtime, no ElectronTauri + Rust
Open sourceMITMIT
PriceFreeFreeFreePaid

Architecture

Native, because a Git client is a tool, not a tab

l8git is a Rust binary with a React interface on top — not a browser wearing a window frame.

Tauri 2RustReact 19TypeScript

Rust does the work

Git runs as a real subprocess from Rust on a blocking thread pool, so a slow fetch on a monorepo never freezes the interface.

No bundled browser

Tauri uses the webview your OS already ships. The download is a fraction of an Electron client and memory stays where it belongs.

Virtualised where it counts

History and diffs render only what you can see. Commit search is debounced in the UI and paginated in the backend.

Two processes, one contract

Every backend operation is exposed through a typed IPC bridge — and logged, so you can read exactly what ran.

Desktop runtime

Tauri 2 — Rust backend, system webview

Interface

React 19 + TypeScript, Vite 7, Tailwind CSS 4

Git integration

Shell-based git execution from Rust

Routing & state

TanStack Router v1, Zustand v5

Editors

Monaco for diffs, merges and workflow YAML

Terminal

xterm.js over portable-pty

File watching

notify + notify-debouncer-full

HTTP

reqwest — GitHub, GitLab, Bitbucket, Gitea APIs

AI

Vercel AI SDK across six providers

i18n

i18next with lazily loaded locales

Performance is a CI gate, not a claim: start-up time, status refresh and graph rendering on monorepos are benchmarked every quarter.

Open source

It is open source, and that is not a footnote

Every line of the Rust backend and the React interface is readable, forkable and auditable. The transparency log inside the app is the same promise, one level down.

MIT, all of it

No paywall, no fair-source clause, no proprietary modules held back for a pro tier.

Public roadmap

Twelve months of planned work, checked off in the open — including what is still missing.

Docs in the repo

Plain Markdown next to the code: getting started, commits, stacks, PRs, agents, safety, shortcuts.

Contributor onboarding

CONTRIBUTING.md covers setup, architecture and i18n rules, with a list of good first tasks.

Seven languages

English, German, Spanish, French, Portuguese, Chinese and Japanese, switchable at runtime.

Funded by sponsors

Sustainability runs through GitHub Sponsors and Open Collective, not through locked features.

Leon-Achteresch/l8git

2 Stars1 Forks0 Open issuesMIT License
Built in the open by
GitHub User's Avatar
GitHub User@Leon-Achteresch
... contributions

FAQs

The questions people actually ask before switching Git clients.

Something missing? Open a discussion on GitHub.

Download

Free, open source, and roughly two minutes away

Grab the installer for your platform, point it at a repository, and you have a commit graph and an AI-drafted message before you have configured anything.

macOS

.dmg · Apple silicon and Intel

Download

Homebrew

brew install --cask l8git

Windows

.msi · WebView2 ships with Windows

Download

winget

winget install l8git

Linux

.deb / .AppImage · WebKitGTK required

Download

AUR

yay -S l8git

Flatpak

flatpak install l8git

Requires git on your PATH. Package manifests live under packaging/ — publication to each channel is rolling out.