Project CentralBrowse, organize, and quickly open your projects — all from the VSCode sidebar. Project Central scans one or more root directories, detects project types automatically, and presents them in a clean tree view with favorites, sorting, filtering, and usage tracking. Features
Detected Project Types
Getting Started1. Add a Root FolderAfter installation, the sidebar is empty. There are three ways to add root folders: Option A: Via the Sidebar (recommended)
Option B: Via the Command Palette
Option C: Directly in settings.json
Configuration — All Settings in DetailAll settings are stored in VSCode's Where Can I Edit Settings?
|
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
Yes | — | Absolute path to the directory. Supports ~ as the home directory. |
maxDepth |
number |
No | 1 |
How deep to scan. 1 = direct children only, 2 = also their subdirectories, etc. |
projectTypes |
string[] |
No | [] (all) |
Only show projects of these types. Empty = detect all types. Possible values: "git", "vscode", "idea", "node", "rust", "python", "go" |
label |
string |
No | folder name | Display label for the group in the sidebar. If not set, the folder name is used. |
Examples
Simple — one folder:
"projectCentral.rootFolders": [
{
"path": "~/Projects"
}
]
Multiple folders with labels:
"projectCentral.rootFolders": [
{
"path": "~/Projects/work",
"label": "Work",
"maxDepth": 2,
"projectTypes": ["git", "node"]
},
{
"path": "~/Projects/personal",
"label": "Personal"
},
{
"path": "~/go/src",
"label": "Go Workspace",
"projectTypes": ["go"]
}
]
XAMPP/Laragon users:
"projectCentral.rootFolders": [
{
"path": "C:\\laragon\\www",
"label": "Laragon Sites"
}
]
Note: When multiple root folders are configured, they are displayed as collapsible groups in the sidebar. With a single root folder, projects are shown directly without grouping.
projectCentral.sortBy
Type: string
Default: "alphabet-asc"
Determines the sort order of projects in the sidebar.
| Value | Description |
|---|---|
"alphabet-asc" |
Alphabetical A → Z |
"alphabet-desc" |
Alphabetical Z → A |
"usage" |
Most opened projects first. Projects you use frequently appear at the top. Ties are broken alphabetically. |
"last-opened" |
Recently opened projects first. The project you opened most recently appears at the top. |
How to Change
Via Settings UI:
Cmd+, → Search "Project Central Sort" → Select from dropdown
Via settings.json:
"projectCentral.sortBy": "usage"
Via Sidebar button: Click the Sort icon in the Projects view toolbar → A QuickPick menu appears.
Via Command Palette:
Cmd+Shift+P → Project Central: Sort Projects By...
projectCentral.filterByType
Type: string[]
Default: [] (empty = show all)
Filters the displayed projects by type. Only projects that have at least one of the specified types are shown.
Possible values: "git", "vscode", "idea", "node", "rust", "python", "go"
Filter Examples
Show only Git and Node projects:
"projectCentral.filterByType": ["git", "node"]
Show all (default):
"projectCentral.filterByType": []
How to Change the Filter
Via Sidebar button: Click the Filter icon (funnel) in the toolbar → A multi-select QuickPick appears, select the desired types.
Via Command Palette:
Cmd+Shift+P → Project Central: Filter by Project Type...
Via settings.json:
"projectCentral.filterByType": ["python", "rust"]
Tip: A project can have multiple types simultaneously. A Node.js project with Git has the types
["git", "node"]. It will be shown as long as any of its types match the filter.
projectCentral.showFavorites
Type: boolean
Default: true
Controls whether the Favorites section is displayed in the sidebar. The section only appears when at least one project is marked as a favorite AND this setting is true.
"projectCentral.showFavorites": true
Set to false to completely hide the Favorites section — favorite markings are preserved and will reappear when the setting is changed back to true.
projectCentral.confirmOpenInCurrentWindow
Type: boolean
Default: true
When true, a confirmation dialog appears before opening a project in the current window (since unsaved changes could be lost).
"projectCentral.confirmOpenInCurrentWindow": true
Set to false if you don't need the confirmation and want to open projects directly in the current window.
Note: This setting only affects "Open in Current Window". "Open in New Window" (the default click action) always opens a new window without prompting.
Commands
All commands are accessible via the Command Palette (Cmd+Shift+P / Ctrl+Shift+P). Type "Project Central" to find them.
| Command | Description | Available in |
|---|---|---|
| Quick Open Project | Opens a fuzzy-search dropdown with all projects. Favorites appear first. | Command Palette, Keybinding Cmd+Alt+P |
| Refresh Projects | Re-scans all root folders. Also happens automatically on config changes. | Command Palette, Sidebar Toolbar |
| Toggle Favorite | Stars/unstars a project as favorite. | Right-click on project, Inline button (star) |
| Remove from Favorites | Removes a project from favorites. | Right-click in Favorites view |
| Sort Projects By... | Opens a QuickPick with sort options. | Command Palette, Sidebar Toolbar |
| Filter by Project Type... | Opens a multi-select with project types. | Command Palette, Sidebar Toolbar |
| Open in New Window | Opens the project in a new VSCode window. | Right-click, Single-click on project |
| Open in Current Window | Opens the project in the current window (with optional confirmation). | Right-click on project |
| Add Root Folder | Opens a folder dialog to add a new root folder. | Command Palette, Welcome view |
| Open in Terminal | Opens a new terminal in the project directory. | Right-click on project |
| Copy Path | Copies the absolute project path to the clipboard. | Right-click on project |
| Reveal in Finder / Explorer | Opens the project folder in the OS file manager. | Right-click on project |
Keyboard Shortcuts
| Action | Mac | Windows / Linux |
|---|---|---|
| Quick Open Project | Cmd+Alt+P |
Ctrl+Alt+P |
To customize the shortcut: Cmd+K Cmd+S → Search for "Project Central Quick Open" → Assign a new shortcut.
Data Storage
| Data | Stored in | Persistence |
|---|---|---|
| Root Folders, Sort, Filter | settings.json (User or Workspace) |
Editable via Settings UI / JSON |
| Favorites | VSCode globalState |
Automatic, survives updates and reinstalls |
| Usage Data (Open Count, Last Opened) | VSCode globalState |
Automatic, survives updates and reinstalls |
globalStateis VSCode's internal key-value store per extension. The data lives in your VSCode profile and is not written to files you can edit directly.
Full Settings Example
A typical settings.json configuration:
{
// ── Project Central ──────────────────────────────────────
// Three project folders with different settings
"projectCentral.rootFolders": [
{
"path": "~/Projects/work",
"label": "Work",
"maxDepth": 2,
"projectTypes": ["git"]
},
{
"path": "~/Projects/personal",
"label": "Personal"
},
{
"path": "~/go/src/github.com/myuser",
"label": "Go",
"projectTypes": ["go"]
}
],
// Most frequently used projects first
"projectCentral.sortBy": "usage",
// Show only Git and Node projects (empty = all)
"projectCentral.filterByType": [],
// Show the Favorites section
"projectCentral.showFavorites": true,
// Confirmation dialog for "Open in Current Window"
"projectCentral.confirmOpenInCurrentWindow": true
}
Development
# Install dependencies
npm install
# Compile the extension
npm run compile
# Watch mode (auto-compile on changes)
npm run watch
# Type check
npm run typecheck
# Test the extension: Press F5 in VSCode
# → Launches the Extension Development Host
Commit Convention
This project uses Conventional Commits. Commit messages are validated automatically via commitlint + husky.
| Prefix | Purpose | Version Bump |
|---|---|---|
feat: |
New feature | Minor (0.x.0) |
fix: |
Bug fix | Patch (0.0.x) |
docs: |
Documentation only | — |
chore: |
Maintenance, deps, CI | — |
refactor: |
Code change (no feature/fix) | — |
feat!: or BREAKING CHANGE: |
Breaking change | Major (x.0.0) |
Example:
feat: add project type detection for Dart
fix: scanner ignoring symlinked directories
chore: update esbuild to v0.21
Release Workflow
Releases are fully automated via GitHub Actions:
- Push to
mainwith conventional commits - Release Please automatically creates/updates a Release PR with:
- Version bump in
package.json(based on commit types) - Updated
CHANGELOG.md
- Version bump in
- Merge the Release PR → GitHub Release is created
- Publish workflow triggers and publishes to the VS Code Marketplace
VS-Code Publisher Setup
- Create a Publisher at marketplace.visualstudio.com/manage — the Publisher ID must match
"publisher"inpackage.json(currently"moers") - Create a PAT at Azure DevOps → User Settings → Personal Access Tokens:
- Organization: All accessible organizations (important!)
- Scopes: Custom defined → Marketplace → Manage
- Add GitHub Secrets in the repo → Settings → Secrets and variables → Actions:
| Secret | Value |
|---|---|
VSCE_PAT |
Your Azure DevOps PAT from step 2 |
OVSX_PAT |
Open VSX access token (optional, for open-source marketplace) |
Credits
Inspired by:
- Projects Browser by Matteo Morlack
- Project Hub by mrmryb
License
MIT