Skip to main content

Overview

Command Palette (CmdPal) is an extensible, modern command launcher that serves as the next iteration of PowerToys Run. With extensibility at its core, it provides a unified interface to start anything, run commands, and interact with system features through a plugin architecture.
Command Palette is currently in preview. The API may introduce breaking changes before reaching v1.0.0 stability.

Activation

1

Enable Command Palette

Open PowerToys Settings and enable Command Palette
2

Open Launcher

Press the activation shortcut: Win+Alt+Space (default)
3

Start Typing

Enter commands, search queries, or action triggers

Key Features

Extensible Architecture

Extension System

WinRT-based plugin interfaceLanguage-agnostic extension development

Command Providers

Custom command sourcesIntegrate any data or action

Page Extensions

Full UI extensionsCustom interfaces within palette

Native Integration

Built-in PowerToys commandsSystem-level integration

Extension Development

Create extensions in any language supporting WinRT:
// Example C# extension structure
using Microsoft.CommandPalette.Extensions;

public class MyExtension : ICmdPalExtension
{
    public string DisplayName => "My Extension";
    public string Description => "Custom functionality";
    
    public IListPage GetListPage()
    {
        // Return command list
    }
    
    public IEnumerable<ICommandItem> GetCommands(string query)
    {
        // Return matching commands
    }
}
API Documentation: Microsoft Learn - Command Palette Extensibility

Built-in Features

Command Palette includes these capabilities out of the box:
  • Launch installed applications
  • Search Start Menu items
  • Open UWP and Win32 apps
  • Recent app suggestions

Creating Extensions

The fastest way to create an extension:
1

Run Create Command

Open Command Palette and run “Create extension”
2

Provide Details

Enter project name, display name, and output directory
3

Open Solution

Navigate to the generated .sln file and open in Visual Studio
4

Build & Deploy

Build the project - it automatically deploys to Command Palette

Configuration

Activation Shortcut

activation_shortcut
hotkey
default:"Win+Alt+Space"
Global hotkey to open Command PaletteConfigurable in PowerToys Settings

Extension Management

Manage installed extensions:
  1. Open Command Palette
  2. Type “extensions” or “plugins”
  3. View installed extensions
  4. Enable/disable individual extensions
  5. Configure extension settings

Search Behavior

max_results
number
default:"10"
Maximum number of results to display
search_delay_ms
number
default:"150"
Debounce delay for search queries (milliseconds)
fuzzy_matching
boolean
default:"true"
Enable fuzzy search for command matching

Use Cases

Quick Actions

Fastest way to open applications:
1. Press Win+Alt+Space
2. Type: "vscode"
3. Press Enter
→ Visual Studio Code opens
Quick math without opening calculator:
Win+Alt+Space → "= 1234 * 56" → Enter to copy result
Jump to files and folders:
Win+Alt+Space → "documents\report" → Open location

Developer Workflows

# Custom extension for Git repos
Win+Alt+Space
→ "repo project-name"
→ Opens in VS Code

System Management

Settings Access

Quick access to Windows settingsWin+Alt+Space → "settings display"

PowerToys Control

Manage PowerToys utilitiesWin+Alt+Space → "powertoys color picker"

Process Management

Extension for task managementCustom commands for process control

Power Options

Quick power commandsShutdown, restart, sleep actions

Custom Integrations

Examples of custom extensions:
  • API Testing: Quick REST API calls
  • Cloud Services: Interact with Azure, AWS, etc.
  • Database Queries: Run quick database lookups
  • Documentation: Search local documentation
  • Snippets: Insert code snippets
  • DevOps: Trigger CI/CD pipelines

Extension Development

Getting Started

1

Install Prerequisites

  • Visual Studio 2022+ with C++ and .NET workloads
  • Windows SDK 10.0.26100.0+
  • PowerToys installed
2

Create Extension Project

Use the “Create extension” command in Command PaletteOr manually with project template
3

Implement Interface

Implement ICmdPalExtension interface:
public class MyExtension : ICmdPalExtension
{
    public string DisplayName { get; }
    public IExtensionIcon Icon { get; }
    public IListPage GetPage() { }
}
4

Build & Test

Build project - extension auto-deploys to Command PaletteTest immediately in running instance

Extension Types

Provide searchable commands:
public class MyCommandProvider : ICommandProvider
{
    public IEnumerable<ICommandItem> GetCommands(string query)
    {
        // Return matching commands
        yield return new CommandItem
        {
            Name = "My Command",
            Description = "Does something",
            Icon = myIcon,
            Action = () => ExecuteCommand()
        };
    }
}

Extension Packaging

Package and distribute extensions:
<!-- Extension manifest -->
<Package>
  <Identity Name="MyExtension" Version="1.0.0" />
  <DisplayName>My Command Palette Extension</DisplayName>
  <Description>Custom commands for X</Description>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" />
  </Dependencies>
</Package>

Sample Extensions

Official samples in repository:
  • Generic samples: src/modules/cmdpal/ext/SamplePagesExtension
  • Real-world samples: src/modules/cmdpal/ext/ProcessMonitorExtension
  • Shipped extensions: GitHub - CmdPalExtensions
Source reference: src/modules/cmdpal/README.md:48

Technical Details

Architecture

Key Projects

ProjectPurpose
Microsoft.CmdPal.UIMain Command Palette application
Microsoft.CommandPalette.ExtensionsExtension interface (language-agnostic WinRT)
Microsoft.CommandPalette.Extensions.ToolkitC# helper library for extensions
SampleExtensions/*Example extension implementations
Build location: src/modules/cmdpal

Extension SDK

The extension interface is designed to be language-agnostic:
// WinRT interface allows implementation in:
// - C#
// - C++/WinRT
// - Rust (with windows-rs)
// - Python (with pythonnet)
// Any language with WinRT support
SDK Spec: src/modules/cmdpal/doc/initial-sdk-spec/initial-sdk-spec.md

Extension Discovery

Command Palette discovers extensions through:
  1. Installation Directory: %LOCALAPPDATA%\Microsoft\PowerToys\CommandPalette\Extensions
  2. Package Registration: Windows package registration
  3. Development Mode: Direct DLL loading for debugging

Keyboard Shortcuts

Global

ShortcutAction
Win+Alt+SpaceOpen Command Palette (default)

In Command Palette

ShortcutAction
Type to searchFilter commands
/ Navigate results
EnterExecute selected command
EscClose Command Palette
TabAuto-complete / Next field
Shift+EnterAlternative action (if available)
Ctrl+[Number]Quick select result

Troubleshooting

Check:
  • PowerToys is running
  • Command Palette enabled in settings
  • Shortcut not conflicting
Debug:
  • Check PowerToys logs
  • Try alternate activation shortcut
  • Restart PowerToys
Verify:
  1. Extension built successfully
  2. Extension in correct directory
  3. Extension manifest valid
  4. Dependencies installed
Location: %LOCALAPPDATA%\Microsoft\PowerToys\CommandPalette\ExtensionsLogs: Check Command Palette logs for load errors
Steps:
  1. Disable extension
  2. Review extension error handling
  3. Check exception logs
  4. Debug extension in Visual Studio
Best practices:
  • Wrap extension code in try-catch
  • Validate all inputs
  • Handle async operations properly
Check:
  • Extension implementing search correctly
  • Query parsing logic
  • Result filtering
  • Performance (timeout issues)
Performance tip: Return results quickly, use async for slow operations

See Also

Build docs developers (and LLMs) love