Winapp2ool

July 27, 2026 · View on GitHub

Winapp2ool is the tool that builds winapp2.ini, and a companion utility for the people who use it. The published winapp2.ini files (the base file, each of its flavors, and the changelog shipped alongside each one) are generated from source by winapp2ool rather than edited by hand. It is a menu-driven console application for end users, and can be driven run from a scripting environment for automation.

What is winapp2.ini?

Winapp2.ini is a massive, community-driven database of declarative cleaning routines for Microsoft Windows, compatible with CCleaner, BleachBit, System Ninja, R-Wipe&Clean, HDCleaner, and FluentCleaner. Winapp2.ini has its own readme here.

Why winapp2ool?

Winapp2ool was created to help automate otherwise complex or time consuming tasks for maintainers, contributors, and end users of Winapp2.ini. It provides several tools:

  • WinappDebug: Performs static analysis and corrects style and syntax errors
  • Trim: Reduces the database to entries relevant to the current system
  • Transmute: Applies individual structured patches to ini files
  • Flavorizer: Applies batches of structured patches to ini files
  • Diff: Generates changelogs between any two Winapp2.ini versions, tracking additions, removals, renames, mergers, and key movements between entries using context-aware abstraction tracking
  • CCiniDebug: Removes stale Winapp2.ini configurations from the CCleaner settings
  • Entry Lab: Hub for the entry generators: Browser Builder, UWP Builder, and Entry Builder
  • Combine: Merges folders (including subfolders) of ini files into a single file
  • CC7Patcher: Installs winapp2.ini entries into CCleaner 7's ccleaner.ini
  • Downloader: Downloads winapp2.ini and related files from GitHub

How winapp2.ini gets built

The published winapp2.ini is not assembled by hand. Its sources live in Assembler, and winapp2ool performs every stage that turns them into the published files.

  1. Entry Builder, Browser Builder, and UWP Builder expand the base entry, browser, and Microsoft Store app sources into the committed build artifacts
  2. Combine joins those artifacts into one file in strict mode
  3. WinappDebug applies the style and syntax rules to the merged file and saves its corrections
  4. Flavorizer applies each flavor's ruleset to produce the CCleaner, CCleaner 7, BleachBit, FluentCleaner, Tron, and System Ninja variants
  5. Diff creates the changelog for the base file and for each flavor against the previously version

Because the artifacts under Entries are committed to the repository rather than existing only transiently during a build, the build can be checked against itself: build winapp2.ps1 -Verify regenerates all of them, byte-compares against what is committed, and exits nonzero on any drift. That check runs in GitHub Actions, alongside:

  • Pull request verification: A pull request touching the build sources is built twice: master alone, then master with the pull request merged. A bot comment reports either the changelog the change produces or the stage at which it broke the build
  • Scheduled builds: Sources are rebuilt daily. When the output changes, it is committed back and a release is cut with every flavor and changelog attached

Table of Contents

  1. Requirements
  2. Installation
  3. Quick Start
  4. Menu Options
  5. Command-Line Arguments
  6. Usage Examples
  7. Troubleshooting
  8. Notes

Requirements

Minimum

  • Windows Vista SP2
  • .NET Framework 4.5
  • Administrative permissions (see Notes)

Suggested

  • Windows 7 or higher
  • .NET Framework 4.6 or higher (for automatically updating the executable)
  • Network connection for full functionality

Installation

Download the latest winapp2ool.exe from the Releases page or from the Release directory and place it in the folder where you keep (or would like to keep) winapp2.ini.

Updates

Winapp2ool will prompt you to update it from within the application whenever an update is available. The application will create a backup of itself with the .bak extension when doing this. Rename to .exe to restore the backed up version.

Beta builds

Beta builds are occasionally made available to the public while features are in development. To access the beta build, open the winapp2ool settings and enable beta participation. The newest beta build will automatically be downloaded and launched. Beta participation requires .NET Framework 4.6 or higher. Beta builds live on Branch1.


Quick Start

Place winapp2ool.exe in an empty folder and run it. On first launch with a network connection, winapp2ool detects that you have no local copy of winapp2.ini and presents download options directly on the main menu:

 ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
 ║                                                 Update available for winapp2.ini                                             ║
 ╠══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣
 ║                                  Welcome to Winapp2ool! Check out the ReadMe on GitHub for help!                             ║
 ║                                                                                                                              ║
 ║                                                  Menu: Enter a number to select                                              ║
 ║                                                                                                                              ║
 ║ 0. Exit                            - Exit the application                                                                    ║
 ║                                                                                                                              ║
 ║ 1. WinappDebug                     - Scan for and correct style and syntax errors in winapp2.ini                             ║
 ║ 2. Trim                            - Optimize winapp2.ini for your system                                                    ║
 ║ 3. Transmute                       - Add, replace, or remove entire sections or individual keys from winapp2.ini             ║
 ║ 4. Diff                            - Generate a context-aware changelog between two winapp2.ini files                        ║
 ║ 5. CCiniDebug                      - Remove stale winapp2.ini configurations from ccleaner.ini                               ║
 ║ 6. Entry Lab                       - Generate winapp2.ini entries from templates                                             ║
 ║ 7. Combine                         - Join together a collection of ini files into one                                        ║
 ║ 8. CC7Patcher                      - Install winapp2.ini for CCleaner 7                                                      ║
 ║                                                                                                                              ║
 ║ 9. Downloader                      - Download files from the Winapp2 GitHub                                                  ║
 ║ 10. Settings                       - Manage Winapp2ool's settings                                                            ║
 ║                                                                                                                              ║
 ║                                            A new version of winapp2.ini is available!                                        ║
 ║                                                Current: v000000 (file not found)                                             ║
 ║                                                        Available: v251109                                                    ║
 ║                                                                                                                              ║
 ║ 11. Update Winapp2.ini             - Update your local copy of winapp2.ini                                                   ║
 ║ 12. Update & Trim                  - Download and trim the latest winapp2.ini                                                ║
 ║ 13. Show winapp2.ini changelog     - See the difference between your local file and the latest                               ║
 ║ 14. Show trimmed changelog         - See the difference between your trimmed local file and the latest                       ║
 ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

Enter a number, or leave blank to run the default:
Note: This menu was captured from a real first run in an empty folder. Current: v000000 (file not found) reflects that no local winapp2.ini exists yet; once you have one, its version number is shown instead. The update options at the bottom only appear while an update is available.

From here, the most common tasks are one keypress away:

  1. Download the latest winapp2.ini: Choose Update Winapp2.ini
  2. Optimize the latest winapp2.ini for your system: Choose Update & Trim
  3. See the changelog between your local version and the latest: Choose Show winapp2.ini changelog
  4. Update winapp2ool itself: Choose Update Winapp2ool (shown when a new version of the tool is available)

Menu Options

Click a linked option name to see the readme for that module.

OptionEffectNotes
ExitExits the application
WinappDebugScan for and correct style and syntax errors in winapp2.iniEnforces the winapp2.ini style and syntax guidelines
TrimOptimize winapp2.ini for your systemRemoves entries not relevant to your machine, reducing load times in tools like CCleaner
TransmuteAdd, replace, or remove entire sections or individual keys from winapp2.iniPatches ini files at whole-section or individual-key granularity. Flavorizer, which applies these patches in batches, is opened from this menu
DiffGenerate a context-aware changelog between two winapp2.ini files
CCiniDebugRemove stale winapp2.ini configurations from ccleaner.iniFor CCleaner 6 and earlier only
Entry LabGenerate winapp2.ini entries from templatesHub for Browser Builder, UWP Builder, and Entry Builder
CombineJoin together a collection of ini files into oneIncludes subfolders
CC7PatcherInstall winapp2.ini for CCleaner 7Appends winapp2.ini entries into CCleaner 7's ccleaner.ini
DownloaderDownload files from the Winapp2 GitHubUnavailable in offline mode
SettingsManage Winapp2ool's settingsApplication-level settings: saving settings to disk, beta participation, offline mode, the active Flavor, and log management
Update Winapp2.iniUpdate your local copy of winapp2.iniOnly shown while a winapp2.ini update is available; unavailable in offline mode
Update & TrimDownload and trim the latest winapp2.iniOnly shown while a winapp2.ini update is available; unavailable in offline mode
Show winapp2.ini changelogSee the difference between your local file and the latestOnly shown while a winapp2.ini update is available; unavailable in offline mode
Show trimmed changelogSee the difference between your trimmed local file and the latestOnly shown while a winapp2.ini update is available; unavailable in offline mode
Update Winapp2oolGet the latest Winapp2ool.exeOnly shown while a winapp2ool update is available. Unavailable in offline mode and on machines with .NET Framework 4.5 or lower (ie. Winapp2oolXP)
Go onlineRetry your internet connectionOnly available in offline mode
Note: The main menu also accepts the hidden commands printlog (print winapp2ool's internal log to the console) and savelog (write the log to disk). See Log Management in the settings readme.

Command-Line Arguments

Winapp2ool supports command line arguments ("args"). These allow Winapp2ool to be used from a scripting environment (such as a shell script) without having to interact with the UI. There are several top level args which apply settings globally, and then there are tool specific args which are defined in each tool's own readme.

The first argument provided should always refer to the module you would like to use, as below. Modules can be selected by number or by name, with or without a leading -1, -1, debug, and -debug are all equivalent.

Module Args

ArgEffect
1 or debugLaunches WinappDebug
2 or trimLaunches Trim
3 or transmuteLaunches Transmute
4 or diffLaunches Diff
5 or ccdebugLaunches CCiniDebug
6 or browserbuilderLaunches Browser Builder
7 or combineLaunches Combine
8 or downloadLaunches Downloader
9 or flavorizeLaunches Flavorizer
10 or uwpbuilderLaunches UWP Builder
11 or entrybuilderLaunches Entry Builder
12 or cc7patcherLaunches CC7Patcher
Note: These numbers are not the same as the numbers on the main menu.

Global Args

ArgEffectNotes
-sEnables silent mode, muting almost all output and prompts for inputSome exceptions and errors may not be shown when silent mode is enabled
-offlineSkips the network connection check at startup and runs in offline mode
-autoupdateChecks for and applies a winapp2ool update before running the requested moduleRequires .NET Framework 4.6 or higher
-writelogWrites winapp2ool's internal log to winapp2ool.log on exitA run that exits with a nonzero code saves the log whether or not this arg is provided

Flavor Args

The active Flavor determines which variant of winapp2.ini is downloaded by any module that downloads one (Downloader, Trim, Diff, CC7Patcher).

ArgEffectNotes
-ccleaner or -ccSets the Flavor to CCleanerDefault
-ncc or -baseSets the Flavor to Non-CCleaner (base)
-bleachbit or -bbSets the Flavor to BleachBit
-systemninja or -snSets the Flavor to System Ninja
-tronSets the Flavor to Tron
-ccleaner7 or -cc7Sets the Flavor to CCleaner 7
-fluentcleaner or -fcSets the Flavor to FluentCleaner

File Selection Args

Every module numbers the files it works with. Two argument types override where a numbered file lives:

ArgEffectNotes
-1d, -2d, ...Defines a new directory (and optionally file name) for the module's respectively numbered filePaths with spaces must be provided in quotes, eg. -1d "C:\New Folder"
-1f, -2f, ...Defines a new file name for the module's respectively numbered fileSubdirectories can be given through the file name, eg. -1f \subdir\winapp2.ini
Note: In most modules the "first file" (-1d/-1f) is the winapp2.ini being read and the "third file" (-3d/-3f) is the output file, but there are exceptions. Refer to a specific module's readme for its file numbering.

Usage Examples

The outputs below were captured from real winapp2ool runs. Winapp2.ini version numbers and entry counts reflect the day and the machine on which the examples were recorded.

Example 1: First run (updating and trimming from the menu)

Context

You have just downloaded winapp2ool.exe into an empty folder and want a copy of winapp2.ini optimized for your machine.

Steps

  1. Run winapp2ool.exe.
  2. Because there is no local winapp2.ini, the main menu opens with the update options shown in Quick Start
  3. Choose Update & Trim. Winapp2ool prints Downloading & trimming, this may take a moment..., downloads the latest CCleaner flavor winapp2.ini, removes the entries that do not apply to your system, and saves the result as winapp2.ini in the current folder.
  4. The update options disappear from the menu because your local copy is now current.

Example 2: Scripted download

Context

A maintenance script needs the latest winapp2.ini without any user interaction.

Command

winapp2ool download winapp2 -s

Output

Nothing is printed to the console. winapp2.ini is downloaded from github and saved in the current directory

; Version: 251109
; # of entries: 3,715

Explanation

  • download launches the Downloader module
  • winapp2 is the Downloader's file selector for winapp2.ini
  • -s suppresses all output and prompts, allowing the command to run unattended
  • No Flavor arg is given, so the default CCleaner Flavor is downloaded

Example 3: Downloading and trimming in one command

Context

The same maintenance script should instead produce a winapp2.ini already optimized for the machine it runs on. This is the scripted equivalent of Example 1's Update & Trim.

Command

winapp2ool -2 -d -s

Output

Nothing is printed to the console. winapp2.ini appears in the working directory.

; Version: 251109
; # of entries: 349

Explanation

  • -2 launches Trim
  • -d is Trim's flag for downloading the file to trim
  • The full database contained 3,715 entries; 349 survived trimming on this machine.

Example 4: Choosing a Flavor

Context

A BleachBit user wants the BleachBit variant of winapp2.ini instead of the default CCleaner one.

Command

winapp2ool -bleachbit download winapp2 -s

Output

The BleachBit flavor of winapp2.ini is downloaded and saved to the current directory

Explanation

  • Flavor args are global: they affect any module that downloads winapp2.ini

Example 5: Fully offline maintenance chain

Context

You maintain personal additions to winapp2.ini in a custom.ini file. A script applies them to your local winapp2.ini and then corrects the style and syntax of the result. Your network connection is bad, and you notice that winapp2ool lags on startup while it tries to connect to GitHub.

Files

Base file (winapp2.ini)
[My App Logs *]
Section=Custom Entries
DetectFile=%AppData%\MyApp
FileKey1=%AppData%\MyApp\Logs|*.log
Source file (custom.ini)
; Personal additions maintained separately from the official winapp2.ini
[My App Logs *]
FileKey=%AppData%\MyApp\CrashDumps|*.dmp

[My Other App *]
Section=Custom Entries
DetectFile=%AppData%\MyOtherApp
FileKey1=%AppData%\MyOtherApp\Cache|*.tmp

Commands

winapp2ool -transmute -add -2f custom.ini -3f winapp2.ini -s -offline
winapp2ool -debug -c -1f winapp2.ini -3f winapp2.ini -s -offline

Output

winapp2.ini after both commands
[My App Logs *]
Section=Custom Entries
DetectFile=%AppData%\MyApp
FileKey1=%AppData%\MyApp\CrashDumps|*.dmp
FileKey2=%AppData%\MyApp\Logs|*.log

[My Other App *]
Section=Custom Entries
DetectFile=%AppData%\MyOtherApp
FileKey1=%AppData%\MyOtherApp\Cache|*.tmp

Explanation

  • The first command adds the new key and the new entry from custom.ini into winapp2.ini (Transmute Add mode, writing back over the base file via -3f)
  • The second command lints the result with WinappDebug (-c saves its corrections): the unnumbered FileKey added by Transmute has been renumbered and the keys alphabetized
  • -s -offline on both commands makes the chain silent and skips the startup network check.

Troubleshooting

MessageCause
"Winapp2ool is currently in offline mode"Winapp2ool could not reach GitHub at startup (or was launched with -offline). All functions not directly related to downloading still work on local files. Use Go online from the main menu to retry the connection
"Winapp2ool was unable to establish a network connection. You are still in offline mode."A Go online retry failed
"A new version of winapp2.ini is available!"Informational: your local winapp2.ini is older than the latest release. Current: v000000 (file not found) means no winapp2.ini exists in winapp2ool's folder
"Your .NET Framework is out of date"The machine has .NET Framework 4.5 or lower.
"Winapp2ool is unable to automatically update"Winapp2ool was launched from the %tmp% directory or the .NET Framework is out of date
"Invalid input. Please try again."The menu received input it doesn't recognize
"Please report this error on GitHub. It will be saved to winapp2ool.log in the same folder as winapp2ool."An unexpected error occurred; the log written next to winapp2ool.exe contains the details to include in a GitHub issue

Notes

General

.NET Framework 4.5 (or newer) comes pre-installed by default on Windows 8 and newer.

By default, each tool in the application assumes that local files it is looking for are in the same folder as the executable. File paths displayed in menus abbreviate the current directory as ..

Winapp2ool performs queries against protected system areas such as the Program Files and Windows directories and may return invalid results if run without administrative permissions.

Winapp2ool does not perform any automatic backup of ini files before modifying them.

Windows XP

Windows XP users should use winapp2oolXP. Winapp2oolXP is no longer maintained and no longer receives updates, but retains the ability to download and trim the latest winapp2.ini for users on that platform. We no longer able to provide application support or updates for users of Winapp2oolXP.