Levelbrook Developer Tools

Branchline

The Git graph you loved, maintained again.

VS Code extension Final testing — not yet on the Marketplace levelbrook.branchline v1.0.0

Status — Branchline 1.0.0

Built, tested and packaged as a .vsix. It is not published to the VS Code Marketplace or Open VSX yet — the publisher account is the last step. There is nothing to install today.

The purchase links on this page are live, so you can buy today and activate the moment the extension is published. If you would rather wait, mail team@levelbrook.com and we will tell you when it ships.

The problem

The Git graph most VS Code developers use has 15.2 million installs and a 4.94★ rating. Its last release was April 2021. Its issue tracker carries a long-running thread of people asking who is going to take it over, and the recurring answer is “there are no nice alternatives.” Its licence blocks forking, so the slot simply stayed open. Meanwhile the other well-known option puts its commit graph behind a subscription.

Branchline is the third option: a clean-room, actively maintained commit graph where the graph and every graph action are free, forever. No account. No sign-in. No telemetry. Pro exists, but it only adds things the abandoned incumbent never gave you.

The Branchline commit graph on the git/git repository: coloured branch lanes in a
                dense gutter on the left, then commit subject, refs, author, date and short hash
                for each row, with one row selected. Dark theme.
Branchline on git/git — a repository of 85,543 commits, 1,008 tags and 282 concurrent lanes at its widest point. Rendered from the real built bundle against real repository data, not a mockup.
The same Branchline commit graph in a light VS Code theme, showing that colours
                and contrast follow the editor's own theme variables.
The same view in a light theme. Branchline draws from VS Code's own theme variables, so it matches whatever you already use.

Free forever — the whole graph

Everything in this list is free and will never move behind a paywall.

  • The commit graph — coloured branch lanes, fork and merge rendering, octopus merges, tags, stashes, remote branches, a HEAD indicator, and an uncommitted-changes row at the top.
  • Filter and search — scope to any branch, remote branch or tag, restrict history to a path, and search subject, body, author, email and hash.
  • Full commit details — author and committer with dates, parents, the complete message, and the changed-file tree with real +/- line counts. Click any file to open VS Code's own diff editor.
  • Compare any two commits, branches or tags.
  • Every action, from the graph — checkout, create / rename / delete branch, merge, rebase, cherry-pick, revert, reset (soft / mixed / hard), tag, push tag, stash push / apply / pop / drop, fetch, pull, push, copy hash.
  • Destructive actions ask first. reset --hard, branch deletion, stash drop and rebase all show an explicit modal saying what you are about to lose — and the confirmation is re-checked in the extension host rather than trusted from the webview.
  • Multi-root workspaces and submodules in one repository picker.
  • Correct in a broken state — detached HEAD, a conflicted merge, an interrupted rebase, a cherry-pick or revert in progress are all detected and shown with Continue and Abort.
  • No telemetry. None.

Performance is the point

Measured on git/git — 85,543 commits, 1,008 tags, 282 concurrent lanes at the widest point — on an Apple M2, by the benchmark scripts committed in the repository. Run them yourself with npm run bench.

Measured on git/git, 85,543 commits, Apple M2
MeasurementResult
Time until the first commits are parsed, laid out and ready to paint57 ms
Time to walk and lay out all 85,543 commits1.56 s
Sustained parse + layout throughput~55,000 commits/sec
Webview: first rows in the DOM after the first message17 ms
Webview: ingest all 85,543 rows in 2,000-row messages651 ms
Row elements in the DOM while scrolling all 85,543 commits30
Dropped frames during a 5-second continuous scroll0 of 299 (worst frame 18.7 ms)

How it gets there:

  1. git log is streamed, never buffered. Commits are parsed out of the pipe as chunks arrive. The first batch is deliberately small — 250 rows, more than fills a screen — so you are reading your history while git is still walking it.
  2. -z, NUL-delimited, everywhere. Git forbids NUL in hashes, names, refs and messages, so there is no separator to escape and no author called A, B that can corrupt a row.
  3. Virtualised rows. Only the ~30 rows on screen exist in the DOM. Scrolling 85,000 commits costs exactly as much as scrolling 100.
  4. Canvas for the lanes, DOM for the text. One canvas paints only the visible band in a single pass; the commit text stays real DOM so it remains selectable, themable and reachable by a screen reader.
  5. Compact graph geometry. Lane segments are flat [from, to, colour] numeric triples rather than objects — on git/git that is the difference between 710 MB and 443 MB in the extension host.
  6. A commit-graph cache, written once. On a repository with more than 10,000 commits and no commit-graph file, Branchline writes one in the background after the first paint — the same additive cache git gc creates. It only ever adds a file under .git/objects/info; it never changes history, and branchline.writeCommitGraph turns it off.

Branchline Pro

Pro adds capability. It never takes anything away.

The Branchline interactive rebase editor: a list of commits with per-row actions
                including a fixup indented under its target and a dropped commit struck through,
                beside a live preview panel showing the resulting history.
The interactive rebase editor mid-edit — a fixup indented under its target, a drop struck through, and the live “resulting history” panel. Nothing runs until you press Start.

Interactive rebase editor

Git's interactive rebase is a text file you hand-edit in a terminal. Branchline gives it a UI: drag rows to reorder; pick / reword / edit / squash / fixup / drop from a dropdown; and a live preview of the resulting history beside the plan. It never opens $EDITOR — reword runs as pick plus an exec git commit --amend -F, so a message change never drops you into vim by surprise.

Branch hygiene dashboard

Every local branch with its divergence from the default branch, its age, whether it is already merged and whether its upstream has been deleted — with bulk cleanup that refuses to offer you the branch you are standing on, or anything unmerged.

Worktree management

List, add and remove git worktrees without leaving the graph.

File history, with renames followed

The full evolution of a file across renames, reachable from the commit detail pane.

Not in 1.0, and not charged for as if it were

Per-line blame and the git log -L “who touched this function” view are implemented and tested in the engine but have no button in the UI yet. They are not part of what 1.0 delivers, and this page will say so until they ship. The rebase editor also takes its base revision from a text prompt rather than a picker, and it has no conflict-resolution UI — if a rebase pauses on a conflict, Branchline says so and hands the repository back with Continue and Abort in the header.

Free

$0 · permanent

Not a trial. Not a countdown. The free tier listed above never moves behind a paywall — that is the whole point of the pledge.

Read the pledge

Pro — monthly

$5 / month

  • The same Pro feature set
  • Cancel at any time from the Stripe receipt
Subscribe — $5/month

A 14-day trial starts the first time you use a Pro feature. No account, no email address, no card and no request to any server. Payment is handled by Stripe; we never see your card details. Your entitlement is an Ed25519-signed token that is verified offline, so Pro keeps working when you do not have a network.

Already bought it and lost the key? Recover your licence key.

Clean room, and honest about the tests

No source, assets, icons, strings or naming were taken from any other extension. The graph engine, the git parsing, the renderer and the icon are all original. The product was informed only by the incumbent's publicly observable behaviour.

65 tests pass, of which 23 are integration tests that build real temporary git repositories with the git CLI and assert the resulting history after real rebases. What has not happened: the extension has never been installed into a running VS Code, because VS Code is not installed on the machine it was built on. A bundle-level harness loads the real built bundle, activates it and inspects the generated webview HTML, which is as close as that gets without an editor. It is named here rather than left for you to find.