Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/microsoft/powertoys/llms.txt

Use this file to discover all available pages before exploring further.

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