microsoft / microsoft/PowerToys
Proposal: Command Palette JS/TS Extensions
@michaeljolley is already working on this.
Since Jun 18, 2026.
- Dominant language
- C
- Stars
- 139k
- Forks
- 8.6k
- PR merge metrics
- PR metrics pending
Description
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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.