Repo Branches in Status Bar
See the branch and sync status of every Git repository in your workspace at once — right in the status bar.

Why
VS Code shows the branch of a single "active" repository. In a workspace with a backend, a frontend and a mobile app, that means you can only see one branch at a time — and checking another one forces you to switch the active repository first.
This extension adds one status bar item per repository. Each one shows its own branch, its own dirty state, and its own ahead/behind counters. Clicking an item opens a menu scoped to that repository only. The active repository never changes.
⑂ backend:staging 2↑ ⑂ frontend:fix/audit-flows* 3↓ ⑂ mobile:staging ☁
| Indicator |
Meaning |
3↓ |
3 remote commits you have not pulled yet |
2↑ |
2 local commits ready to push |
* |
uncommitted changes in the working tree |
☁ |
branch has no upstream — never published |
| (nothing) |
in sync |
Clicking an item
The menu is scoped to that single repository:
- Sync / Pull / Push — shown only when there is something to do, with the commit count
- Publish branch — replaces Sync when the branch has no upstream
- Fetch — this repository, or all of them at once
- Branch list — local branches, plus remote-only branches that create a local tracking branch on checkout
- Create new branch
Important: ahead/behind needs a fetch
Git only learns about new remote commits after a fetch. Without one, the ↓ counter stays at zero even when the remote has moved on. Enable VS Code's built-in autofetch:
"git.autofetch": true,
"git.autofetchPeriod": 180
Alternatively, set multiRepoBranches.autoFetchMinutes to run fetches on your own interval, or run the Repo Branches: Fetch all repositories command manually.
Settings
All settings are prefixed with multiRepoBranches.
| Setting |
Default |
Description |
format |
$(git-branch) {repo}:{branch}{dirty}{sync} |
Item text. Placeholders: {repo}, {branch}, {dirty}, {sync} |
syncStyle |
arrows |
arrows (3↓ 2↑) or icons ($(arrow-down)3) |
inSyncIndicator |
"" |
Shown when in sync. Try " $(check)" for an explicit confirmation |
noUpstreamIndicator |
" $(cloud-upload)" |
Shown when the branch was never published |
dirtyIndicator |
"*" |
Shown when there are uncommitted changes |
showSyncStatus |
true |
Fill {sync} at all |
highlightWhenBehind |
false |
Highlight the item when there is something to pull |
highlightWhenAhead |
false |
Highlight the item when there is something to push |
autoFetchMinutes |
0 |
Own fetch interval, 0 disables |
alignment |
left |
Which side of the status bar |
order |
[] |
Preferred order, e.g. ["backend", "frontend", "mobile"] |
ignore |
[] |
Repository folder names to hide |
A compact setup for narrow screens:
"multiRepoBranches.format": "{repo}·{branch}{dirty}{sync}",
"multiRepoBranches.order": ["backend", "frontend", "mobile"]
Commands
| Command |
Description |
Repo Branches: Open repository menu |
Pick a repository, then act on it — good for a keybinding |
Repo Branches: Fetch all repositories |
Fetch every repository in the workspace |
Repo Branches: Refresh status bar |
Force a redraw |
Requirements
- VS Code 1.75 or newer
- The built-in Git extension enabled
- One or more Git repositories in the workspace, either as a multi-root workspace or as sibling folders under a parent folder
This extension does not detect branches inside a single monorepo — it lists repositories, and a monorepo is one repository. For parallel branches of the same repository, use Git worktrees; each worktree is discovered as its own entry.
Tips
To avoid duplicated information, right-click the status bar and uncheck Source Control to hide the built-in single-repository branch indicator.
Contributing
Issues and pull requests are welcome at github.com/mattosvmp/multi-repo-branches.
License
MIT