PorcelainSwitch editors, not your Git workflow. A JetBrains-style Git workflow for developers moving to VS Code or Cursor. Porcelain keeps the Git habits you already know from JetBrains IDEs: a visual branch tree, compact commit graph, dedicated Commit tool window, Shelf and Stash, branch comparison, history rewriting, merge tools and conflict resolution, without forcing you to relearn your workflow after changing editors.
Branch tree, commit graph, changed files and commit details, in one panel.
Familiar workflow, new editor
HighlightsGit Log and branch management
Commit, Shelf, and Stash
Tick the files you want. Staging never enters into it: the checkboxes are the commit, and the file is committed as it is on disk. Branch comparisonCompare a local branch, remote branch, or tag with the current branch. Porcelain opens a dedicated editor tab with commits unique to each side, independent filters, changed files, and commit details. Compare VersionsSelect two commits in the Git Log, right-click, and choose Compare Versions to see everything that differs between them. The result is the net difference between the two snapshots, always read oldest to newest whichever order you selected them in, so work that was added and later reverted between them correctly shows as no change.
With two commits selected the single-commit actions grey out, because the row you happened to right-click is not an obvious target for a reset or a revert. Floating diff windowsDiffs open in their own window instead of competing with your code for editor space. Compare Versions opens a Changes window listing the files that differ; double-clicking a file opens the diff in a second window that every later diff reuses, so you never accumulate diff tabs. Pin a diff to keep it out of that cycle.
Both windows open compact, stripped back to their content. The file list stays put while the diff window is reused for every file you open. Set Context menus where you expect themRight-click branches, commits, and changed files to access checkout, cherry-pick, reset, revert, merge, rebase, diff, history, source navigation, and other repository-bound actions. Conflicts and 3-way mergeA conflicted merge is three steps, and Porcelain gives each one a surface. 1. Notice. Unmerged files appear as a Merge Conflicts group nested inside Changes, the way IntelliJ shows them, rather than a separate list that repeats the same file twice. A banner names the branch being merged and offers to continue or abort.
2. Triage. Resolve opens the conflict list in its own compact window, showing how each side touched every file. Take one side wholesale, or open the file to work through it.
3. Resolve. Double-clicking a conflicted file opens the three-way editor in its own window: your side on the left, the working result in the middle, Theirs on the right, with each conflict individually acceptable.
Each conflict can be taken individually rather than the whole file at once, the result column can be edited directly while you work, and everything stays syntax-highlighted throughout. Porcelain also integrates with the built-in VS Code Source Control view, so conflicts raised elsewhere land here too. Multi-root workspace supportPorcelain discovers one Git repository per workspace folder and exposes a shared active-repository selector in both Commit and Git Log. Nested repositories inside a single workspace folder are intentionally deferred to a later release. InstallationThe button opens Porcelain's page inside VS Code; press Install there. You can also install from the Marketplace listing or from a terminal:
VSIX
Works in VS Code and Cursor alike, and needs no account. Open VSXOnce published, search for Porcelain in the Extensions view. This is the registry Cursor reads, so it is the route that gets you search-and-install there rather than a manual download. Requirements
Local development
Press F5 to launch the Extension Development Host. The launch configurations
all pass
Everything here is also a run configuration. Open the Run and Debug view (Ctrl/Cmd+Shift+D), pick one from the dropdown at the top, and press the green play button or F5:
The same commands are VS Code tasks as well, which is what Ctrl/Cmd+Shift+B runs and where the release pipeline is expressed as task dependencies. Reach them from Terminal → Run Task…, or Tasks: Run Task in the Command Palette. ReleasingCI runs on every push to
The An existing tag can also be released by hand from the Actions tab, or with:
Versions must strictly increase and can never be reused, so a bad publish is fixed by bumping rather than replacing. Open VSXCursor reads Open VSX, and publishing there is still a local step.
Open VSX reads its token from Project lineagePorcelain is a fork of VitalHex/branchshift, which itself began as a fork of zhyc9de/jet-git. Both upstream projects are MIT licensed and retain credit for the Git graph, merge, and JetBrains-style Commit/Shelf/Stash foundations this fork builds on. Eighteen icons in the Commit tool window are used verbatim from IntelliJ Platform Icons, copyright JetBrains s.r.o. and contributors, under the Apache 2.0 license. They are unmodified. The Porcelain application icon is an original project asset. LicensePorcelain is available under the MIT License, which preserves the copyright notices of both upstream projects. Third-party material in the packaged extension, including the JetBrains icons above, the Visual Studio Code Codicons, and every bundled npm dependency, is listed with its required notices in |





