Project Switcher for VS Code
Window-safe project switching for VS Code.
Manage projects, preserve window identity.
Project Switcher for VS Code is a Project Manager style project/workload
launcher designed around VS Code's window and workspace model. It helps you
switch projects without reusing or mutating the current window, reducing
accidental contamination of workspaceStorage, webview state, extension
mementos, and AI assistant session state.
Why This Exists
Many project manager extensions optimize for convenience by reusing the current
or empty VS Code window when opening another project. That is fast, but it can
blur the boundary between workloads.
For ordinary editing this is usually harmless. For extensions with heavy UI,
webview, and session state, such as AI assistant sidebars, it can make stale
workspace state leak from one project into another.
Project Switcher for VS Code takes the opposite default:
- opening a project creates a new VS Code window;
- empty windows are not silently reused;
- opening a project never mutates the current window's workload identity;
.code-workspace files are first-class project boundaries;
- project switching is explicit: create a new project window now, reveal an
existing one later.
Features
- Dedicated Project Switcher Activity Bar and Side Bar.
- Favorite projects grouped by tags.
- Auto-detect Git, Mercurial, SVN,
.code-workspace, and ordinary folder
projects from configured base folders.
- Status Bar entry showing the current saved project.
- Save the current folder or
.code-workspace as a project.
- Add any folder or
.code-workspace from disk.
- Search saved and auto-detected projects with a Quick Pick.
- Open projects with
forceNewWindow: true.
- Keep recently opened projects near the top.
- Remove stale projects from a Quick Pick or the Side Bar.
- Save auto-detected projects as favorites.
- Edit favorite project tags from the Side Bar.
- Reveal projects in the system file manager.
- Edit projects as JSON.
- Diagnose the current window boundary.
Commands
Project Switcher: Open Project
Project Switcher: Add Project
Project Switcher: Save Current Project
Project Switcher: Remove Project
Project Switcher: Filter Projects by Tag
Project Switcher: Refresh
Project Switcher: Edit Projects
Project Switcher: Diagnose Window Boundary
Configuration
{
"projectSwitcher.projectsFile": "",
"projectSwitcher.allowCurrentWindowOpen": false,
"projectSwitcher.revealExistingWindow": true,
"projectSwitcher.showProjectNameInStatusBar": true,
"projectSwitcher.tags.groupFavorites": true,
"projectSwitcher.git.baseFolders": ["~/SourceCode"],
"projectSwitcher.hg.baseFolders": [],
"projectSwitcher.svn.baseFolders": [],
"projectSwitcher.vscode.baseFolders": ["~/SourceCode"],
"projectSwitcher.any.baseFolders": []
}
allowCurrentWindowOpen is an escape hatch. Keep it false for window-safe
switching.
When projectsFile is empty, projects are stored in VS Code extension global
state. If you want a portable file, set it to a JSON path such as:
{
"projectSwitcher.projectsFile": "~/.config/project-switcher-vsc/projects.json"
}
Each auto-detected source also supports ignoredFolders and
maxDepthRecursion, for example:
{
"projectSwitcher.git.ignoredFolders": ["node_modules", "out", "dist", "build"],
"projectSwitcher.git.maxDepthRecursion": 4
}
[
{
"id": "fedora-scripts",
"name": "Fedora Scripts",
"path": "/home/autyan/SourceCode/fedora-workstation-platform-scripts",
"kind": "folder",
"tags": ["system", "codex"],
"lastOpenedAt": "2026-06-22T03:40:00.000Z",
"openCount": 12
},
{
"id": "wow-styles",
"name": "WoW Styles",
"path": "/home/autyan/SourceCode/my-wow-styles/my-wow-styles.code-workspace",
"kind": "workspace",
"tags": ["game", "codex"]
}
]
lastOpenedAt and openCount are maintained automatically after a project is
opened.
Publish
npm install
npm run compile
npm run package
The package command creates a .vsix file that can be installed locally from
VS Code's Extensions view before publishing.
To publish to Visual Studio Marketplace:
npm run publish
You need a Marketplace publisher matching the publisher value in
package.json and a publishing credential accepted by vsce.
Philosophy
VS Code windows are stateful workbenches, not disposable shells. They restore
layout, workspace storage, webview origins, mementos, and extension state.
This extension treats a project switch as a new workload boundary. It should not
turn the current window into a different project.
Switch projects without blurring window boundaries.