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
PowertoyModuleIfacedirectly - No separate application process
- Minimal memory footprint
- Direct integration with runner
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
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
- Power Rename - Bulk file renaming from context menu
- Image Resizer - Batch image resizing
- File Locksmith - Shows what’s using a file
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
- Monaco Preview - Code file previews
- SVG Preview - SVG file previews
- Markdown Preview - Markdown file previews
- PDF Preview - PDF file previews
src/modules/previewpane/powerpreview/dllmain.cpp
Communication Patterns
Runner ↔ Settings UI
Bi-directional JSON messages over Windows Named Pipes:- ShowYourself - Display Settings UI page
- Module Settings - Configuration changes
- Restart Required - Elevation or restart needed
- Update Available - Update notification
doc/devdocs/core/runner.md:66-111
Runner ↔ Modules
Direct function calls via module interface:src/modules/interface/powertoy_module_interface.h
Settings UI ↔ Modules
Indirect communication through Runner or file system:-
Via Runner IPC (Most modules)
- Settings UI → Runner (JSON via pipe)
- Runner → Module (
set_configcall)
-
Via File Watching (PowerToys Run)
- Settings UI writes
settings.json - Module watches file for changes
- Module applies new settings
- Settings UI writes
-
Via Shared Files (Keyboard Manager)
- Named mutex for synchronization
- Shared
default.jsonconfiguration - Module creates file if missing
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.<config>.<platform>.errors.log- Errors onlybuild.<config>.<platform>.all.log- Complete build logbuild.<config>.<platform>.trace.binlog- MSBuild binary log
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/
- Microsoft.PowerToys.Settings.UI.Library - Settings utilities
- Common.UI - WPF/WinForms dependencies
- Interop library - C++/C# communication
doc/devdocs/core/architecture.md:35-42
Resource Management
Localization
C++ Modules:- Resource files (
.resx) converted to.rcformat - Use conversion tools before building
- String resources in
.rcfiles
- Use
.resxfiles directly - Managed resource system
- Use
.reswfiles - PRI (Package Resource Index) file generation
- Must override default PRI names to avoid conflicts
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
WinUI3Appsfolder - Prevents version conflicts between modules
- Simplifies deployment
doc/devdocs/core/runner.md:18-19
Group Policy Support
Modules can be controlled via Group Policy Objects (GPO):gpo_rule_configured_enabled- Force enabledgpo_rule_configured_disabled- Force disabledgpo_rule_configured_not_configured- User choice
doc/devdocs/core/settings/gpo-integration.md
Telemetry and Logging
Logging
C++ Modules:Telemetry
- Settings changes
- Feature activation
- Error conditions
- Performance metrics
doc/devdocs/core/settings/telemetry.md
Startup Sequence
The Runner initialization follows this sequence: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