GutteredGuttered shows your branch's changes since its merge base with the repository's default branch, directly in the normal VS Code editor. Committed changes stay visible alongside staged, unstaged, and unsaved edits. New and untracked files that Git isn't ignoring are included.
Committed branch changes and an unsaved edit, with the changed-files tree in Source Control. Compare from where your branches divergedA merge base is a common ancestor that Git selects for your branch and the comparison reference. Guttered detects the repository's default branch automatically and uses its merge base with
In this example, the default branch is Committing your work keeps its branch markers visible. If VS Code's native Git markers show local changes relative to InstallYou need desktop VS Code, Git 2.30 or newer, and a trusted workspace. Guttered uses the Git executable found by VS Code's built-in Git extension. If that extension is disabled, it tries The extension supports VS Code 1.95 and newer. Install Guttered from the Visual Studio Marketplace, or search for If you installed an earlier GitHub VSIX, uninstall that copy before installing the Marketplace version. The publisher ID changed from To build the extension from this repository, use Node.js 22 or newer:
Use GutteredAdded lines have soft green bars, modified lines have soft yellow bars, and deleted lines have soft red triangles on the neighboring line. Markers use 30% opacity by default, keeping native Git indicators more prominent on both dark and light themes. Markers sit in an 8 px inset before the text, leaving breakpoint clicks, line numbers, folding controls, and native Git markers available. Unchanged lines use the same inset to keep the code aligned. The overview ruler also shows the changes; text backgrounds stay unchanged. The status bar shows the selected reference, such as Hover over a branch-change marker to preview the removed and added lines. Click Open Diff with Merge Base in the hover to open VS Code's diff view at that change, including unsaved edits. Large previews are shortened; the diff view shows the full comparison.
The preview compares the original threshold of 100 with the unsaved value of 60 and shows the removed handling-fee line. Marker previews stay separate from code documentation. They require visible inlay hints and Editor: Inlay Hints: Padding turned off (VS Code's defaults). If hints are hidden or padded, the markers and Guttered: Open Diff with Merge Base command still work. Guttered: Toggle On/Off disables or enables Guttered across the current workspace. Turning it off removes markers and previews, clears the changed-files view, and stops comparison updates. The choice is remembered for that workspace; enabling Guttered again preserves your per-folder settings and unsaved edits. The Guttered: Branch Changes section in Source Control lists changed files from the active file's repository, grouped under their parent folders. It uses the selected reference's merge base and includes committed, staged, unstaged, untracked, and unsaved changes. With no file selected, it uses the first workspace folder. Files use your file icon theme, with A (green), M (blue), and D (red) badges for added, modified, and deleted files. Badge colors follow your theme's Git gutter colors. Click a file to compare its read-only merge-base version on the left with the working file, including unsaved edits, on the right. Added files have an empty left side; deleted files have an empty right side. Baseline loading keeps the existing text and size limits. Renames appear as a deletion and an addition, matching the gutter's path-based comparison. The tree updates automatically while visible. It lists saved file changes through Git and applies open, unsaved buffers on top, so restoring a buffer to the baseline removes that file from the list. Binary and large files can appear in the tree even when their gutter comparison is unavailable. The view's toolbar offers toggle, reference selection, and refresh. The Source Control icon keeps VS Code's normal count of local changes. A hunk is a group of adjacent changed lines. The available actions are:
All actions appear in the Command Palette and status bar menu. The Guttered editor context menu contains diff, navigation, and restore. You can assign shortcuts in VS Code's Keyboard Shortcuts editor; Guttered doesn't install default bindings. Base-reference overrides apply to the current workspace folder, so repositories nested in that folder share the override. For a file outside every workspace folder, the command updates user settings and affects all workspaces. The picker states which scope it will change. It lists branches already available locally; it does not fetch. How comparison worksGuttered identifies the repository containing each visible file. It reads The baseline is Typing updates the indicators after a 250 ms pause by default. Git events and a three-second poll handle branch switches, rebases, merges, resets, fetches, changes to ignore rules, and new nested repositories. Polling pauses while the VS Code window is in the background and resumes when it gains focus. Only visible documents receive line comparisons; the changed-files tree also includes unsaved buffers from other open documents. Cached baselines, diffs, and saved-file lists avoid repeated work while typing. A hidden tree does not scan the repository. Guttered's Git operations are read-only. It never fetches, changes refs, stages files, or changes Git configuration. SettingsAll settings support workspace-folder overrides.
Troubleshooting and limitsWhen a comparison is unavailable, hover over the status item or open Output → Guttered for the reason. A repository needs an existing commit and a locally available base reference with shared history. Repositories without a remote need an explicit Base Reference setting. A missing branch may need fetching, and shallow or unrelated history may need more history or another base. If default-branch detection cannot reach the remote, restore network or authentication access and run Guttered: Refresh Comparison. You can also set Base Reference to a locally available branch and compare offline. To record the remote's default branch in Git, run VS Code's native Git bars compare against HEAD and the index, so they can appear alongside Guttered's branch comparison with different markers. Use
DevelopmentDesktop tests have passed on VS Code 1.95.3 and 1.141.0, including a separate run with built-in Git disabled. After
Desktop tests require a graphical session that can focus the test window. Headless Linux needs Xvfb and a window manager. Set The source files follow the work the extension performs: Transparent PNGs are available at 1254×1254 ( PublishingOn the machine that will publish releases, authenticate once with the Microsoft account that owns the publisher. Create an Azure DevOps personal access token with Organization: All accessible organizations and Custom defined → Show all scopes → Marketplace → Manage. Follow the VS Code publishing guide.
Paste the token into the masked login prompt. VSCE saves the credential outside this repository. Microsoft retires global personal access tokens on December 1, 2026; after that, use the guide's Microsoft Entra authentication workflow and pass For a new release, choose its version, update the changelog, run the tests, and commit the release changes before publishing. For example, to prepare the next patch version:
The publish command checks TypeScript, builds the extension, and uploads it to the Marketplace. Every release needs a version that has not already been published. |


