Git Graph, rebuilt for how you work today: feature branches, stacked PRs, worktrees and Claude Code. For VS Code and Cursor.
Compare · Review · Worktrees · Stacks & PRs · Cleanup · Claude Code
↑ahead ↓behind, always on top, and they're filters. One click shows just your branch's commits. Commits that landed through "Rebase and merge" or a cherry-pick count as merged, not as bogus ↑↓.
Every commit, readable. Message, author, the branches on it, a copyable hash, its parents one click away.
Inline diffs, in your editor's colors. Every change on one page, like a pull request, highlighted with your own theme and grammars, or one file at a time next to the file list. Diff shows the whole branch since the fork, uncommitted work included, and diffs open on your real files, so Go to Definition just works.
One chip per worktree: its branch, ↑↓ vs main, its uncommitted files on hover, its own row in the graph. Create one from any branch with +, open it or a terminal in it, or bring its branch back to the main folder.
See a stack as one thing. Right-click a branch → Graph Filter: it with main, with the branches built on it, or its whole stack.
Pull requests where you look. State, reviewers and their verdicts, open conversations and checks on
every branch and graph badge, through your gh CLI (any of its accounts) or the editor's GitHub account.
Every branch shows its owner.
A row of pull requests. Filter it to yours, those waiting for your review, drafts, merged or closed ones, those whose branch you have, or those waiting on their author; the one of the branch you're on comes first, and its + opens a new one. Review a pull request in the details panel, like a commit: its files as a list, a tree or inline diffs, with its reviews, checks and fork point. Its branch doesn't have to be on your machine: Treeline fetches what GitHub has, without making a branch.
Filter to merged, gone or stale branches, then delete them all with one confirmation that says what would be lost. Rebased, cherry-picked and squash-merged branches count as merged.
Sessions per branch and worktree. The Claude Code sessions that worked on a branch show on its card; its menu resumes them, in the desktop app or a terminal.
Summarize any diff. Four lines on what a commit, or your uncommitted work, does. Claude sees only the diff: no project files, settings or tools.
Commit messages in your repository's style, from ✨ in the Source Control title bar.
Infinite history · author and branch filters · find · compare any two commits · resizable columns · checkout, merge, rebase, cherry-pick, revert, reset, tag, push, pull, stash. Treeline asks only when something would be lost, and every button explains itself on hover.
Search Treeline in the Extensions view of VS Code, Cursor, VSCodium or Windsurf. It's on the
VS Code Marketplace and on
Open VSX, and every release also attaches the .vsix
to GitHub Releases.
Then run Treeline: View Git Graph, or click Git Graph in the status bar. The Claude features need
Claude Code (claude on your PATH); commit messages fall back to any
model your editor provides. Without it they stay hidden; to hide them anyway, turn off
Treeline › Claude: Enabled (treeline.claude.enabled).
pnpm install
pnpm dev # watch the extension and the webview; press F5 in VS Code to launch it
pnpm test # git layer against real temporary repos + graph layout
pnpm e2e # the extension inside a real VS Code (actions, diffs, worktrees, commit messages)
pnpm --filter @treeline/webview dev:browser # the UI in a browser with a mocked hostThe architecture, conventions and roadmap live in AGENTS.md, written for humans and coding agents alike.
Inspired by Git Graph by Michael Hutchison (unmaintained since 2021). Treeline is an independent, from-scratch reimplementation and shares no code with it.
MIT © Emanuele Pavanello










