github microsoft/PowerToys v0.99.0
Release v0.99.0

7 hours ago

Hero image of what's new in version 0.99

Installer Hashes

Description Filename sha256 hash
Per user - x64 PowerToysUserSetup-0.99.0-x64.exe 1E3586A2ECD454B86FE61C44B003E0027FCC24DCB5135958B73D04A58285618C
Per user - ARM64 PowerToysUserSetup-0.99.0-arm64.exe 2BCA2A1EDB0077FAF752DDE95C8D02A0A7A70F8E5128F43EA58432BBBE4E3C62
Machine wide - x64 PowerToysSetup-0.99.0-x64.exe 47D193F77A99FFB606A5E7132B0736BB0FB86BED6F30D68C4269DBDD6928C0AF
Machine wide - ARM64 PowerToysSetup-0.99.0-arm64.exe B9E9CDDBFE17F785A1A05420636AD716A323FC26B8D55D3B554879BB1F0BF2E8

Highlights

PowerToys 0.99 introduces Power Display for controlling your monitors from the system tray, Grab And Move for quickly moving and resizing windows, and a wave of improvements to Command Palette and the Dock, along with updates across the utility suite.


⚠️ Update: We’re aware of a crash in PowerToys 0.99 when launching Command Palette on some machines and are working on a hotfix. More info: #47249 ⚠️



🪟 Introducing Grab And Move - drag and resize windows from anywhere (Preview)

This release introduces Grab And Move, a new utility that lets you drag and resize windows without having to target the title bar or window edges. Hold Alt + Left Click anywhere on a window to drag it, or Alt + Right Click to resize it from wherever your cursor is. For users who already use Alt as a system modifier, you can now choose to use the Win key instead.

GrabAndMove

Grab And Move is ideal for large monitors or windows that have moved off-screen, and it integrates with the existing Settings experience including GPO policy support, an OOBE page, and a modifier-agnostic configuration UI.

#47024 by @foxmsft



🖥️ Meet Power Display: control your monitors right from the system tray (Preview)

Meet Power Display, a new utility that lets you control your hardware monitors right from the system tray. Once enabled, you can open the flyout from the tray icon or a configurable shortcut to quickly access your connected monitors. Power Display automatically detects your displays and, if supported, lets you adjust settings like volume, brightness, contrast, and color profile. No more reaching for those hard to find buttons on the back of your screen!

PowerDisplay

You can also create profiles to quickly switch between different setups with a single click. Profiles can be configured in Settings and will appear directly in the flyout for easy access.

Profiles

Lastly, Power Display profiles can now be automatically switched with Light Switch. In the Light Switch settings, you can select a profile as an action, making it easy to adjust your monitor settings based on the current light or dark theme.


⚡ Command Palette: Compact Dock, Calculator history, and reliability

This release brings a large set of fixes and improvements to Command Palette and the Dock. Alongside a wide range of performance and stability improvements, this release also introduces new capabilities, including support for plain text and image viewer content types for extensions, making it possible to display raw text and zoomable images directly in the content pane, as well as a persistent calculator history with options to save, reuse, delete, and clear entries, plus a configurable primary action and the ability to replace the query on enter.

We've also made several improvements to the Dock experience. You can now choose to keep the Dock always on top of other windows. When the Dock is positioned at the top or bottom of the screen, a new Compact mode is available, offering a more condensed layout that hides the subtitle!

Compact mode

Pinning has also been improved. When you pin a command from Command Palette, a new dialog lets you choose where it appears in the Dock and whether to show or hide the title and subtitle.

Pin

This release also fixes two separate typing-crash scenarios, hardens extension loading so one faulty extension no longer takes down the whole list, improves indexer search with filename broadening and Windows Search availability indicators, and adds Windows Terminal profile pinning with per-profile icons.

Massive thanks to @jiripolasek for the sustained Command Palette work across this release!



⌨️ Keyboard Manager improvements

In the last release, we introduced a new Keyboard Manager Editor that makes it easier to create and manage remappings. In this release, we are refining that experience further. You can now manually tweak recorded keys. After recording a remapping, each key becomes a dropdown, allowing you to adjust it or select keys that may not exist on your physical keyboard.

KBM1

We also added a new action called Disabled, which lets you quickly disable specific keys or shortcuts.

KBM2

We also fixed an important issue with multi line text replacement, significantly improving reliability in chat apps and plain text editors.



🔍 ZoomIt gets scrolling screenshots

ZoomIt also brings several enhancements to productivity and capture workflows. You can now take scrolling screenshots, making it easier to capture long pages or content that extends beyond the visible screen. We've also added text extraction directly when snipping, so you can quickly grab and reuse text without extra steps. In addition, the break timer has been improved with a new screen saver mode, helping you step away and take breaks more effectively.



🧩 Other notable changes

  • Image Resizer: The UI has been migrated from WPF to WinUI 3, bringing a more modern look and improved consistency with the rest of PowerToys.
  • Advanced Paste: Fixed auto-copy failing on Electron/Chromium apps like Teams and VS Code by releasing held modifier keys before injecting Ctrl+C.
  • Settings: Multiple UI and usability improvements across different utilities.
  • General: Streamlined default module states so new installations start with a lighter initial experience
  • System tray icon: We've updated the monochrome PowerToys system tray icon and added a badge that appears when an update is available.

Full release notes

Advanced Paste

  • Eliminated 13 XAML compiler warnings by switching x:Bind expressions on non-observable properties from OneWay to OneTime mode in #46726
  • Fixed auto-copy failing on Electron/Chromium apps (e.g. Teams, VS Code) by releasing held modifier keys before injecting Ctrl+C in #46486

Always On Top

  • Fixed the pin/unpin sound playing even when the operation failed by gating sound playback on whether SetWindowPos actually succeeded in #46910

Command Palette

Dock

  • Added a new pin-to-Dock dialog that gives users more control over how commands are pinned, replacing the previous one-click pin behavior in #46436. Thanks @niels9001!
  • Added a Compact Dock mode (28px tall, subtitle hidden) for Top/Bottom dock positions, and hid the Dock Size setting for Left/Right positions in #46699
  • Made the Dock window stay on top of all other windows by default, automatically yielding when a full-screen app is detected in #46163. Thanks @jiripolasek!
  • Decoupled the Dock context menu from the Command Bar's active item so it no longer updates when a different list item is selected, and made the Dock search box position follow the Dock position in #46420. Thanks @jiripolasek!
  • Fixed duplicate dock bands caused by missing duplicate check when pinning in #46438
  • Fixed a build-breaking merge inconsistency in DockWindow.xaml.cs in #46639. Thanks @jiripolasek!
  • Fixed the Dock not reflecting pin/unpin changes until restart in #47169
  • Fixed the Dock window showing a visible frame on startup by hiding the DWM border during window creation in #47187

Extensions & SDK

  • Added plain text viewer and image viewer IContent types to the extension SDK in #43964. Thanks @jiripolasek!
  • Added persistent calculator history with save, reuse, delete, and clear actions, configurable primary action, and replace-query-on-enter behavior in #45307. Thanks @jiripolasek!
  • Added a NetworkSpeedUnit choice setting to the Performance Monitor extension (bits/s, decimal bytes/s, IEC binary bytes/s) in #46320. Thanks @niels9001!
  • Enabled dock pinning of Windows Terminal profiles with per-profile icons, and hardened GUID parsing so a malformed profile entry no longer breaks the whole list in #46372
  • Assigned stable IDs to FancyZones layout commands in the PowerToys extension so users can pin individual layouts to the dock in #46198. Thanks @vanzue!
  • Hardened the Performance Monitor extension with exception handling and crash recovery via a sentinel file mechanism in #46541. Thanks @jiripolasek!
  • Gave each built-in extension its own settings file with transparent one-time migration from the legacy shared settings.json in #46685. Thanks @michaeljolley!
  • Shipped Copilot instructions and 5 skills (publish-extension, add-adaptive-card-form, add-extension-settings, add-dock-band, add-fallback-commands) inside the extension template in #46683. Thanks @niels9001!
  • Fixed invisible/corrupted icons in newly created extensions by extracting template expansion into a dedicated service that no longer rewrites binary files in #46490. Thanks @jiripolasek!
  • Fixed a Watson crash where a single extension in a bad state would kill the entire extension-loading loop in #47032
  • Fixed right-click context menus failing to open on the first attempt for slow out-of-process third-party extensions in #46626. Thanks @jiripolasek!
  • Fixed the Settings toggle for disabling fallback commands from out-of-process extensions by switching the type check from a concrete class to the WinRT interface in #47127
  • Simplified the Time & Date extension page to recalculate results on every query rather than caching, breaking a potential infinite update loop in #46396. Thanks @jiripolasek!
  • Fixed Calculator extension unit tests failing under non-English cultures in #46911. Thanks @niels9001!

Search & Indexer

  • Improved indexer search with implicit filename broadening for plain free-text queries, retry-with-literal matching for punctuation-heavy searches, and a Windows Search availability indicator in #46907. Thanks @jiripolasek!
  • Fixed a crash when converting large calculator results to hex/oct/bin by switching the secondary-results base conversion to BigInteger with a custom base converter in #46176. Thanks @jiripolasek!
  • Split the full-screen shortcut guard into separate full-screen and busy checks with an opt-in IgnoreShortcutWhenBusy setting, added a live diagnostic InfoBar, and introduced an opt-in triple-press breakthrough to bypass suppression in #45891. Thanks @jiripolasek!
  • Fixed the Window Walker Close window command to respect the "Keep open after closing window" setting and automatically refreshed the window list in #45721. Thanks @jiripolasek!

Reliability & UX

  • Fixed a 100% reproducible crash when typing in the search box by adding a reentrancy guard around filtered-items mutations in #47148. Thanks @MuyuanMS!
  • Fixed a second typing crash that occurred when the indexer fallback was enabled by correcting a P/Invoke function signature in #47186
  • Hardened ListViewModel item-fetch synchronization with copy-on-write cache publication, latest-fetch-wins semantics, and improved cancellation cleanup in #46429. Thanks @jiripolasek!
  • Refactored settings and app state to be immutable end-to-end to eliminate concurrency race conditions in #46451. Thanks @michaeljolley!
  • Added a CanGoBack guard to Frame.GoBack, preventing a crash when navigating back with an empty navigation stack in #46493. Thanks @jiripolasek!
  • Fixed duplicate and contradictory Pin to Dock/Unpin from dock context menu entries appearing on top-level home-page items in #46458. Thanks @michaeljolley!
  • Prevented PgUp/PgDown paging from landing on non-interactive entries like separators and section headers in #46439. Thanks @jiripolasek!
  • Fixed keyboard focus restoration on the Extensions settings page so Shift+Tab returns to the previously selected extension card in #45903. Thanks @jiripolasek!
  • Reverted focus-restoration on the Extensions settings page that was causing clicks to open the wrong extension item in #46642. Thanks @jiripolasek!
  • Fixed inline code (backtick text) in the Details and Content panels being invisible on light-theme backgrounds in #46739. Thanks @michaeljolley!
  • Fixed the Window Walker "Not Responding" tag being illegible in dark mode in #46924. Thanks @niels9001!
  • Fixed a WinUI layout bug where the settings page content was visually offset when wrapped in a ScrollViewer with MaxWidth in #46568
  • Fixed a regression in PinToDockDialogContent.xaml where a type rename was missed during a merge gap in #46599. Thanks @jiripolasek!
  • Fixed a screen reader accessibility issue where the Alias text box announced "Enter Alias" instead of just "Alias" in #45906
  • Added screen reader announcements for shortcut key information on the settings button in #46164. Thanks @chatasweetie and @jiripolasek!
  • Removed redundant container-level tab stops in the details panel for improved keyboard accessibility in #46346. Thanks @chatasweetie!

Infrastructure & Code Quality

  • Extracted persistence and file I/O logic from SettingsModel and AppStateModel into dedicated service classes in #46312. Thanks @michaeljolley!
  • Introduced CmdPalLogger, CmdPalLoggerProvider, and an extension method integrating Microsoft.Extensions.Logging with ManagedCommon.Logger in #46768. Thanks @michaeljolley!
  • Bumped all CommunityToolkit.WinUI packages from 8.2.250402 to 8.2.251219 and removed three SearchBar workaround hacks in #46027. Thanks @niels9001!
  • Enabled telemetry event firing correctly in AOT builds by adding EventSourceSupport in #47121
  • Updated the extension solution filter files to include new transitive dependencies and added a leaner SLNF for faster developer builds in #46896. Thanks @jiripolasek!
  • Updated the Microsoft.CmdPal.Ext.PowerToys solution filter file to include missing project dependencies in #46136. Thanks @jiripolasek and @vanzue!
  • Removed a legacy workaround for FontIconSource.CreateIconElement (fixed in WinAppSDK 1.8.4) in #45790. Thanks @jiripolasek!
  • Moved developer documentation to doc/devdocs/modules/cmdpal to align with other PowerToys modules in #46926. Thanks @niels9001!
  • Bumped Command Palette version to 0.10 in #47181

Image Resizer

  • Migrated Image Resizer from WPF to WinUI 3, unblocking future AOT compilation and aligning with Windows 11 design language in #45288. Thanks @moooyo and @niels9001!
  • Restored honoring the user-configured JPEG quality setting when resizing JPEGs, which had been silently ignored at a fixed ~Q90 default after the WinUI 3 migration in #47134
  • Fixed missing PNG encoder settings by applying codec-specific encoder properties in the transcode path in #46695. Thanks @moooyo!
  • Fixed a regression where JsonPropertyName attributes were not forwarded by the ObservableProperty generator, restoring correct JSON serialization in #47056

Keyboard Manager

  • Reverted multiline text replacement back to character-by-character sending with Shift+Enter for newlines, fixing multiline replacements in chat apps and plain editors in #46794
  • Addressed code review feedback on manual key selection: fixed localization, centralized VK_DISABLED constants, added validation for disable mappings, fixed dropdown revert logic, and plugged Process handle leaks in #46377

Light Switch

  • Fixed Light Switch and PowerDisplay integration by re-enabling the Apply monitor settings expander and disabled-warning InfoBar in Settings, and ensuring every hotkey press notifies PowerDisplay instead of only every other press in #47190

Mouse Utilities

  • Refactored PadImage in PowerOCR (Text Extractor) to improve memory management and nullability clarity in #44906. Thanks @adelobosko!

Peek

  • Added auto-detection of file name encoding when previewing zip files, fixing garbled text for archives created on non-UTF-8 systems in #44799. Thanks @oxygen-dioxide!

Power Display

  • Re-enabled the PowerDisplay module with a new icon/logo, DPI fixes, UI/UX improvements, and installer integration in #46489
  • Cleaned up the PowerDisplay module by fixing resource leaks, removing dead code, converting a recursive parser to iterative, and changing the default activation shortcut to Win+Ctrl+Shift+P in #46979
  • Fixed thread safety by marking shared fields as volatile, guarding color temperature writes behind a capability check, and correcting a misleading log message in #47008
  • Fixed PowerDisplay startup restore, volume initialization, and Identify window lifecycle in #47051
  • Introduced a shared flyout positioning helper used by PowerDisplay and Quick Access, fixing taskbar overlap at 100% scaling and off-screen rendering after DPI changes in #47097
  • Polished Power Display by standardizing the module name, shrinking the flyout slightly, and removing dead code in #47163

PowerToys Run

  • Fixed a command breakout in the Shell plugin by escaping double quotes in the command string, while still allowing environment variables to expand in #45554. Thanks @RinZ27!
  • Removed unused XAML namespace declarations from PowerLauncher XAML files in #46221. Thanks @niels9001!

Quick Accent

  • Added subscript and superscript Unicode characters to the Special Characters set for keys 0-9, A, E, N, X, Y, Z, and math operators in #45540. Thanks @Salehnaz!
  • Added the missing Icelandic accented letter í to the VK_I key definition in #46424. Thanks @squirrelslair!
  • Added Shift+N capitalization support for superscript Latin small letter n in #46571. Thanks @PesBandi!
  • Restored the en-dash character under the VK_MINUS key in the Special Characters set in #47106
  • Fixed the default "All available" language setting silently falling back to a small character set due to parsing issues, added case-insensitive parsing with invalid-entry warnings, and added two new Hungarian character mappings in #47117. Thanks @daverayment!

Settings

  • Fixed the Settings shortcut/key visuals so arrow glyphs (up/down/left/right) render as proper FontIcon glyphs instead of literal text in #46454. Thanks @vanzue!
  • Formatted the last checked for updates timestamp as friendly relative strings (Today at 1:22 PM, Yesterday at 3:45 PM) in #46923
  • Fixed Dashboard layout issues by removing excessive empty scroll space, restoring responsive behavior, and correcting a 1-pixel vertical alignment mismatch in #46922
  • Fixed the Quick Accent character-sets grid being clipped and showing an inner horizontal scrollbar, so the list reflows from 3 to 2 to 1 columns on resize in #45986. Thanks @daverayment!
  • Renamed the shortcut conflict checkbox label from "Ignore shortcut" to "Ignore conflict" for clarity in #46318
  • Fixed the backup folder path being visually clipped on the General and Image Resizer pages in #46920
  • Refreshed Settings UI assets and copy: fixed a ZoomIt page regression, updated the Command Palette settings page with current links and screenshots, and added missing overview screenshots in #47132
  • Fixed missing images in the Settings UI by adjusting the project file so image assets are packaged correctly in #47165
  • Tweaked wording on a handful of Settings strings for clarity and consistency in #47164

Text Extractor

  • Removed the third-party WPF-UI library in favor of native WPF Fluent theming with custom control templates in #46218

Window Manager (Grab And Move)

  • Added the Grab And Move module enabling Alt+Left Click window dragging and Alt+Right Click window resizing, without needing to target title bars in #47024
  • Unstuck the Alt key after Ctrl+Alt+Del or Alt+Tab into an admin process, made Win selectable as the move/resize activation modifier, and made the window geometry readout opaque in #47052. Thanks @foxmsft!
  • Updated Grab And Move Settings strings to be modifier-agnostic now that Win is selectable alongside Alt in #47178

ZoomIt

  • Added panoramic/scrolling screenshot capture, text extraction when snipping, and break timer improvements with screen saver mode and optional computer lock in #46506. Thanks @foxmsft, @MarioHewardt, and @markrussinovich!
  • Fixed ZoomIt x86 build compatibility by emulating the _mm_cvtsi128_si64 intrinsic with _mm_storel_epi64 for 32-bit targets in #46529. Thanks @foxmsft!

Development

  • Added a full OOBE page for Grab And Move, high-resolution icons and overview images for both Grab And Move and PowerDisplay, NEW badges on Settings nav items, and refreshed the README utilities table in #47033
  • Added an update-available badged tray icon, a new "Update available" tray menu entry that opens Settings to General, and raised the update InfoBar severity to Warning in #47030
  • Updated the dark-mode PowerToys tray icons to use the correct shade of black for the outline in #47166
  • Changed default-on state for new installations by disabling 7 modules by default to streamline the initial experience for new users in #47027
  • Added explicit default-disabled overrides to eight module interfaces so the native Runner defaults match the managed enabled-modules list, eliminating first-launch enable/disable flicker in #47144
  • Updated the Windows Implementation Library (WIL) from 1.0.231216.1 to 1.0.250325.1 via Central Package Management in #43503
  • Fixed the build.ps1 script so the -RestoreOnly switch works correctly and added support for the newer .slnf solution filter file format in #46012. Thanks @raycheung!
  • Upgraded the check-spelling CI action to v0.0.26 which fixes spell-check failures on fork PRs and updates exclusion patterns in #46851. Thanks @jsoref!
  • Refreshed the check-spelling action to 0.0.26 and synced dictionaries, patterns, and expect/reject lists across docs, source, and resource files in #47119. Thanks @jsoref!
  • Pinned the check-spelling GitHub Action to v0.0.26 to attempt to fix the CI pipeline blocking PRs from forked repositories in #46746
  • Reverted the pinning of the check-spelling action after determining that the pin was unrelated to the pipeline issue in #46749. Thanks @moooyo!
  • Added contributor names from a recent PR to the spellchecker allow-list to prevent CI spelling errors in #46765. Thanks @jiripolasek!
  • Added comprehensive DSC (Desired State Configuration) documentation with per-module reference pages, settings examples, and an overview guide covering 25+ PowerToys modules in #42554. Thanks @Gijsreyn!
  • Cleaned up root-folder Markdown files by consolidating bullet styles, fixing spelling and grammar, converting HTML to Markdown, and applying sentence-case headers in #46582. Thanks @Jay-o-Way!
  • Documented three missing telemetry events (ModuleLaunchedFromSettings, CmdPal_DockConfiguration, KeyboardManager_LaunchEditor) in #46371
  • Added telemetry event logging to CLI entry points for FileLocksmith, Awake, and Image Resizer so command-line invocations are tracked alongside GUI usage in #46872. Thanks @MuyuanMS!
  • Added 75+ MSTest unit tests covering Hosts ValidationHelper (IPv4/IPv6/hostname validation) and ColorPicker ColorFormatHelper conversions (CMYK, HSB/HSI/HWB, CIE XYZ/LAB, Oklab/Oklch, sRGB-linear, NCol) in #46679
  • Fixed MSTEST0017 analyzer warnings by correcting assertion argument order in 22 Assert calls across 8 test files in #46712
  • Fixed a CI test hang where Common.Interop.UnitTests.TestSend could block for 80 minutes when a prior run left a named-pipe handle alive, by ensuring pipe names are unique per run and bounding handshake waits in #47123
  • Resolved StyleCop SA1614, SA1616, SA1622, and SA1623 warnings across Command Palette, Power Display, Settings UI, DSC, and Extensions Toolkit code in #46706, #46707, #46717, #46718
  • Bumped the azure/login GitHub Action from v2 to v3 in the MS Store submissions workflow in #46323
  • Bumped the azure/cli GitHub Action from v2 to v3 in the MS Store submissions workflow in #46562

Don't miss a new PowerToys release

NewReleases is sending notifications on new releases.