Skip to content

Proposal: Command Palette JS/TS Extensions #48707

@michaeljolley

Description

@michaeljolley

We have drafted a new specification for JavaScript and TypeScript extensions in Command Palette.

The goal is to expand CmdPal extension authoring beyond in-process WinRT/COM by enabling isolated Node.js-based extensions communicating with the host over JSON-RPC 2.0 via stdio.

This issue is intended to collect high-level feedback on the proposal and track follow-up work items.

Spec document:
CmdPal JSON-RPC Spec Overview (jsonrpc-spec branch)

What this proposal covers (high level)

  • Per-extension process isolation (one Node.js process per extension)
  • JSON-RPC 2.0 transport over stdio with LSP-style framing
  • Type-safe TypeScript SDK surface aligned with CmdPal concepts
  • Lifecycle model (discover, initialize, query, dispose, restart)
  • Developer ergonomics such as hot-reload and debugger attach
  • Support for core command/page/content scenarios expected from CmdPal extensions

Why this direction

  • Improves accessibility for web developers (TypeScript, npm, Node.js ecosystem)
  • Increases resilience through process isolation and crash containment
  • Keeps host/extension boundaries explicit and protocol-driven
  • Provides a scalable foundation for future extension capabilities

Out of scope for this initial spec

  • WebView/browser-rendered extension UI
  • Marketplace and auto-update infrastructure
  • Full permission sandboxing model
  • Non-JS language runtimes (for now)

Feedback requested

We would especially appreciate input on:

  • API shape and ergonomics for extension developers
  • JSON-RPC method boundaries and protocol design
  • Extension lifecycle and failure handling behavior
  • Manifest/schema expectations for packaging/discovery
  • Security boundaries and permission model priorities
  • Performance considerations for one-process-per-extension

Tracking and follow-ups

Please keep this thread focused on high-level spec feedback.

For implementation details, bugs, or discrete feature work, please open separate atomic issues and link them here so we can track progress cleanly.

Metadata

Metadata

Assignees

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions