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-workspacefiles 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-workspaceas a project. - Add any folder or
.code-workspacefrom 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 ProjectProject Switcher: Add ProjectProject Switcher: Save Current ProjectProject Switcher: Remove ProjectProject Switcher: Filter Projects by TagProject Switcher: RefreshProject Switcher: Edit ProjectsProject 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
}
Project File Format
[
{
"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.