* fix: repair popup install binding, dialog titles, presets switch, radio groups, JSON, tests - Invoke-WPFInstall: add param block so the right-click app popup binds -PackagesToInstall. It previously dropped the argument into $args and installed the whole selected list instead of the clicked app (or warned that nothing was selected). - Replace undefined $AppTitle with "WinUtil" in Install/UnInstall warning boxes, matching the XAML window title and sibling dialogs. - tweaks.json: remove stray nested "link" inside the WPFToggleScrollbars registry entry (dead property; registry entries expose only the six consumed fields). - Invoke-WPFPresets: fix dead switch cases to the wildcard-pattern convention so selectedFeatures/selectedToggles clear correctly. - Invoke-WPFUIElements: store the group StackPanel in radioButtonGroups so grouped radio buttons share one container (else branch was unreachable). - sanity.Tests.ps1: pass the Windows PowerShell parser script via -EncodedCommand; -Command string marshaling corrupted backticks/quotes and produced false parse failures. - install-workflow.Tests.ps1: remove the AppTitle workaround and update title assertions to "WinUtil"; drop orphaned cleanup lines. - Add CHANGES.md with technical and plain-language explanations. Verified: each bug reproduced against HEAD, fixes demonstrated to change behavior, full Pester suite 471/471. * Delete * test: cover the explicit popup install parameter path Add a regression test invoking Invoke-WPFInstall -PackagesToInstall with a package different from the default sync.selectedApps selection and assert the runspace receives the explicit object, mirroring the Initialize-WPFUI popup call shape. Existing default-path coverage is unchanged.
Chris Titus Tech's Windows Utility
A curated compilation of Windows system tasks streamline installs, debloat with tweaks, troubleshoot with config, and configure Windows updates. Run it fresh on every new Windows install.
Quick Start
WinUtil must be run as Administrator Because it performs system-wide changes.
Open PowerShell or Terminal as admin, then run:
Stable Branch (recommended)
irm https://christitus.com/win | iex
Development Branch
irm https://christitus.com/windev | iex
How to open an admin terminal
- Start menu: Right-click Start → Windows PowerShell (Admin) or Terminal (Admin)
- Search: Press the
Windows key, and typePowerShellorTerminal, thenCtrl + Shift + Enter
Automation / Presets
Apply a predefined configuration without manual selection:
& ([ScriptBlock]::Create((irm https://christitus.com/win))) -Preset Standard
| Preset | Description |
|---|---|
Standard |
Balanced defaults for most users |
Minimal |
Minimal changes to suit every user |
Advanced |
Deep tweaks for power users |
To view exactly what each preset does, see: https://github.com/ChrisTitusTech/winutil/blob/main/config/preset.json
Build & Develop
See https://github.com/ChrisTitusTech/winutil/blob/main/.github/CONTRIBUTING.md
Resources
Support
- Leave a ⭐ to show support!
- EXE Wrapper for $10 @ https://www.cttstore.com/windows-toolbox
Sponsors
These are the sponsors that help keep this project alive with monthly contributions.














Contributors
Thanks to everyone who has contributed time and effort to this project. Keep rocking 🍻
