Lanefold
Lanefold is a Git client for VS Code built around the commit graph. You browse history, run
operations, edit commits and review changes from the graph. Before an operation runs, Lanefold
shows the git commands it will use, and every change it makes to the repository can be undone.

Features
History
- A commit graph that streams history from git and stays responsive with millions of commits.
- Views as tabs: all branches, the current branch, local branches or a single ref; file, folder
and line history; comparisons between two refs; stashes, the reflog and statistics.
- Details for one commit, two commits or a selection, with changed files that open in VS Code's
diff editor.
- Search by text, author (
@name), hash (#1a2b3c), path (file:), message (message:) and
date (after:, before:). Matches are highlighted, or the graph is filtered down to them.
- Blame annotations with an age heat bar, and history for a file or a range of lines.
- The history of every open repository in one graph.
Operations
- Checkout, branches, tags, reset, revert, cherry-pick, merge and rebase, from menus or by
dragging commits and branches in the graph.
- A review before each operation: the git commands with an explanation of every flag, the refs
that move, commits that would be left behind, and conflicts predicted with
git merge-tree
without touching the working tree.
- Undo and Redo for every operation that changes the repository, rebases included. Uncommitted
work that an operation could lose is saved first and restored exactly.
- Uncommitted changes that are in the way of a checkout, revert or cherry-pick can be carried
over.
- Conflicts name both sides by branch, open in VS Code's merge editor, and are continued, skipped
or aborted from a banner.
History editing
- An interactive rebase editor in the graph: reorder, squash, fix up, reword, drop, stop to edit
and split commits, with the keyboard or by drag and drop.
- A dry run of each arrangement that predicts conflicts and empty commits before anything runs.
- Amend any recent commit with the staged changes by dragging them onto it.
- Split a commit by committing its changes in parts.
Changes and commits
- Stage and unstage files, hunks or single lines in the details pane.
- Commit, amend and sign off from the commit form; drafts are kept per repository.
- Discard files, hunks or lines, with Undo.
- Save, apply, pop and drop stashes.
Branches and remotes
- A branches pane with folders, remotes, tags, favorites and ahead/behind counts.
- Fetch, pull and push, with results in plain words. Force pushes always use
--force-with-lease.
- Add, edit and remove remotes. Credential prompts appear as VS Code input boxes.
More
- Statistics for a branch or the whole repository: activity over time, a weekday by hour punch
card, contributors, the most changed files and folders, languages and line counts.
- Worktrees, submodules, visual bisect, patches, reflog recovery, clone and init.
- The Git Console lists every git command Lanefold runs, with its output and timing.
Lanefold follows the VS Code theme, including high contrast, and works entirely from the
keyboard.
Getting started
Lanefold needs VS Code 1.100 or later and git 2.30 or later. Conflict prediction needs git 2.40
or later.
Open it with Ctrl+Alt+G (Cmd+Alt+G
on macOS) or run Lanefold: Open from the Command Palette.
Keyboard
| Where |
Keys |
| Graph |
↑ ↓ select, ← → go to a child or the parent, Enter open the changes, Shift+F10 menu, F2 reword |
| Graph |
Ctrl+F or / search, F3 next match, Ctrl+C copy hashes, Ctrl+Z undo, Ctrl+Shift+Z redo |
| History editor |
P pick, R reword, E edit, I split, S squash, F fixup, D drop, Alt+↑ ↓ move, Ctrl+Enter apply |
| Tabs |
Alt+← → move, F2 rename, Delete close |
| Blame |
Ctrl+Alt+[ annotate the previous revision, Ctrl+Alt+, back, Ctrl+Alt+. forward |
Shift+click selects a range of commits and Ctrl+click adds one. In the history
editor, dropping a commit onto another squashes it (Alt for fixup).
Settings
| Setting |
Default |
What it does |
lanefold.confirm |
destructive |
When to review an operation first: always, destructive or never. |
lanefold.graph.style |
curved |
Curved or angular lanes. |
lanefold.graph.density |
comfortable |
Row height: compact, comfortable or spacious. |
lanefold.graph.colors |
none |
Your own lane colors (CSS colors) instead of the theme's palette. |
lanefold.log.order |
topo |
Commit order of new views: topo keeps each branch together, date sorts by date. |
lanefold.dateFormat |
relative |
Relative or absolute dates in the graph. |
lanefold.views.defaultTabs |
All, HEAD |
The tabs a repository opens with the first time (HEAD shows the current branch). |
lanefold.animations |
full |
full, reduced or off. The system's reduced motion setting always applies. |
lanefold.avatars.gravatar |
off |
Load author avatars from Gravatar instead of showing initials. |
lanefold.blame.ignoreWhitespace |
off |
Blame with -w: whitespace-only changes do not count. |
lanefold.blame.detectMoves |
off |
Blame with -M: lines moved within a file keep their original author. |
lanefold.git.path |
none |
The git executable. By default, the one VS Code's Git extension uses, then PATH. |
Development
Requirements: Node.js 22 or later and git 2.30 or later.
npm install
npm run build # the extension (esbuild) and the webview (Vite)
npm run typecheck
npm run lint
npm test # unit tests and tests against real git repositories
Press F5 in VS Code ("Run Lanefold") to start an Extension Development Host. After
npm run demo-repo -- out/demo, "Run Lanefold (demo repository)" opens a sample repository with
branches, merges, tags and a remote.
Browser harness
The webview also runs in a browser, connected to the real backend over a WebSocket:
npm run demo-repo -- out/demo
npm run build:webview
npm run harness -- --repo out/demo/aurora
# open http://127.0.0.1:5177/?theme=light-modern
Repeat --repo (or &repo= in the URL) to open several repositories at once. The themes
(dark-modern, light-modern, dark-hc, light-hc) are snapshots of the variables VS Code
gives webviews, captured by the integration tests with LANEFOLD_CAPTURE_THEMES=dev/harness/themes.
Tests
| Command |
What it covers |
npm run test:unit |
Parsers, RPC, graph layout, planners and view logic |
npm run test:git |
Core services against throwaway repositories built from fixtures |
npm run test:e2e |
Playwright against the harness, including an accessibility audit of every view in four themes |
npm run test:perf |
Performance budgets: a long history, very many refs, huge commits and working trees |
npm run test:vscode |
The extension in a real VS Code (on Linux, run it with xvfb-run -a) |
npm run package builds the VSIX, and npm run logo renders the PNG sizes of the logo from
media/logo/lanefold.svg.
Architecture
src/shared environment-independent code: protocol, models, RPC, graph topology and layout
src/core Node only: git runner, repository model, operations and their journal, backend
src/extension VS Code integration: activation, webview hosts, watchers, blame
src/webview React app: graph, tabs and views, review sheet, history editor
dev/harness browser harness server and VS Code theme snapshots
dev/perf synthetic repositories for the performance budgets
ESLint enforces the module boundaries: src/shared imports neither Node nor VS Code, and the
webview reaches the extension only through the typed RPC.
License
MIT
| |