Skip to main content

Reference

VS Code API Coverage

Map of vscode.* API surfaces across Sky, Cocoon, and Mountain with implementation status.

VS Code API Coverage

Authoritative map of every top-level vscode.* API surface and its implementation split across Sky (workbench renderer), Cocoon (extension-host Node sidecar), and Mountain (Rust backend).


Dual-Track Strategy

  • Track A - Stock-Node: Cocoon loads stock VS Code extHost*.ts sources unchanged. The workbench’s mainThread*.ts runs inside Sky. The ExtHostContext/MainContext RPC glue is provided by Cocoon’s shim alongside stock extHost code. Maximum compatibility from day one for any API the stock implementation handles in-process.

  • Track B - Rust-native: Mountain owns the backend. Cocoon’s vscode shim sends gRPC to Mountain which does the work natively (filesystem, process, terminal, search, git). Faster and safer than bouncing through Node for I/O-heavy APIs.

The two tracks are not mutually exclusive. Most APIs live on Track A by default, and we promote individual operations to Track B when a measured benefit exists. The Cocoon <Namespace>Route.ts tier router decides per-call.


Legend

TrackMeaning
AStock-Node - lift unchanged extHost*.ts into Cocoon
BRust-native - Mountain owns backend, gRPC from Cocoon
CCocoon-bespoke - hand-rolled TS in Land (last resort)
SSky-direct - call via __CEL_SERVICES__.* workbench accessor

Status symbols:

  • Working - end-to-end (activation + feature render path confirmed)
  • Partial - RPC wired but UI render gap, or missing sub-method
  • Stubbed - registration accepted, no effect
  • Not attempted
  • Pure lift - stateless, no RPC, already landed via StockLift.ts

Commands

OperationPrimaryStatus
registerCommandA+SWorking
registerTextEditorCommandAWorking
executeCommandA+SWorking
getCommandsAWorking

Window - Editors

OperationPrimaryStatus
activeTextEditorAWorking
visibleTextEditorsAWorking
showTextDocumentAWorking
onDidChangeActiveTextEditorAWorking

Window - Surfaces

OperationPrimaryStatus
createStatusBarItemS (native)Working
setStatusBarMessageSWorking
createTreeViewA+SWorking
registerTreeDataProviderA+SWorking
createWebviewPanelAStubbed
registerWebviewViewProviderAStubbed
registerCustomEditorProviderAStubbed
createTerminalBPartial
onDidOpen/CloseTerminalBPartial
createOutputChannelSWorking
showInformationMessage / showWarningMessage / showErrorMessageAWorking
showQuickPick / createQuickPickAPartial
showInputBoxAPartial
showOpenDialog / showSaveDialogBWorking
withProgressA+SPartial
registerFileDecorationProviderAPartial
registerUriHandlerAPartial
onDidChangeWindowStateAWorking
showNotebookDocumentAStubbed

Workspace

OperationPrimaryStatus
workspaceFoldersAWorking
onDidChangeWorkspaceFoldersAWorking
getWorkspaceFolderA+BWorking
textDocumentsAWorking
openTextDocumentA+BWorking
onDidOpen/Close/SaveTextDocumentAWorking
onWillSaveTextDocumentAPartial
applyEditA+SPartial
save / saveAsAGap
fs.readFile / writeFile / stat / readDirectory / createDirectory / delete / rename / copyBWorking
fs.isWritableFileSystemAWorking
registerFileSystemProviderAPartial
createFileSystemWatcherBPartial
findFilesBWorking
findTextInFilesBWorking
registerTextDocumentContentProviderAPartial
getConfiguration / onDidChangeConfigurationA+BWorking
registerTaskProviderAPartial

Languages

OperationPrimaryStatus
registerCompletionItemProviderAPartial
registerHoverProviderAPartial
registerDefinitionProviderAPartial
registerReferenceProviderAPartial
registerDocumentSymbolProviderAPartial
registerCodeActionsProviderAPartial
registerCodeLensProviderAPartial
registerDocumentFormattingEditProviderAPartial
registerRenameProviderAPartial
registerInlayHintsProviderAPartial
registerFoldingRangeProviderAPartial
registerSemanticTokensProviderAPartial
registerSignatureHelpProviderAPartial
setTextDocumentLanguageA+SWorking
setLanguageConfigurationA+SWorking
createDiagnosticCollectionA+SWorking
matchPureWorking

Debug

OperationPrimaryStatus
registerDebugConfigurationProviderAPartial
registerDebugAdapterDescriptorFactoryAPartial
registerDebugAdapterTrackerFactoryAPartial
startDebuggingA+BStubbed
activeDebugSession / onDidStart/ChangeSessionAStubbed
addBreakpoints / removeBreakpointsAStubbed
activeStackItemAGap

Tasks

OperationPrimaryStatus
registerTaskProviderAPartial
fetchTasksAStubbed
executeTaskA+BStubbed
taskExecutions / onDidStartTask / onDidEndTaskAStubbed

SCM

OperationPrimaryStatus
createSourceControlA+SPartial
inputBox.value read/writeAPartial
$gitExec (built-in git ext)BStubbed

Environment

OperationPrimaryStatus
appName / appRoot / uriScheme / language / shell / machineId / sessionId / isNewAppInstallAWorking
clipboard.readText / writeTextBWorking
openExternalBWorking
asExternalUriAGap
remoteName / remoteAuthorityAWorking

Extensions

OperationPrimaryStatus
getExtension(id)AWorking
allAWorking
onDidChangeAWorking

Authentication

OperationPrimaryStatus
registerAuthenticationProviderAPartial
getSessionAPartial
getAccountsAPartial

Notebooks

OperationPrimaryStatus
createNotebookControllerAStubbed
registerNotebookCellStatusBarItemProviderAStubbed
registerNotebookSerializerAPartial

Tests

OperationPrimaryStatus
createTestControllerAPartial
Run profile / run requestAStubbed

Chat / LM

OperationPrimaryStatus
createChatParticipantAStubbed
registerLanguageModelChatProviderAGap
selectChatModelsAStubbed

Localization

OperationPrimaryStatus
t(message, ...)PureWorking
bundle / uriAWorking

Comments

OperationPrimaryStatus
createCommentControllerAStubbed

Domain-Grouped Primary Assignment

Rust-native primary (Track B wins)

High I/O, process, or syscall-bound operations where Node adds latency:

  • File system — workspace.fs.*, scanner reads. Mountain owns File::* via tokio.
  • Find files / text search — workspace.findFiles / findTextInFiles. Mountain’s globset walk.
  • Terminal PTY — Mountain-owned via portable-pty.
  • Git subprocess — Mountain spawns git as a child process.
  • File watch — createFileSystemWatcher. Mountain notify crate.
  • Native dialogs / clipboard / openExternal — Tauri covers these.
  • Process spawn for debug adapters / task exec — upcoming via tokio::process.

Node-stock primary (Track A wins)

State-heavy or coordination-heavy APIs where stock VS Code handles nuance:

  • Command registry, language features, editor/document/selection, configuration, messages/dialogs/quick-input, progress, secrets/storage/memento, authentication, debug/tasks (stock core + Mountain process spawn), webviews, notebooks, tree views.

Hybrid (per-operation split)

  • SCM — stock for provider registration, Mountain-native for $gitExec.
  • Terminal shell integration — shell events via extHost, PTY via Mountain.
  • FileSystemProvider — Cocoon forwards reads via gRPC to Mountain for disk ops.
  • Status bar — stock manages entry lifecycle, Sky renders via __CEL_SERVICES__.Statusbar.

Highest-Priority Gaps

  • vscode.debug.* end-to-end (startDebugging, sessions, breakpoints) — blocks every language debugger.
  • vscode.tasks.executeTask — blocks Jake / Gulp / Grunt / npm task providers.
  • vscode.window.createWebviewPanel — blocks GitLens graph panel, Copilot chat, markdown-preview internals.
  • vscode.scm viewlet route into ISCMService — extensions register but UI stays empty.
  • Tree-view renderer wiring — landed: extension-registered tree views render via __CEL_SERVICES__.TreeViewByViewId(id).dataProvider.
  • localGit channel — landed.

See Also