# Extension points — microsoft/vscode

> Canonical page: https://codevetter.com/unpack/vscode/extension-points

# Extension points — microsoft/vscode

Scanned commit f6439326f6891a1eaf254a19fc1a78243cbb8f9d (2026-09-22). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

VS Code is essentially a registry machine. Internal code plugs in through: (1) registerSingleton for DI services with eager/delayed instantiation; (2) the generic Registry.as() pattern for typed contribution registries; (3) WorkbenchContributionsRegistry keyed by lifecycle phase; (4) registerAction2/MenuId for commands+menus; (5) ConfigurationRegistry for settings schema; (6) ExtensionsRegistry/ExtensionPoint<T> which materializes the 59 declared contribution points in extensionPoints.json. External extensions plug in through package.json contributions plus the `vscode` API built per-extension by createApiFactoryAndRegisterActors, with proposed APIs gated by extensionsApiProposals.
- registerSingleton(id, ctor, InstantiationType.Eager|Delayed) in platform/instantiation/common/extensions.ts is how all shared services register; getSingletonServiceDescriptors() is consumed by Workbench.initServices to seed the ServiceCollection. — [src/vs/platform/instantiation/common/extensions.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/instantiation/common/extensions.ts) [src/vs/workbench/browser/workbench.ts#L172](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/browser/workbench.ts#L172)
- The platform Registry (platform/registry/common/platform.ts) provides the add/as/knows primitive behind every contribution registry; workbench features call Registry.as<...>(SomeExtensionPointId) to contribute. — [src/vs/platform/registry/common/platform.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/registry/common/platform.ts) [src/vs/workbench/browser/workbench.ts#L142-L143](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/browser/workbench.ts#L142-L143)
- ExtensionPoint<T>/ExtensionsRegistry in extensionsRegistry.ts implement package.json contribution points: handlers receive ExtensionPointUserDelta (added/removed) so contributions can hot-update when extensions install/uninstall. — [src/vs/workbench/services/extensions/common/extensionsRegistry.ts#L67-L120](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/extensionsRegistry.ts#L67-L120)
- extensionPoints.json enumerates all 59 supported contribution points — including commands, menus, configuration, grammars, themes, languages, views/viewsContainers, notebooks, customEditors, debuggers, chatAgents/chatParticipants/chatSessions/chatSkills, languageModelTools, mcpServerDefinitionProviders, terminalQuickFixes and walkthroughs. — [src/vs/workbench/services/extensions/common/extensionPoints.json](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/extensionPoints.json)
- Commands and menus are contributed via Action2/registerAction2 and MenuId from platform/actions/common/actions.ts — used inside the workbench itself (e.g., web.main.ts registers actions) as well as surfaced to extensions through the commands/menus extension points. — [src/vs/platform/actions/common/actions.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/actions/common/actions.ts) [src/vs/workbench/browser/web.main.ts#L50](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/browser/web.main.ts#L50)
- Settings schema is an extension point: ConfigurationRegistry (platform/configuration/common/configurationRegistry.ts) accepts 'configuration' contributions which the layered ConfigurationService then resolves across default/policy/user/workspace/folder scopes. — [src/vs/platform/configuration/common/configurationRegistry.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/configuration/common/configurationRegistry.ts) [src/vs/platform/configuration/common/configurationService.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/configuration/common/configurationService.ts)
- File system providers are an extension point: IFileService.registerProvider lets extensions (and core) mount arbitrary schemes, and the extension service auto-activates extensions on 'onFileSystem:<scheme>' events. — [src/vs/platform/files/common/fileService.ts#L52](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/files/common/fileService.ts#L52) [src/vs/workbench/services/extensions/common/abstractExtensionService.ts#L129-L134](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/abstractExtensionService.ts#L129-L134)
- The public extension API surface is generated from src/vscode-dts/vscode.d.ts (+ proposed d.ts files, compile-checked by npm run vscode-dts-compile-check) and materialized per-extension by createApiFactoryAndRegisterActors in extHost.api.impl.ts. — [src/vscode-dts/vscode.d.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vscode-dts/vscode.d.ts) [package.json#L68](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/package.json#L68) [src/vs/workbench/api/common/extHost.api.impl.ts#L150](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/api/common/extHost.api.impl.ts#L150)
- Proposed/unstable APIs are an explicit extension-point gate: extensionsApiProposals.ts maintains allApiProposals which extensionsRegistry consults, and ExtensionsProposedApi enforces enablement per extension/product rules. — [src/vs/platform/extensions/common/extensionsApiProposals.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/platform/extensions/common/extensionsApiProposals.ts) [src/vs/workbench/services/extensions/common/extensionsProposedApi.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/extensionsProposedApi.ts) [src/vs/workbench/services/extensions/common/extensionsRegistry.ts#L19](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/extensionsRegistry.ts#L19)
- Extension host placement is pluggable: ExtensionHostKind + ExtensionRunningLocationTracker + IExtensionHostKindPicker decide whether an extension runs in the local process host, a web worker host, or on the remote agent. — [src/vs/workbench/services/extensions/common/extensionHostKind.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/extensionHostKind.ts) [src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.ts)
- Built-in extensions are themselves extension-point consumers: each extensions/*/package.json declares contributes blocks (grammars, themes, languages, commands) loaded through the same ExtensionsRegistry as third-party extensions. — [extensions/git/package.json](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/extensions/git/package.json) [extensions/typescript-language-features/package.json](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/extensions/typescript-language-features/package.json) [extensions/package.json](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/extensions/package.json)
- New IPC surfaces are added by registering channels: Server.registerChannel(name, channel) on ElectronIPCServer/NodeIPCServer/IPCServer — e.g., McpGatewayChannelName and NativeMcpDiscoveryHelperChannelName were added for MCP support. — [src/vs/code/electron-main/app.ts#L1463-L1467](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/code/electron-main/app.ts#L1463-L1467) [src/vs/base/parts/ipc/common/ipc.ts](https://github.com/microsoft/vscode/blob/f6439326f6891a1eaf254a19fc1a78243cbb8f9d/src/vs/base/parts/ipc/common/ipc.ts)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
