Project
Workspace Architecture
Crate boundaries, dependency direction, and file-organization rules in the vs workspace.
The vs repository is intentionally split into focused crates so command logic, storage concerns, and plugin runtimes stay decoupled.
Crates
vs-cli: binary, argument parsing, completions, TUI/output, and thevsexecutablevs-core: orchestration and command use casesvs-config: home detection, config files, project files, legacy files, and version resolutionvs-registry: registry index and local plugin entriesvs-installer: transactional install staging and receiptsvs-plugin-api: shared plugin models and traitsvs-plugin-lua: Lua plugin backendvs-plugin-wasi: native plugin contract layervs-plugin-sdk: author-facing helpers for native pluginsvs-shell: activation scripts, links, and path helpersvs-test-support: fixtures and temp helpers
Dependency flow
The intended direction is:
- focused leaf crates such as
vs-config,vs-registry,vs-installer,vs-shell, and the plugin crates vs-core, which composes those leaves into user-facing servicesvs-cli, which depends onvs-core
File-size discipline
The workspace prefers many small modules over a few oversized files.
- one command per file in
crates/vs-cli/src/command/ - one use case per file in
crates/vs-core/src/service/ - separate models, loaders, stores, and helpers in leaf crates
Why this matters
This structure keeps the CLI thin, makes service logic testable without terminal concerns, and lets plugin/runtime work evolve without collapsing the workspace into a single large crate.