* Less radical removal of apps
* Moving some applications to Selfhosted category
* Some more chess-boxing
* Document section is too small
* TG forks are too niche
* Floorp should be good
* feat: Add new multimedia tools and update existing application entries in applications.json
---------
Co-authored-by: Chris Titus <contact@christitus.com>
* Add checkbox for known issues acknowledgment
Some people do not check the link
* typo fix
Updated checkbox type to checkboxes in bug report template.
* :zombie_sound:
* :zombie_sound_2:
* AAAAAAAAAAAAAAA
* I'm tired of testing commits
* :zombie_sound_1337:
Added a description to the read issues checkbox.
* my bad
* Revert "Revert "Simplfy Invoke-WPFUltimatePerformance.ps1 (#4319)" (#4333)"
This reverts commit 419b150220.
* Refactor Invoke-WPFUltimatePerformance function to use "ChrisTitus - Ultimate Power Plan" naming and improve power plan management
* add message for laptop users
* Remove activation of "ChrisTitus - Ultimate Power Plan" during setup
* Update Invoke-WPFUpdatesdisable.ps1 to not require a restart
* Update Invoke-WPFUpdatesdisable.ps1
* Update Invoke-WPFUpdatesdefault.ps1
* Merge branch 'ChrisTitusTech:main' into patch-9
* Update applications.json
* Remove Borderless Gaming
* Update UniGetUI code for their link and winget
---------
Co-authored-by: Vaso <92270244+VasoHD@users.noreply.github.com>
* cleaned up typo, fixes, grammatical and other related fixes (#2)
* typo in Lightshot app name
* remove trailing comma in applications.json
* consistent capitalization of Windows, WinGet - only user-facing text
- includes update to devdocs-generator.ps1, so docs for tweaks modifying registry will have `Windows settings` rather than `windows settings`
* various fixes for typos, style, punctuation and capitalization
* capitalize 'AM'
* Update README.md
change formatting for GitHub UI interaction form code format (` `) to bold md
Co-authored-by: Jay <65828559+Jay-o-Way@users.noreply.github.com>
* typos and wording in docs
---------
Co-authored-by: Jay <65828559+Jay-o-Way@users.noreply.github.com>
* Add Opera, OperaGX, Ruby and Lua entries
Update applications.json to include two new browser entries (Opera, OperaGX) and two development runtime entries (Ruby, Lua).
* Remove Opera and OperaGX from applications.json
Removed entries for Opera and OperaGX from applications list.
* - Added AI-Automation download section
- Fixed typo in CONTRIBUTING.md teminal -> terminal
* Move Cursor to Development
* Move AutoHotkey back to Utilities
* removed any windows 10 reference
* update links
* page clean up
* Update _index.md
* clean up getting started page
* clean up more pages
* Update faq.md
* Update _index.md
* more clean up
* updated theme to latest version
* updated tabs to the new way
* added missing frontmatter to pages
* updated hugo version
* edited the file structure
* revert back to old way
* Update _index.md
* fix typo and made sure it was upto date
* updated docs
* clean up navbar
* Update en.yaml
* initial usb fixes
* fix full button width
* Cleanup and Verbose output for copy
* expand ui and fix clean and reset
* Add minimal driver injection
* initial driver support
* fix verbage
* fix syntax error
* create log file on iso generation
* inject to boot.wim for install
* fix single driver install issues
* fix first run probs
* cleanup injection
* improve clean up
* Fix OSCDIMG output and cleanup comments
* Fix Scrollviewer in Status Log
* large drive support and change to Exfat
* Fix BOOT for older UEFI and Add error checks for small usb drives
* fix single usb drive error
* fix: cast selections to string to prevent PSCustomObject type issues
* fix(presets): clear existing selections before importing to replace state instead of merging
* refactor(impex): warn user when exporting empty selections or importing empty config
* Tab creation
* scaffold outline for the iso tab
* autounattended creation
* inital modification success
* iso save success
* cleanup and iso improvements
* fix startmenu on new 26h2
* remove old first startup
* Fix run for use
* fix unapproved verb
* Keep step 4 output expanded
* update auto-merge
* Cleanup
* remove out-null and trailing whitespace
* explain modify and creator button
* fix scroll to end
* remove workflow change
* fix home updates
* Tab creation
* scaffold outline for the iso tab
* autounattended creation
* inital modification success
* iso save success
* cleanup and iso improvements
* fix startmenu on new 26h2
* remove old first startup
* Fix run for use
* fix unapproved verb
* Keep step 4 output expanded
* update auto-merge
* Cleanup
* remove out-null and trailing whitespace
* explain modify and creator button
* fix scroll to end
* remove workflow change
* updated workflow
* changed the commit message
* fixed spacing in copyright
i will notice these issues before committing in future lol
* Update devdocs-generator.md
* Update Invoke-WPFSystemRepair.ps1
* Update Invoke-WPFSystemRepair.ps1
* add chkdsk back in to tell users if there disk is broken
* Merge branch 'Update-Invoke-WPFSystemRepair' of https://github.com/gabinun/winutil into pr/GabiNun/4043
* add doc
* updated the gen to add a blackline under the frontmatter and added .md file in the same location with breakdown on what the script does
* copyright fix.
found out the reason why it rendered correctly on my pc and not with site builder. it was because we use --minify for the site builder and i have not been using that on the local instance
* Update pre-release.yaml
* Update en.yaml
* feat: add support for importing and exporting WPFToggle checkbox states.
* feat: add export and import
* remove unnecessary buttons from tweaks tab
* Merge branch 'main' into feature/import-export
* Merge branch 'main' into feature/import-export
* updated theme to the latest version
* Update en.yaml
* removed all the order from the docs
* add the store link
* update homepage
* add filename and line number to all the code blocks and also removed pages
* auto pull the code from the json files
* Merge branch 'main' into winutil-new-features
* the script updated linenostart=
* Delete LaptopHibernation.md
* changed autolinks to now use frontmatter instead off #heading
* updated all docs with front matter names
* Update DisableLegacyRecovery.md
this was the same as EnableLegacyRecovery file
* made sure pages have got the corrects scripts on them
* Update default.md
updated the archetype default to make sure every new page had the title and description automatically on the front matter
* Create BraveDebloat.md
* added brave debloat link to tweaks.json
* Update tweaks.json
* Update tweaks.json
* Updated winutil website
add git ignore to not upload unnecessarily file. i have also updated microwin docs and added a copyright info to the footer
* Update _index.md
* Update KnownIssues.md
* Update links
update all the links for github to the corresponding pages. i have kept the original links aswell but commented out
* update hugo workflow to use version 0.147.0
* Update en.yaml
* update hugo toml to get rid off powered by
* Update docs.yaml
* Update KnownIssues.md
* Update KnownIssues.md
* Update KnownIssues.md
* Update compatibility note for MicroWin and Ventoy
* removed quad 9 dns
* fixed all the incorrect code block in markdown file
* Replace hardcoded page lists with auto-discovery shortcode
Created a new shortcode at docs/layouts/shortcodes/autolinks.html. This enables auto-discovery when creating new Markdown files, streamlining the workflow for future documentation updates.
* updated os requirements
* Fix: retry password prompt on failure to prevent script halting
* Update Invoke-WPFInstall.ps1
* format fix
* fix: change RealTimeIsUniversal to QWord for correct UTC time sync
---------
Co-authored-by: Chris Titus <contact@christitus.com>
Co-authored-by: Chris Titus Tech <dfm.titus@gmail.com>
* New reporting tool
* Why did we EVER need to load the component store?
* Up the execution policy for default PWSH sessions
This is required to run the diagnostics script, and any script that either we create here, or the user creates later. At least we don't go too wild and use unrestricted... we use something more "safe"
* Force Panther Setup instead of MoSetup
This will increase reliability and performance. Screw the Windows 8 installer, we're back with what was used on Windows 7!
Anyway, there are problems with the new installer:
1. It is slow at everything. Some people did benchmarks of both installers. MoSetup lost to Panther (ofc). Source: https://www.reddit.com/r/Windows11/comments/1kmjavl/i_made_a_small_test_comparing_which_one_installs/
2. It is unreliable. The "Install driver to show hardware" screen that appears in some systems AND in PXE/WDS for Server 2025 is possibly, and simply, due to Setup not being able to find the install image. From BlueBox.log in MoSetup:
...
2025-12-21 10:05:43: Creating path (with ACL): [X:\$WINDOWS.~BT]...
2025-12-21 10:05:43: Creating path: [X:\$WINDOWS.~BT\Sources]...
2025-12-21 10:05:43: CBootScenarioCtrl::PopulateWorkingDir: Install.wim/swm/esd was not found!
...
Other contributors in the CTT community stated similar unreliability with borked installs.
I'm pretty sure this change will benefit everyone. We'll see how long it lasts before Microsoft f's it up.
* Improve reporting tool
Display appx package dependency full names
* Rework ADK detection
* Add revamped detection for ISO creation
* File Explorer ain't broken anymore on 26200.7462
Those incompetent developers changed WindowsAppRuntime.CBS to WindowsAppRuntime.CBS.1.6 circa 10.0.26200.7462. No wonder why direct downloads were not causing this issue; they are still based on 10.0.26200.6584. The MCT, on the other hand...
* Patch maximum version boundary
Apparently they fixed that in November. Expanding the amd64_winappsdk-cbs-stable component manifest to a XML file reveals the dark secret:
<registryKeys>
<registryKey keyName="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications\Microsoft.WindowsAppRuntime.CBS.1.6_6000.653.2246.100_x64__8wekyb3d8bbwe">
<registryValue name="Path" valueType="REG_SZ" value="$(runtime.windows)\SystemApps\Microsoft.WindowsAppRuntime.CBS_8wekyb3d8bbwe\AppxManifest.xml" />
<securityDescriptor name="REGKEY_APPXALLUSERSTORE_SDDL" />
</registryKey>
<registryKey keyName="HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Config\Microsoft.WindowsAppRuntime.CBS.1.6_8wekyb3d8bbwe">
<registryValue name="SetupPhase" valueType="REG_DWORD" value="0x00000427" />
</registryKey>
<registryKey keyName="HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\UpdatedApplications\Microsoft.WindowsAppRuntime.CBS.1.6_8wekyb3d8bbwe" />
</registryKeys>
This is not a problem in .6899 because we don't have amd64_winappsdk-cbs-stable, but a vnext counterpart. But, at this point, why bother checking with that? MCT will not bundle this update with the image!
* Default to showing file extensions
Apart from a security improvement (let's remember ILOVEYOU from 2000), it's also a QoL.
* Fix key for color modes
Color mode settings are saved per-user, not system-wide. So HKLM\SOFTWARE is not our solution. HKCU is, and is mapped to \Users\Default\NTUSER.DAT
* Move color mode from offline servicing to firstrun
* Drop build number by 100
* Update Invoke-Microwin.ps1 (#15)
* Revert "Update Invoke-Microwin.ps1 (#15)"
This reverts commit 88f8a3031b.
* Keep trying to commit and unmount images
* Consistent REG ADD /F /V...
Some issues happen with REG and strings if you put /f at the end... move it to the beginning, where it doesn't conflict with anything.
* Rework stub path reg value set
This works on both Windows 11 and Windows 10. It didn't work on Win10 before; it should work now
* Remove copy link step
We no longer do this
* Move Copy-Files to microwin folder
Only microwin calls this function; it's better if we place this script in that folder
* Add Create Bootable USB (#18)
* Add Create Bootable USB
* Apply suggestion from @CodingWonders
---------
Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com>
* Download ADK to get oscdimg if not to download on GitHub
If we don't download OSCDIMG from GitHub, because we now use ADK kits roots detection to get installed copies of the ADK and oscdimg, we just download the Deployment Tools. This is only 100 MB once fully installed, and removes the need to install Chocolatey.
One caveat is that, on 64-bit systems, the script will output "Could not find ADK" once. This is normal as it does checks on both regular SOFTWARE and WOW6432Node, and it's able to pick it on the latter. If it isn't found anywhere, that message will appear twice.
* Make indentation more consitent in bootable USB func.
* Initialize petoolspath variable
* Remove temporary adksetup on completion
* Fix whitespace
* Remove unnecessary comments and revamp admin check
* Revert "Add Create Bootable USB (#18)"
This reverts commit 64babfe986.
* Remove reporting tool creation
The reporting tool is now hosted on a separate repo. The script itself can be run anywhere, not just in microwin, so...
* Some formatting change here
* Remove copy to ventoy option
* Fix some more indents
* Add Description that ISO automatically removes Win11 Requirements
* Additional things
- WPBT done by defaults
- Skip Logon Animation
- Remove convert to ESD and Upgrade to Win11 as Win10 is no longer supported
* First attempt at OSCDIMG autodownload
* No more custom ScratchPaths!
Time to get rid of that mess and just use %TEMP%.
All of these minor changes were made on a Server 2K8R2 VM.
* Redetect ADK/OSCDIMG after autodownload
* Leave ADK reg query error to debug only
---------
Co-authored-by: Real-MullaC <callumjanes2007new+github@gmail.com>
* Delete WPFTweaksPowershell7 from tweaks.json
Removed WPFTweaksPowershell7 configuration for Windows Terminal.
* Delete functions/public/Invoke-WPFTweakPS7.ps1
* Update WPFTweaksRazerBlock's InvokeScript
* Format fix for WPFTweaksRazerBlock
* Update WPFTweaksRazerBlock
* Update WPFTweaksRazerBlock
* Update WPFTweaksRazerBlock
* Better format for WPFTweaksRazerBlock's InvokeScript
* Better format for WPFTweaksRazerBlock's InvokeScript
* Fomat fix on WPFTweaksRazerBlock
* Update WPFTweaksRemoveHome to use powershell
* Fix WPFTweaksRemoveGallery format
* Format fix for WPFTweaksRemoveHome
* Update tweaks.json
* fix my f up
* Update tweaks.json to use registry modifications
Replaced InvokeScript and UndoScript with registry modifications for removing Home from Explorer and setting This PC as default.
* fix missing comma from twitch chat
* [Tweaks] Conditionally determine when to use sc and Set-Service
* Clean up comments in Set-WinUtilService.ps1
Removed comments explaining the handling of auto delayed start for PWSH 5.
---------
Co-authored-by: Chris Titus <contact@christitus.com>
* Update tweaks.json
* Fix
* Final Fix
* Added comments to WPFTweaksBlockAdobeNet
* Syntax change for WPFTweaksBlockAdobeNet
* Removed double \ from WPFTweaksBlockAdobeNet
* Added back double \ for WPFTweaksBlockAdobeNet
* Syntax fix for WPFTweaksBlockAdobeNet
* Syntax fix for WPFTweaksBlockAdobeNet again
* Fix for WPFTweaksBlockAdobeNet
* Merge branch 'ChrisTitusTech:main' into Update-WPFTweaksBlockAdobeNet
* Rename m to M
* Update tweaks.json
* Update tweaks.json
* Update tweaks.json
* Merge branch 'ChrisTitusTech:main' into Typo-Fix
* Merge branch 'ChrisTitusTech:main' into Typo-Fix
* Extra space
* From Tweaks to Toggle
* Merge branch 'ChrisTitusTech:main' into Typo-Fix
* Added Proton Authenticator to applications.json
Proton Authenticator is a popular open source 2fa app from proton.
* Update name in applications.json
---------
Co-authored-by: CyberSphinx <202843220+CyberSphonx@users.noreply.github.com>
The Invoke-WinUtilTweaks function was using the '-contains' operator on a string variable to check for toggle-type tweaks. This operator is intended for collections (arrays), not for substring matching within a string, leading to incorrect logic flow.
This caused an issue where selecting one tweak (e.g., WPFTweaksRightClickMenu) could erroneously trigger the action of another (e.g., WPFTweaksDisableCrossDeviceResume).
This commit replaces the incorrect '-contains' operator with the '-like' operator and appropriate wildcards ('*Toggle*'). This ensures that tweak types are identified correctly, resolving the bug and preventing unintended system modifications.
* feat: Add Beeper to Messaging applications
This commit adds the Beeper desktop application to the list of installable packages in the "Messaging" category.
The entry has been added to `config/applications.json` with the official download URL and the correct silent installation arguments.
Fixes#3608
* Fix job failure: ensure excluded directory exists before processing
This commit updates the Invoke-Preprocessing function to prevent workflow failures caused by missing excluded directories.
Previously, the script would attempt to recursively list files in excluded paths, resulting in an error if a directory did not exist.
The updated logic checks if the excluded path refers to a directory (ends with a backslash) and creates it if necessary before proceeding. This avoids "Cannot find path" errors and ensures smoother preprocessing, especially for jobs that depend on directory existence for exclusion logic.
No changes are made for excluded files or wildcard patterns.
* [Applications] DISM utility changes, app description fixes
- NTLite has been added to the list of apps to give the user some choice
- Both DISMTools and NTLite have been moved to a new section so they can be identified more easily by what they do, and because the former is not a tool made by either Microsoft or Sysinternals. The former now has its description pulled from WinGet (and summarized using Copilot)
- Em-dashes in some app descriptions have been replaced with semicolons to avoid question marks in tooltips
* Change category from 'DISM Utilities' to 'Microsoft Tools'
---------
Co-authored-by: Chris Titus <contact@christitus.com>
* [Enhance] Configure all apps view in start menu
To keep look consistent with older Win11
* [Enhance] Additional Start menu settings
* [MicroWin] Change Write-Host to Write-Debug on debug lines. (#13)
* Add a resolution to scripts being disabled (#14)
* [MicroWin] Change Write-Host to Write-Debug on debug lines.
* Add a resolution to scripts being disabled
* Add skip first logon anim option
* Unrelated: indentation fixes from compile script
* Some little touches to the first-run script
---------
Co-authored-by: Real-MullaC <callumjanes2007new+github@gmail.com>
* Disable "Microsoft account" notification source
* [WinPE] Remove driver addition block for WinPE
WE DO NOT TOUCH THE DRIVERS IN WinPE. There are reports of people getting "Install driver to show hardware" screens all over this repository, and on Discord; and the less drivers we touch in WinPE, the better.
Drivers can still be added to Preinstallation Environments in the following ways:
- Using the driver installation screens
- Firing up "drvload.exe <driver>" in cmd
* [Fix] Added fallback for DISM export command
This is a port of the fix in #3305
* [Cleanup] Removed some comments that no longer make sense
* [Fix] Same DISM export image fallback fix
* Merge branch 'main' into microwin-202506
* [Fix] Improve UI consistency for instructions
Fixes#3394
* Merge branch 'main' into microwin-202506
* [Unattended answer file] Remove it from drive root
The answer file, on the drive root, is not necessary for us to apply it. In fact, it's not even used there
* Merge branch 'main' into microwin-202506
* [MicroWin] June-August 2025 Update (#3) -- Contributions from Callum
* Allow people without compatible hardware or a USB to use MicroWin.
* Update functions/microwin/Microwin-NewUnattend.ps1
Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com>
* Update Invoke-Microwin.ps1
* Update Microwin-NewUnattend.ps1
* Update Microwin-NewUnattend.ps1
* Add error pop up if ISO Creation fails.
Issue 2653
* Add Disable WPBT Execution to MicroWin.
* Update functions/microwin/Invoke-Microwin.ps1
Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com>
* modified: functions/microwin/Invoke-Microwin.ps1
modified: xaml/inputXML.xaml
---------
Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com>
* Add conversion to ESD (#4)
* Add conversion to ESD
Issue - #3450
* Update Invoke-Microwin.ps1
Added quotes to the file paths. Put all the arguments in 1 string (as that also works fine)
---------
Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com>
* Update MicroWin contributor list
* Merge branch 'main' into microwin-202506
* Merge branch 'main' into microwin-202506
* [MicroWin] Add automatic configuration settings
Originally implemented in #2618. Adapted to follow the new file structure. And it works.
Though there are issues that will be detailed very soon
* [Fix] Fixed typos, updated descriptions
* Re-add WinPE driver addition
We're not yet sure if that is the actual problem of missing storage controllers. Logs can tell us more about this. Maybe for a future PR?
* [Fix/WPBT] Add spaces to reg key path
Avoid REG failure
* [Fix/XAML] Fix word wrapping issue for checkboxes
* add TIMEDATE.cpl Panel
* Fix standardization
---------
Co-authored-by: Chris Titus <contact@christitus.com>
Co-authored-by: Chris Titus Tech <dfm.titus@gmail.com>
* Checks if password exists for the user, if it doesn't the user is prompted to create one.
It checks if the password is equal to $null using `ValidateCredentials` and if it isn't the variable will be created. If it is equal to $null, a window with text, a textbox and a button will appear asking the user to create a password. That password is then set for the user and the winget installation continues.
* Made this a little more secure
Securing the password variable when it gets created and deleting it after it's done being used.
* Forces the user to input their password and automatically puts their username into the credentials box
* Removed the second greater than 0 check
* Pull requests are now handled directly on the **MAIN branch**. This was done since we can now select specific releases to launch via releases in GitHub.
* If you're doing code changes, then you can submit a PR to `main` branch, but I am very selective about these.
* If you're doing code changes, then you can submit a PR to the `main` branch.
!!! warning "Important"
Do not use a code formatter, make massive amounts of line changes, or make multiple feature changes. EACH FEATURE CHANGE SHOULD BE IT'S OWN PULL REQUEST!
Do not open a pull request that adds support for other languages to WinUtil for now, until we decide how we want to move forward with language support.
* When creating pull requests, it is essential to thoroughly document all changes made. This includes, but is not limited to, documenting any additions made to the `tweaks` section and corresponding `undo tweak`, so users are able to remove the newly added tweaks if necessary, and comprehensive documentation is required for all code changes. Document your changes and briefly explain why you made your changes in your Pull Request Description. Failure to adhere to this format may result in the denial of the pull request. Additionally, any code lacking sufficient documentation may also be denied.
* By following these guidelines, we can maintain a high standard of quality and ensure that the codebase remains organized and well-documented.
@@ -68,9 +70,9 @@ graph TD
### Fork the Repo
* Fork the WinUtil Repository [here](https://github.com/ChrisTitusTech/winutil) to create a copy that will be available in your repository list.
* To test to see if your changes work as intended run following commands in a powershell teminal as admin:
* To test to see if your changes work as intended, run the following commands in a PowerShell terminal as admin:
* Change the directory where you are running the commands to the forked project.
* `cd {path to the folder with the compile.ps1}`
* Run the following command to compile and run WinUtil:
* `.\Compile.ps1 -run`


* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
### Committing the changes
* Before committing your changes, please discard changes made to the `winutil.ps1` file, like the following:
* To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is not a WinUtil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build.
* To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is no WinUtil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build.
* If you do not see your feature in the main "/win" build, that is fine. All new changes go into the /windev build to make sure everything is working OK before going fully public.
* Congratulations! You just submitted your first PR. Thank you so much for contributing to WinUtil.
Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently.
## ⚠️ **IMPORTANT**
- 🛠️ **Supported environments only:** We only support Windows 11. Custom ISOs that are not made using Microwin are not supported.
- 💡 For general questions, use the [Discussions section](https://github.com/Christitustech/winutil/discussions) or join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ).
- Remember, we only support Windows 11. If you encounter problems on Windows 10, please consider upgrading to Windows 11.
- For general questions, join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ).
- type:checkboxes
id:read_issues
attributes:
label:⚙️ Issue Checklist
label:"I have read the known issues"
description:"You [better do](https://winutil.christitus.com/knownissues/), cause your issue can be already there"
options:
- label:I have read the guidelines.
- label:I checked for duplicate issues.
- label:I searched for existing discussions.
- label:I checked for an existing pull request that addresses this issue.
validations:
- label:Yes,I did
required:true
- type:input
- type:dropdown
id:affected_part
attributes:
label:📜 What part of Winutil are you having issues with?
placeholder:"e.g., Microwin, Tweaks, etc."
label:What part of Winutil are you having issues with?
options:
- Program Install Tab
- Tweaks Tab
- Config Tab
- Updates Tab
- Win11 Creator Tab
validations:
required:true
required:false
- type:textarea
id:issue_description
attributes:
label:📝 Provide a clear and concise description of the issue.
label:Provide a clear and concise description of the issue.
validations:
required:true
- type:textarea
id:steps_to_reproduce
id:tweaks_applied
attributes:
label:🔄 Steps to reproduce the issue.
placeholder:"e.g., Step 1: ..., Step 2: ..."
label:List the tweaks you applied before the issue occurred.
validations:
required:true
required:false
- type:textarea
id:error_output
attributes:
label:❌ Paste the full error output (if available).
label:Paste the full error output (if available) or Screenshot or Video.
placeholder:"Include any relevant logs or error messages."
- type:textarea
id:additional_context
attributes:
label:🖼️ Additional context.
placeholder:"Include screenshots, code blocks (use triple backticks ```), or any other relevant information."
- 🛠️ **Supported environments only:** We only support Windows 11.
- 💡 For general questions, use the [Discussions section](https://github.com/Christitustech/winutil/discussions) or join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ).
- type:checkboxes
attributes:
label:⚙️ Issue Checklist
options:
- label:I have read the guidelines.
- label:I checked for duplicate issues.
- label:I searched for existing discussions.
- label:I checked for an existing pull request that addresses this request.
validations:
required:true
- type:textarea
id:problem_statement
attributes:
label:❓ Is your feature request related to a problem?
placeholder:"Provide a clear and concise description of the issue you're facing. Example: 'I'm always frustrated when [...]'"
validations:
required:false
- type:textarea
id:proposed_solution
attributes:
label:💡 Describe the solution you'd like
placeholder:"Provide a clear and concise description of what you want to happen."
placeholder:"Provide a clear and concise description."
validations:
required:true
- type:textarea
id:alternatives
attributes:
label:🔄 Describe alternatives you've considered
placeholder:"Provide details on any alternative solutions or features you've thought about."
validations:
required:false
- type:textarea
id:additional_context
attributes:
label:🖼️ Additional context
placeholder:"Include screenshots, code blocks (use triple backticks ```), or any other relevant information."
<!--Before you make this PR have you followed the docs here? - https://christitustech.github.io/winutil/contribute/ -->
<!--Before you make this PR have you followed the docs here? - https://winutil.christitus.com/contributing/ -->
<!--Documentation is auto-generated from configs - no manual documentation updates needed -->
## Type of Change
- [ ] New feature
- [ ] Bug fix
- [ ] Documentation update
- [ ] Refactoring
- [ ] Hotfix
- [ ] Security patch
- [ ] UI/UX improvement
<!-- This automatically adds labels to your PR based on the selections above. -->
## Description
<!--[Provide a detailed explanation of the changes you have made. Include the reasons behind these changes and any relevant context. Link any related issues.]-->
## Testing
<!--[Detail the testing you have performed to ensure that these changes function as intended. Include information about any added tests.]-->
## Impact
<!--[Discuss the impact of your changes on the project. This might include effects on performance, new dependencies, or changes in behaviour.]-->
<!--[What does this PR do? Provide Screenshots when possible.]-->
## Issue related to PR
<!--[What issue/discussion is related to this PR (if any)]-->
<!--[List any ISSUES this is related to as it AUTO-CLOSES Them!]-->
- Resolves #
## Additional Information
<!--[Any additional information that reviewers should be aware of.]-->
## Checklist
- [ ] My code adheres to the coding and style guidelines of the project.
- [ ] I have performed a self-review of my own code.
- [ ] I have commented my code, particularly in hard-to-understand areas.
- [ ] I have made corresponding changes to the documentation.
- [ ] My changes generate no errors/warnings/merge conflicts.
This utility is a compilation of Windows tasks I perform on each Windows system I use. It is meant to streamline *installs*, debloat with *tweaks*, troubleshoot with *config*, and fix Windows *updates*. I am extremely picky about any contributions to keep this project clean and efficient.
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/)
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/) or [Create Issue](https://github.com/ChrisTitusTech/winutil/issues)
## 🎓 Documentation
> [!NOTE]
> To contribute to the documentation, please visit [WinUtil Docs Repo](https://github.com/Chris-Titus-Docs/winutil-docs) for more info.
### [WinUtil Official Documentation](https://winutil.christitus.com/)
@@ -51,11 +48,11 @@ If you have Issues, refer to [Known Issues](https://winutil.christitus.com/known
## 🛠️ Build & Develop
> [!NOTE]
> Winutil is a relatively large script, so it's split into multiple files which're combined into a single `.ps1` file using a custom compiler. This makes maintaining the project a lot easiler.
> Winutil is a relatively large script, so it's split into multiple files which're combined into a single `.ps1` file using a custom compiler. This makes maintaining the project a lot easier.
Get a copy of the source code, this can be done using GitHub UI (`Code -> Download ZIP`), or by cloning (downloading) the repo using git.
Get a copy of the source code. This can be done using GitHub UI (**Code** > **Download ZIP**), or by cloning (downloading) the repo using git.
If git is installed, run the following commands under a PowerShell window to clone and move into project's directory:
If git is installed, run the following commands under a PowerShell window to clone and move into the project's directory:
@@ -66,10 +63,10 @@ To build the project, run the Compile Script under a PowerShell window (admin pe
.\Compile.ps1
```
You'll see a new file named `winutil.ps1`, which's created by `Compile.ps1` script, now you can run it as admin and a new window will popup, enjoy your own compiled version of WinUtil :)
You'll see a new file named `winutil.ps1`, which was created by `Compile.ps1` script. Now you can run it as admin, and a new window will popup. Enjoy your own compiled version of WinUtil :)
> [!TIP]
> For more info on using WinUtil and how to develop for it, please consider reading [the Contribution Guidelines](https://winutil.christitus.com/contributing/), if you don't know where to start, or have questions, you can ask over on our [Discord Community Server](https://discord.gg/RUbZUZyByQ) and active project members will answer when they can.
> For more info on using WinUtil and how to develop for it, please consider reading [the Contribution Guidelines](https://winutil.christitus.com/contributing/). If you don't know where to start, or have questions, you can ask over on our [Discord Community Server](https://discord.gg/RUbZUZyByQ), and active project members will answer when they can.
## 💖 Support
- To morally and mentally support the project, make sure to leave a ⭐️!
@@ -79,7 +76,7 @@ You'll see a new file named `winutil.ps1`, which's created by `Compile.ps1` scri
These are the sponsors that help keep this project alive with monthly contributions.
"Description":".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.",
"Description":"Replaces the default Windows NTP server (time.windows.com) with pool.ntp.org for improved time synchronization accuracy and reliability.",
"Content":"Windows Subsystem for Linux (WSL) - Enable",
"Description":"Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting.",
"Description":"Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
"category":"Features",
"panel":"1",
"Order":"a021_",
"Description":"Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
* Test the latest changes to Winutil by running the pre-release and reporting issues you are encountering to help us continually improve Winutil!
#### **Run the latest pre-release**
```
irm https://christitus.com/windev | iex
```
> [!WARNING]
> This is a pre-release and should be treated as such. It exists for developers to test the utility and report or fix bugs before they get added to the stable release. Don't use it in production!
## Issues
* If you encounter any challenges or problems with the script, I kindly request that you submit them via the "Issues" tab on the GitHub repository. By filling out the provided template, you can provide specific details about the issue, allowing me (and others in the community) to promptly address any bugs or consider feature requests.
## Contribute Code
* Pull requests are now handled directly on the **MAIN branch**. This was done since we can now select specific releases to launch via releases in GitHub.
* If you're doing code changes, then you can submit a PR to the `main` branch, but I am very selective about these.
> [!IMPORTANT]
> Do not use a code formatter, make massive amounts of line changes, or make multiple feature changes. EACH FEATURE CHANGE SHOULD BE IT'S OWN PULL REQUEST!
* When creating pull requests, it is essential to thoroughly document all changes made. This includes, but is not limited to, documenting any additions made to the `tweaks` section and corresponding `undo tweak`, so users are able to remove the newly added tweaks if necessary, and comprehensive documentation is required for all code changes. Document your changes and briefly explain why you made your changes in your Pull Request Description. Failure to adhere to this format may result in the denial of the pull request. Additionally, any code lacking sufficient documentation may also be denied.
* By following these guidelines, we can maintain a high standard of quality and ensure that the codebase remains organized and well-documented.
> [!NOTE]
> When creating a function, please include "WPF" or "Winutil" in the file name so it can be loaded into the runspace.
## Walk through
* This is a guide for beginners. If you are still having issues, look at the following official GitHub documentation:
* [Commit through WEB](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits)
* [Commit through GitHub Desktop](https://docs.github.com/en/desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop#about-commits)
* [Create a Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
> While you can make your changes directly through the Web, we recommend cloning the repo to your device using the application GitHub Desktop (available in Winutil) to test your fork easily.
* Install GitHub Desktop if it is not already installed.
* Log in using the same GitHub account you used to fork Winutil.
* Choose the fork under "Your Repositories" and press "clone {repo name}"
* Create a new branch and name it something relatable to your changes.
* Now you can modify Winutil to your liking using your preferred text editor.
### Testing your changes
* To test to see if your changes work as intended, run the following commands in a PowerShell terminal as admin:
* Change the directory where you are running the commands to the forked project.
* `cd {path to the folder with the compile.ps1}`
* Run the following command to compile and run Winutil:
* `.\Compile.ps1 -run`
{{< image src="images/Compile" alt="Compile" >}}
* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
### Committing the changes
* Before committing your changes, please discard changes made to the `Winutil.ps1` file, like the following:
* To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is no Winutil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build.
* If you do not see your feature in the main "/win" build, that is fine. All new changes go into the /windev build to make sure everything is working OK before going fully public.
* Congratulations! You just submitted your first PR. Thank you so much for contributing to Winutil.
If it still isn't working in your region, it may be due to temporary ISP or network filtering of GitHub content domains. This has been reported by some users in India in the past. See: [Times of India](https://timesofindia.indiatimes.com/gadgets-news/github-content-domain-blocked-for-these-indian-users-reports/articleshow/96687992.cms).
If you are still having issues, try using a **VPN**, or changing your **DNS provider** to one of the following two providers:
| Provider | Primary DNS | Secondary DNS |
| :--------: | :---------: | :-----------: |
| Cloudflare | `1.1.1.1` | `1.0.0.1` |
| Google | `8.8.8.8` | `8.8.4.4` |
### Script Won't Run
If you run WinUtil and get the error:
`"WinUtil is unable to run on your system, powershell execution is restricted by security policies,"`
this means that your PowerShell session is in **Constrained Language Mode**, which prevents WinUtil from running.
Welcome to the official documentation for Winutil, your go-to utility for optimizing and managing your Windows environment. Whether you’re an IT professional, power user, or regular user, Winutil provides a comprehensive set of tools to enhance your Windows experience.
## Running the latest release of Winutil
* You will first need to start a PowerShell terminal **as Admin**.
* Now you can run the following command:
```
irm "https://christitus.com/win" | iex
```
> [!IMPORTANT]
> Winutil is updated frequently as of the time of writing. Consequently, features and functionalities may evolve, and the documentation may not always reflect the most current images or information.
Winutil is a PowerShell-based Windows utility with a WPF (Windows Presentation Foundation) GUI. This document explains the architecture, code structure, and how different components work together.
├── Compile.ps1 # Build script that combines all files
├── winutil.ps1 # Compiled output (generated)
├── scripts/
│ ├── main.ps1 # Entry point and GUI initialization
│ └── start.ps1 # Startup logic
├── functions/
│ ├── private/ # Internal helper functions
│ │ ├── Get-WinUtilVariables.ps1
│ │ ├── Install-WinUtilWinget.ps1
│ │ └── ...
│ ├── public/ # User-facing functions
│ │ ├── Initialize-WPFUI.ps1
│ │ └── ...
├── config/ # JSON configuration files
│ ├── applications.json # Application definitions
│ ├── tweaks.json # Tweak definitions
│ ├── feature.json # Windows feature definitions
│ └── preset.json # Preset configurations
├── xaml/
│ └── inputXML.xaml # GUI layout definition
└── docs/ # Documentation
```
### Key Components
#### 1. Compile.ps1
**Purpose**: Combines all separate script files into a single `winutil.ps1` for distribution.
**Process**:
1. Reads all function files from `/functions/`
2. Includes configuration JSON files
3. Embeds XAML GUI definition
4. Combines into single script
5. Outputs `winutil.ps1`
**Why**: Makes distribution easier (single file) and improves load time.
#### 2. scripts/main.ps1
**Purpose**: Entry point that initializes the GUI and event system.
**Responsibilities**:
- Load XAML and create WPF window
- Initialize form elements
- Set up event handlers
- Load configurations
- Display the GUI
#### 3. functions/public/
**Purpose**: User-facing functions that implement main features.
**Key Functions**:
-`Initialize-WPFUI.ps1`: Sets up the GUI
-`Invoke-WPFTweak*`: Applies system tweaks
-`Invoke-WPFFeature*`: Enables Windows features
-`Install-WinUtilProgram*`: Installs applications
**Naming Convention**: Functions start with `WPF` or `Winutil` to be loaded into the runspace.
#### 4. functions/private/
**Purpose**: Internal helper functions not directly called by users.
**Key Functions**:
-`Get-WinUtilVariables.ps1`: Retrieves UI element references
-`Install-WinUtilWinget.ps1`: Ensures WinGet is installed
-`Get-WinUtilCheckBoxes.ps1`: Gets checkbox states
-`Invoke-WinUtilCurrentSystem.ps1`: Gets system information
#### 5. config/*.json
**Purpose**: Define available applications, tweaks, and features declaratively.
**Files**:
-`applications.json`: Application definitions with WinGet/Choco IDs
-`tweaks.json`: Registry tweaks and their undo actions
-`feature.json`: Windows features that can be enabled/disabled
-`preset.json`: Predefined tweak combinations
-`dns.json`: DNS provider configurations
#### 6. xaml/inputXML.xaml
**Purpose**: WPF GUI layout and design.
**Structure**:
- Buttons with event handlers
- TextBoxes for input
- CheckBoxes for options
- ListBoxes for selections
## Win11 Creator Architecture
The **Win11 Creator** is a specialized subsystem within Winutil that creates customized Windows 11 ISOs. It operates independently from the main package installation and tweak system.
### Win11 Creator Components
**Core Functions** (`functions/private/`):
-`Invoke-WinUtilISO.ps1`: Main orchestrator containing all Win11 Creator functions
-`Invoke-WinUtilISOBrowse`: ISO file selection dialog
-`Invoke-WinUtilISOMountAndVerify`: Validates and mounts ISO, verifies it's official Windows 11
-`Invoke-WinUtilISOModify`: Launches modification in background runspace
-`Invoke-WinUtilISOExport`: Handles ISO and USB export
-`Invoke-WinUtilISOCheckExistingWork`: Recovers incomplete work sessions
-`Invoke-WinUtilISOCleanAndReset`: Cleans up temp directories and resets UI
-`Invoke-WinUtilISOScript.ps1`: Applies modifications to mounted install.wim
"Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
"Description": ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.",
"Content": "Windows Subsystem for Linux (WSL) - Enable",
"Description": "Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting.",
Performs various tasks in an attempt to repair Windows Update
.DESCRIPTION
1. (Aggressive Only) Scans the system for corruption using the Invoke-WPFSystemRepair function
2. Stops Windows Update Services
3. Remove the QMGR Data file, which stores BITS jobs
4. (Aggressive Only) Renames the DataStore and CatRoot2 folders
DataStore - Contains the Windows Update History and Log Files
CatRoot2 - Contains the Signatures for Windows Update Packages
5. Renames the Windows Update Download Folder
6. Deletes the Windows Update Log
7. (Aggressive Only) Resets the Security Descriptors on the Windows Update Services
8. Reregisters the BITS and Windows Update DLLs
9. Removes the WSUS client settings
10. Resets WinSock
11. Gets and deletes all BITS jobs
12. Sets the startup type of the Windows Update Services then starts them
13. Forces Windows Update to check for updates
.PARAMETER Aggressive
If specified, the script will take additional steps to repair Windows Update that are more dangerous, take a significant amount of time, or are generally unnecessary
#>
param($Aggressive = $false)
Write-Progress -Id 0 -Activity "Repairing Windows Update" -PercentComplete 0
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
"Description": "This tweak controls the Resume function in Windows 11 24H2 and later, which allows you to resume an activity from a mobile device and vice-versa.",
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
"Description": "If enabled, Windows prioritizes gaming performance by allocating system resources. Disable for audio/video production to prevent interference.",
"category": "Customize Preferences",
"panel": "2",
"Type": "Toggle",
"registry": [
{
"Path": "HKCU:\\Software\\Microsoft\\GameBar",
"Name": "AllowAutoGameMode",
"Value": "1",
"Type": "DWord",
"OriginalValue": "0",
"DefaultState": "true"
},
{
"Path": "HKCU:\\Software\\Microsoft\\GameBar",
"Name": "AutoGameModeEnabled",
"Value": "1",
"Type": "DWord",
"OriginalValue": "0",
"DefaultState": "true"
}
],
```
## Registry Changes
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.