Parable Workspaces is the elegant and efficient workspace manager for your projects in vscode, cursor and antigravity.
- Instant Project Switching: Quickly jump between saved workspaces without losing your flow.
- Visual Identification: Assign colors and icons to your workspaces for instant recognition in the Activity Bar.
- Quick Access: Open and switch workspaces instantly from the top of the editor with a single keyboard shortcut or via the Command Palette (
Alt + P). - Automatic Detection: Get notified to save new folders as workspaces as soon as you open them.
- Peacock Integration: Customize the editor's color scheme per workspace to never lose track of where you are.
| Platform | Marketplace Link | Quick Install Command |
|---|---|---|
| Visual Studio Code | VS Code Marketplace | code --install-extension StanleyGomes.parable-workspaces |
| Cursor | Open VSX Registry | cursor --install-extension StanleyGomes.parable-workspaces |
| Antigravity | Open VSX Registry | antigravity --install-extension StanleyGomes.parable-workspaces |
- Activity Bar: Click on the Parable Workspaces icon in the left sidebar of your editor;
- Command Palette: Press
Ctrl+Shift+P(orCmd+Shift+Pon Mac) and select the commandParable: List/Open Workspaces; - Keyboard Shortcut: Press
Alt + P(orCmd + Option + Pon Mac) to open the switcher dropdown at the top of your editor.
You can save and register a new workspace in Parable Workspaces in two ways:
- Sidebar Button: Click the
+(plus) icon at the top of the Parable Workspaces sidebar panel. - Command Palette: Press
Ctrl+Shift+P(orCmd+Shift+Pon Mac) and run theParable: Save Current Workspacecommand.
Tip
Automatic Detection: When you open a new folder in VS Code that is not yet mapped, Parable Workspaces will automatically trigger a popup notification in the bottom right corner of the editor, asking if you would like to save/register this new workspace. This keeps your workspace list updated effortlessly!
| Shortcut | OS | Description |
|---|---|---|
Alt + P |
Linux / Windows | Opens the workspace switcher at the top of the screen |
Cmd + Option + P |
macOS | Opens the workspace switcher at the top of the screen |
Requirements
- Node.js 22.x+
- VS Code 1.85.0+
Running and Debugging
- Open the project in Visual Studio Code.
- Install dependencies:
npm install
- Press
F5to start a new VS Code instance with the extension enabled. - To debug the Webview:
- Open the Parable Workspaces view.
- Run the command:
Developer: Open Webview Developer Toolsfrom the Command Palette.
- To debug the Extension Host:
- Check the
Debug Consolein the main VS Code window for logs and errors. - Set breakpoints directly in the TypeScript files.
- Check the
Available Commands
| Command | Description |
|---|---|
npm install |
Installs dependencies |
npm run build |
Compiles the extension |
npm run lint |
Runs ESLint checks |
npm run test |
Runs unit tests then e2e tests |
npm run test:unit |
Runs Vitest unit tests |
npm run test:unit:coverage |
Runs unit tests and writes coverage/unit (brief folder summary) |
npm run test:e2e |
Compiles and runs Mocha e2e tests in a VS Code Extension Host |
npm run test:e2e:coverage |
Runs e2e tests and writes coverage/e2e (brief folder summary) |
npm run test:coverage |
Runs unit coverage then e2e coverage (separate report folders) |
npm run coverage:summary |
Prints folder % summaries for existing coverage reports |
npm run package |
Packages the extension for distribution |
npm run publish |
Publishes the extension to VS Code Marketplace |
npm run ovsx:publish |
Publishes to OpenVSX Registry |
- Unit tests use Vitest (fast Node runner, no VS Code process). Co-locate them next to the code under test as
*.test.ts(for examplesrc/core/helpers/StringHelper.test.ts).- The
vscodemodule is aliased to an in-memory mock (src/test/unit/mocks/vscode.ts), reset before every test. - Shared fakes (in-memory repository,
UserInteraction,ExtensionContext) live insrc/test/unit/fakes.ts.
- The
- E2E / integration tests use
@vscode/test-cli+ Mocha (official Extension Development Host runner). Place them insrc/test/e2e/**/*.test.ts; they are compiled withtsconfig.e2e.json.- Each run opens a throwaway workspace folder and points
XDG_CONFIG_HOMEto a temp dir, so your realworkspaces.jsonis never touched. Tests refuse to run if storage resolves outside that sandbox (e.g. on macOS/Windows, which ignoreXDG_CONFIG_HOME). activate()returns the serviceContainer(extension.exports) so tests can assert real persisted state.
- Each run opens a throwaway workspace folder and points
- Coverage is separate by design:
coverage/unit/β Vitest V8 coverage (primary, actionable metric). Opencoverage/unit/index.html.coverage/e2e/β@vscode/test-cli --coveragevia Extension HostNODE_V8_COVERAGE. Opencoverage/e2e/index.html.
- CLI coverage output is a short path % table. Root entry files are listed individually (
src/extension.ts, β¦), not rolled into a misleadingsrcbucket. E2E summary leads with function coverage because line % is inflated by activation/module load. Re-print anytime withnpm run coverage:summary. - Treat e2e coverage as a coarse Extension Host report: activation loads much of the DI graph, so percentages look higher than unit coverage and are not a path-coverage substitute.
- CI uploads both artifacts. Unit coverage is gated by thresholds in
vitest.config.mts(95% lines/statements/functions, 90% branches); the build fails below that. E2e output is filtered for known Extension Host noise (AgentHost session spam, clean exitsignal: unknown). - Placeholder dirs
coverage/unitandcoverage/e2eare tracked; generated HTML/LCOV files stay gitignored.
This project uses GitHub Actions for continuous integration and deployment. The following workflows are configured:
- Trigger: Push to
masterbranch or pull requests - Actions:
- Validates conventional commits
- Lints and checks formatting
- Runs Vitest unit tests and VS Code Mocha e2e tests, uploading separate
coverage/unitandcoverage/e2eartifacts - Builds and packages the VS Code extension
- Trigger: Manual dispatch (
workflow_dispatch) - Version auto-detection: The workflow reads commits since the last
v*tag and applies semantic versioning rules (breaking change β major,feat:β minor, everything else β patch). - Jobs:
prepare_releaseβ auto-calculates versions, bumps files, updates changelogs, opens a PR targetingmaster, and creates thev<version>tagpublish_vscode(conditional) β packages and publishes to Visual Studio Marketplace and OpenVSXcreate_release(conditional) β creates separate GitHub Releases per plugin and attaches built artifacts
- Go to Actions β Release in the GitHub repository.
- Click Run workflow.
- The workflow will automatically:
- Detect the new version from commits since the last release tag using semantic versioning.
- Bump versions in
package.json. - Update the
CHANGELOG.mdwith commit entries. - Open a release PR with the generated changes targeting
master. - Create the
v<version>git tag. - Publish to the selected marketplaces.
- Create separate GitHub Releases per plugin with built artifacts.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
