Focus on what matters. Hide the noise.
Monorepo Workspace lets you define named profiles — curated sets of folders from your apps/ and libs/ directories — and switch between them instantly. Everything else stays hidden in the file explorer until you need it.

How it works
The extension writes to VS Code's built-in files.exclude setting when you switch profiles. No custom tree views, no workarounds — the native explorer just shows what's relevant to your current context.
Root-level files and folders (tooling, config, CI, etc.) are always visible regardless of the active profile.
Getting started
- Open your monorepo in VS Code or Cursor
- Run Monorepo: Create Profile from the command palette
- Give it a name (e.g.
frontend) and select the folders to include - The status bar shows your active profile — click it to switch or peek
Features
Workspace profiles
Define as many profiles as you need, each with its own set of visible folders:
// .vscode/monorepo-workspaces.json ← commit this
{
"profiles": {
"frontend": {
"label": "Frontend",
"folders": ["apps/web", "libs/ui", "libs/utils"]
},
"backend": {
"label": "Backend",
"folders": ["apps/api", "libs/db", "libs/shared"]
}
}
}
Each developer keeps their own active profile locally:
// .vscode/monorepo-workspaces.local.json ← gitignore this
{
"activeProfile": "frontend"
}
Commit the shared file to publish profiles with your team. Add the local file to .gitignore so nobody accidentally commits their filter state.
Status bar button
The status bar shows your active profile at a glance with color coding:
- Accent color — profile active, unimportant folders hidden
- Orange — peek mode, all folders temporarily visible
- Default — no profile, all folders shown
Click the button to open the action menu:
Workspace: frontend
> $(eye-closed) Peek Temporarily show all folders
$(arrow-swap) Switch Profile
$(folder-opened) Show All Folders
Peek mode
Need to quickly look at a folder outside your profile? Hit Peek from the status bar menu. All hidden folders reappear temporarily. Click Restore to go back to your profile.
Context menu
Right-click any folder in the explorer to add or remove it from a profile directly.
Always-visible root folders
Anything at the root that isn't a package directory (apps/, libs/) is always shown — tools/, infra/, .github/, config files, etc.
Configuration
monorepoWorkspace.packageDirs
Directories whose subdirectories are treated as selectable packages.
// .vscode/settings.json
{
"monorepoWorkspace.packageDirs": ["apps", "libs"]
}
Change this if your monorepo uses different directory names (packages/, services/, etc.). Open Monorepo: Open Settings from the command palette to edit it in the UI.
Commands
| Command | Description |
|---|---|
Monorepo: Switch Profile |
Switch to a different profile |
Monorepo: Create Profile |
Create a new profile |
Monorepo: Delete Profile |
Delete an existing profile |
Monorepo: Add Folder to Profile |
Add a folder to a profile via quick pick |
Monorepo: Toggle Peek |
Show/hide all folders temporarily |
Monorepo: Show All Folders |
Clear the active profile |
Monorepo: Open Settings |
Open extension settings |
Monorepo: Edit Config |
Open the raw config file |
How profiles are stored
| File | Commit? | Contents |
|---|---|---|
.vscode/monorepo-workspaces.json |
Yes | Shared profile definitions |
.vscode/monorepo-workspaces.local.json |
No | Your active profile (auto-created on first switch) |
When you switch profiles, the extension writes files.exclude and search.exclude into .vscode/settings.json. If your team also gitignores workspace settings, add this to your monorepo's .gitignore:
.vscode/monorepo-workspaces.local.json
Existing single-file configs are migrated automatically: activeProfile is moved into the local file and stripped from the shared file on next read.