Skip to main content

Introduction

PowerToys is a collection of Windows productivity utilities built around a modular plugin architecture. The system consists of a central runner application that loads and manages individual PowerToy modules, each implementing a standardized interface.

Core Architecture

Module Types

PowerToys supports four distinct module types, each designed for different interaction patterns:

1. Simple Modules

Modules entirely contained within the module interface DLL with no external UI. Characteristics:
  • Implements PowertoyModuleIface directly
  • No separate application process
  • Minimal memory footprint
  • Direct integration with runner
Example: Find My Mouse
Reference: src/modules/MouseUtils/FindMyMouse/dllmain.cpp

2. External Application Launchers

Modules that start separate application processes for UI or complex operations. Characteristics:
  • Module interface DLL launches external executable
  • Communication via Named Pipes or Windows Events
  • Separate process lifecycle management
  • Can be WPF, WinUI3, or Win32 applications
Example: Color Picker
Reference: src/modules/colorPicker/ColorPicker/dllmain.cpp

3. Context Handler Modules

Shell extensions that integrate with Windows Explorer context menus. Characteristics:
  • COM-based shell extensions
  • Right-click context menu entries
  • Windows 11 integration via MSIX packaging
  • Registered/unregistered via enable/disable
Examples:
  • Power Rename - Bulk file renaming from context menu
  • Image Resizer - Batch image resizing
  • File Locksmith - Shows what’s using a file
Reference: src/modules/powerrename/dll/dllmain.cpp

4. Registry-Based Modules

Modules that register Windows preview handlers and thumbnail providers. Characteristics:
  • Modify Windows registry during enable/disable
  • Preview handlers for File Explorer
  • Thumbnail providers for file icons
  • No active process running
Examples:
  • Monaco Preview - Code file previews
  • SVG Preview - SVG file previews
  • Markdown Preview - Markdown file previews
  • PDF Preview - PDF file previews
Reference: src/modules/previewpane/powerpreview/dllmain.cpp

Communication Patterns

Runner ↔ Settings UI

Bi-directional JSON messages over Windows Named Pipes:
Message Types:
  • ShowYourself - Display Settings UI page
  • Module Settings - Configuration changes
  • Restart Required - Elevation or restart needed
  • Update Available - Update notification
Reference: doc/devdocs/core/runner.md:66-111

Runner ↔ Modules

Direct function calls via module interface:
Reference: src/modules/interface/powertoy_module_interface.h

Settings UI ↔ Modules

Indirect communication through Runner or file system:
  1. Via Runner IPC (Most modules)
    • Settings UI → Runner (JSON via pipe)
    • Runner → Module (set_config call)
  2. Via File Watching (PowerToys Run)
    • Settings UI writes settings.json
    • Module watches file for changes
    • Module applies new settings
  3. Via Shared Files (Keyboard Manager)
    • Named mutex for synchronization
    • Shared default.json configuration
    • Module creates file if missing
Reference: doc/devdocs/core/settings/communication-with-modules.md

Build System

PowerToys uses MSBuild with custom scripts and tooling:

Project Structure

Build Process

Prerequisites:
  • Visual Studio 2022 17.4+ or Visual Studio 2026
  • Windows 10 1803+ SDK
  • Initialize submodules: git submodule update --init --recursive
Build Commands:
Build Logs:
  • build.<config>.<platform>.errors.log - Errors only
  • build.<config>.<platform>.all.log - Complete build log
  • build.<config>.<platform>.trace.binlog - MSBuild binary log
Reference: tools/build/BUILD-GUIDELINES.md

Common Dependencies

C++ Modules:
  • SPD logs - Centralized logging system
  • C++/WinRT - Windows Runtime APIs
  • Common utilities - src/common/ folder
  • Settings API - src/common/SettingsAPI/
C# Modules:
  • Microsoft.PowerToys.Settings.UI.Library - Settings utilities
  • Common.UI - WPF/WinForms dependencies
  • Interop library - C++/C# communication
Reference: doc/devdocs/core/architecture.md:35-42

Resource Management

Localization

C++ Modules:
  • Resource files (.resx) converted to .rc format
  • Use conversion tools before building
  • String resources in .rc files
WPF Applications:
  • Use .resx files directly
  • Managed resource system
WinUI 3 Applications:
  • Use .resw files
  • PRI (Package Resource Index) file generation
  • Must override default PRI names to avoid conflicts
Reference: doc/devdocs/core/architecture.md:43-55

DLL Flattening

The Runner flattens DLLs to ensure consistent versions:
  • All module DLLs copied to runner directory
  • WinUI 3 apps separated in WinUI3Apps folder
  • Prevents version conflicts between modules
  • Simplifies deployment
Reference: doc/devdocs/core/runner.md:18-19

Group Policy Support

Modules can be controlled via Group Policy Objects (GPO):
Policy States:
  • gpo_rule_configured_enabled - Force enabled
  • gpo_rule_configured_disabled - Force disabled
  • gpo_rule_configured_not_configured - User choice
Reference: doc/devdocs/core/settings/gpo-integration.md

Telemetry and Logging

Logging

C++ Modules:
C# Modules:

Telemetry

Modules implement telemetry to track usage and settings:
  • Settings changes
  • Feature activation
  • Error conditions
  • Performance metrics
Reference: doc/devdocs/core/settings/telemetry.md

Startup Sequence

The Runner initialization follows this sequence:
Reference: doc/devdocs/core/runner.md:24-35, src/runner/main.cpp:181-200

Next Steps

Runner Implementation

Deep dive into the PowerToys Runner architecture

Module Interface

Learn how to implement a PowerToys module

Settings System

Understand the settings architecture and IPC

Common Libraries

Shared utilities and helper functions