Plugin Development Overview
Microsoft PowerToys provides two primary extensibility models that allow developers to extend the functionality of PowerToys with custom plugins and extensions.Extensibility Types
PowerToys supports two types of extensibility:PowerToys Run Plugins
Extend PowerToys Run launcher with custom search providers and actions
Command Palette Extensions
Create extensions for the next-generation Command Palette (CmdPal)
PowerToys Run Plugins
PowerToys Run is a quick launcher for power users that includes features like:- Application search
- File and folder search
- Shell command execution
- Calculator
- Unit converter
- And more through plugins
IPlugin interface from the Wox.Plugin namespace.
Key Features:
- Action keywords for direct activation
- Global plugins that respond to all queries
- Context menus for additional actions
- Theme support (light/dark)
- Localization support
Command Palette Extensions
Command Palette (CmdPal) is the next iteration of PowerToys Run, designed with extensibility at its core. Extension Model: WinRT-based extensions implementing theIExtension interface, language-agnostic (any language supporting WinRT).
Key Features:
- Command providers with list and content pages
- Rich UI elements (forms, markdown, trees)
- Fallback handlers for custom query processing
- Settings pages
- Extension host APIs for status and logging
The Command Palette is currently in preview. The API may introduce breaking changes before reaching v1.0.0.
Development Workflow
PowerToys Run Plugin Workflow
-
Create Plugin Project
- Create a new C# class library targeting
net9.0-windows10.0.22621.0 - Follow naming pattern:
Microsoft.PowerToys.Run.Plugin.{PluginName}orCommunity.PowerToys.Run.Plugin.{PluginName}
- Create a new C# class library targeting
-
Implement Plugin Interface
- Implement
IPlugininterface - Add
plugin.jsonmetadata file - Create light and dark theme icons
- Implement
-
Build and Test
- Build the plugin DLL
- Copy to PowerToys plugins folder
- Test with PowerToys Run
-
Package
- Add to installer configuration
- Include in signed build pipeline
- Add localization support
Command Palette Extension Workflow
-
Create Extension
- Use the “Create extension” command in Command Palette itself
- Or manually create a WinRT component project
-
Implement Extension Interface
- Implement
IExtensioninterface - Create a
ICommandProvider - Define pages and commands
- Implement
-
Build and Deploy
- Build the extension
- Deploy to Command Palette extensions folder
- Extension is automatically discovered
Plugin vs Extension: When to Use Which
| Feature | PowerToys Run Plugin | Command Palette Extension |
|---|---|---|
| Language Support | C# only | Any WinRT-compatible language |
| UI Complexity | Simple list results | Rich pages, forms, content |
| Maturity | Stable, production-ready | Preview, API may change |
| Performance | Fast, lightweight | More features, slightly heavier |
| Use Case | Quick search and actions | Complex workflows and forms |
Development Environment Setup
Prerequisites
- Visual Studio 2022 17.4+ or Visual Studio 2026
- Windows 10 1803+ (April 2018 Update or newer)
- .NET 9 SDK
- PowerToys installed (for testing)
Clone PowerToys Repository
Build PowerToys
Plugin Distribution
Official Plugins
Official plugins are included in the PowerToys repository and distributed with PowerToys:- Must pass code review
- Must include unit tests
- Must follow PowerToys coding guidelines
- Must be localized
Community Plugins
Community plugins can be:- Submitted as pull requests to the PowerToys repository
- Distributed independently (users manually install)
- Shared through community channels
Getting Started
Choose your path:Create a PowerToys Run Plugin
Learn how to create a plugin for PowerToys Run with the IPlugin interface
Create a Command Palette Extension
Build a rich extension for the next-generation Command Palette