A thorough, open-source Windows uninstaller that goes deep. Removes programs completely, hunts down every leftover, and cleans system cruft that other tools miss. Ships a GUI and a headless CLI for scripting / Task Scheduler / Intune / SCCM.
- Installed Programs - Full registry scan (HKLM + HKCU, 32/64-bit) with extracted program icons
- Bulk Uninstall - Multi-select + one-click sequential uninstall with silent flags auto-applied (inspired by BCUninstaller)
- winget integration - Programs tracked by winget are tagged with their package ID; upgrade-available badge + right-click → "Upgrade via winget"; uninstall uses
winget uninstall --id ... --exactbefore registry fallbacks, anddoctorreports source health when package-manager enrichment degrades (inspired by BCU source-adapter pattern) - Scoop integration - Scoop apps that skip the Windows installer DB are auto-discovered, merged into the list, and removed through
scoop uninstall - Chocolatey integration -
choco list --local-only --limit-outputentries are merged into the installed programs list and removed through non-interactivechoco uninstall - Privilege-contained package managers - winget, Scoop, and Chocolatey resolve from known absolute install roots and run as the original non-elevated desktop user, never with the GUI's administrator token or a current-directory/PATH-selected shim
- Explicit removal capability and trust - Each row declares a
NativeUninstaller,PackageManager,PortableFolder,GameLauncher, orUnsupportedaction with source identity, executable, arguments, owner/publisher, signature, and risk facts. Unsupported actions are disabled and the action is revalidated immediately before execution. - Recoverable portable removal - Portable folders are moved to the Recycle Bin as one recoverable action; game-launcher discoveries are review-only until a source-native uninstall command is available.
- Silent-switch database - Curated per-installer-family silent flags (
/S,/qn,/VERYSILENT,/quiet, Squirrel--uninstall --silent) with vendor fingerprint overrides (inspired by PatchMyPC) - Forced Uninstall - Scan for remnants of already-removed or partially uninstalled programs
- Windows Apps - Remove UWP/MSIX apps including system bloatware
- Leftover Scanner - Three scan modes (Safe / Moderate / Advanced) for registry keys, files, and folders
- Export - Export installed programs list to HTML, CSV, or JSON
- Junk Cleaner - Browser caches, temp files, crash dumps, prefetch, installer cache, Windows Update leftovers
- Evidence Remover - Recent documents, jump lists, thumbnail cache, clipboard, DNS cache, Explorer history, Windows logs, crash reports, error reports, font cache, delivery optimization cache
- Empty Folders - Scan common locations for empty directory trees and remove them
- Disk Analyzer - Folder size breakdown and large file finder (50MB+) with delete capability. Uses WizTree's raw-MFT technique (
FSCTL_ENUM_USN_DATA+FSCTL_GET_NTFS_FILE_RECORD) on NTFS volumes; parallelFindFirstFileExW(FIND_FIRST_EX_LARGE_FETCH)fallback on ReFS/exFAT/FAT32. Typical full-drive scan in seconds. - MSI/MSP orphan cleanup - Scans
%WINDIR%\Installerfor old MSI/MSP files not referenced by active Windows Installer products - Dry-run / Preview mode - Every destructive pipeline can be previewed: enumerate and size items without touching them (inspired by BleachBit)
- Secure Delete - Privacy-grade selected-file wipe (single-pass cryptographic random + opaque rename + delete; no volume free-space fill) (inspired by BleachBit/PrivaZer)
- Live progress bars - Every long-running delete reports item / total / bytes-freed / current path in the status bar
- Skipped-item details - Junk and Evidence cleanup summaries expose redacted reasons for missing, denied, unsafe, locked, command-failed, and too-recent items in GUI status, CLI text, CLI JSON, and activity history
- Autorun Manager - Registry Run/RunOnce, startup folders, and service autoruns with reversible disable (StartupApproved pattern), guarded deletion where a rollback provider exists, and explicit unsupported states for protected sources
- Startup Impact ratings - High / Medium / Low per autorun process, parsed from the Windows Diagnostic Infrastructure boot traces in
System32\wdi\LogFiles\StartupInfo\*.xml. Same metric Task Manager uses — no undocumented APIs. - Digital signature badges - Every autorun entry and service shows its WinVerifyTrust result (signer CN / Unsigned / Untrusted / Revoked) (inspired by Sysinternals Autoruns)
- Browser Extensions - Scan extensions across Chrome, Edge, Brave, Firefox, Vivaldi, and Opera; remove only exact profile packages while protecting system and stale entries
- Driver Store cleanup - Enumerate third-party driver packages via
pnputil /enum-drivers, group by.inffamily, flag old versions for removal, and keep firmware/system packages pinned. A removal exports and hashes the full package to administrator-owned rollback storage before invokingpnputil /delete-driver; the CLI and WPF surface expose the operation identity and verified reinstall path. (inspired by RAPR / DriverStoreExplorer) - Context Menu Cleaner - Find and remove orphaned shell context menu entries with broken executables or CLSIDs
- Shortcut repair - Enumerate
.lnkfiles on Desktop / Start Menu via IShellLinkW COM; flag and delete broken-target shortcuts - Services Manager - View all Windows services, identify orphaned services pointing to deleted executables, disable or delete
- Scheduled Tasks - Full task inventory with orphan detection, disable and delete capabilities
- Registry Hunter - Parallel substring or regex search across HKLM, HKLM\WOW6432Node, HKCU, and HKCR with scope filters (keys / names / data), live hit counter, and depth / hit / time caps (inspired by NirSoft RegScanner and Eric Zimmerman's Registry Explorer)
- SFC / DISM / chkdsk - One-click
sfc /scannow,DISM /RestoreHealth,DISM /StartComponentCleanup(WinSxS),chkdskwith live stdout streaming - Font + Icon cache rebuild - Fixes broken cache corruption without a reboot
- Per-app repair -
winget repair <id>andmsiexec /fa {ProductCode} /qnfor reinstall-without-data-loss
- Before/after snapshot - Captures filesystem + registry manifest before and after a traced installer; the diff becomes a precise per-app removal list
- Replay uninstall - "Forced Uninstall" references the exact manifest instead of heuristic name-matching and skips replay files whose created-object identity, size, timestamp, or SHA256 no longer matches the captured identity. Legacy manifests and diagnostic-only journal evidence cannot be replayed.
- Diagnostic journal evidence - The optional USN/Sysmon trace records parent-resolved filesystem changes and installer-process-tree registry activity for review, while authoritative pre/post snapshots decide what can be replayed.
- Manifests persisted in
%LocalAppData%\DeepPurge\Snapshots\<name>.manifest.json(or./Data/Snapshots/in portable mode)
- winapp2.ini integration - Parses the community-maintained winapp2.ini database (2,500+ third-party cleaners). Updates record schema/source/commit/SHA256/trust provenance, show expanded file/registry target diffs, retain a last-known-good backup, restore it if the metadata commit fails, and protect Windows package-manager state such as the WinGet pin database.
- Validated custom JSON cleaners - Define versioned
*.cleaner.jsondocuments with schema linting, risk labels, origin/SHA256/trust facts, expanded target previews, registry scope checks, and estimates. Invalid or unsafe files are quarantined; valid definitions are copied to LastKnownGood. Usedeeppurgecli cleaners schemaanddeeppurgecli cleaners validate <file>beforelist|preview|run [--dry-run].
- Three-stage hash - Group by exact byte-size → XXH3 first-MB head-hash → XXH3 full-file for remaining collisions. Skips reparse points / junctions to avoid infinite loops. (algorithm from Czkawka / fdupes)
- Explicit keeper and identity revalidation - Select the retained copy in each GUI group, or pass
--reference-folderto protect a known-good directory from CLI duplicate removal. Every pending candidate is re-statted and fully re-hashed before deletion; changed groups abort safely and report exact skipped/failed counts.
- System health score - Assesses 4 categories (Junk Files, Privacy, Startup Impact, Disk Space) with 0-100 scores and A-F grade
- Portable app detection - Scans Desktop, Downloads, PortableApps folders, and removable drives for standalone executables not tracked by any installer. Shows with a "Portable" source badge. (only Uninstalr previously offered this)
- Game platform detection - Discovers Steam games (via
libraryfolders.vdf+appmanifest_*.acf), Epic Games (via.itemmanifests), and GOG Galaxy titles (via registry). Games appear in the unified programs list with platform badges. - Game removal safety - Discovered games expose their launcher/source identity and remain non-actionable until DeepPurge can invoke the platform's native uninstall operation.
- Bundleware / sideload detection - Flags programs installed on the same day from a non-trusted publisher that appear as the sole representative of their publisher — likely bundled silently with other software.
- OEM bloat scoring - Flags likely OEM support/trial utilities while suppressing driver and firmware components
- BAM remnant discovery - Reads Windows Background Activity Moderator data to find previously-executed binaries that are no longer installed. Available via
deeppurgecli orphans --remnants.
- Windows component cleanup - Scans ~15 removable components (wallpapers, sample media, help files, MSI patch cache, delivery optimization, WER reports, font cache, log folders, Windows.old) with per-item sizes and delete through SafetyGuard.
The GUI surface is available in Expert mode;
deeppurgecli slimis scan-only by default and requires--deletefor mutation (--dry-runpreviews the selected policy).
- Context menu -
deeppurgecli register-shelladds "Uninstall with DeepPurge" to the right-click menu for.exefiles.unregister-shellremoves it. The GUI accepts--target <path>to pre-populate the forced-uninstall panel. - Expert / Safe mode - Toggle visibility of advanced operations (secure delete, advanced scan, registry hunter, service deletion). Persists between sessions via
settings.json. - Versioned settings import/export - Move excluded paths, cookie whitelist, program notes, privacy retention, and safety defaults between installed/portable deployments with schema metadata, redacted previews, validation errors, and rollback backups.
- System Restore Points - View, create, and manage restore points
- Automatic restore point creation before uninstall operations (one per batch in bulk mode — Windows throttles SRSetRestorePoint)
- Deletion Recovery panel - list deletion manifests, preview recorded file/registry deletions, and run dry-run or live restores; registry rollback accepts only the exact SHA-256-bound artifact named by a versioned operation record
- Registry Backups panel - Open the ACL-protected
%ProgramData%\DeepPurge\RegistryBackupsstore; every artifact binds its hive, subkey/value, object identity, owner/DACL, and operation ID, and legacy manifests cannot auto-discover a.regfile - Recycle Bin for ordinary file cleanup through
IFileOperationwhere supported, with explicit permanent-delete and secure-delete outcomes - Typed cleanup results distinguish preview, recycled, permanent, secure, queued, skipped, failed, and cancelled items; only confirmed mutations enter recovery manifests
- Administrative mutation ledger for firewall, PATH, autorun, service, scheduled-task, shell, and DeepPurge schedule changes with before/after state, rollback data, verification, and exact typed outcomes
- Installed-program removal capability/trust facts are visible in the GUI, CLI list/uninstall output, and CSV/HTML/JSON exports before an action reaches the elevated process
- Protected services, firewall rules, PATH entries, registry roots, and Microsoft scheduled-task paths are skipped before production mutation; unsupported rollback-sensitive actions are disabled in the WPF surface
- Confidence-based leftover classification (Safe / Moderate / Risky)
- Leftover ownership evidence and conflict review: another product's install root, protected Windows scope, and weak single-source matches are never auto-removable
- Centralized
SafetyGuardblocks every destructive call against Windows, Program Files, System32, and protected registry hives - Windows-owned helpers resolve only from protected absolute system paths; unknown relative executables and ambiguous registered-uninstaller command lines fail closed
- DeepPurgeCli.exe - Full headless surface. Every workflow (uninstall, clean, repair, driver/shortcut/duplicate scans, install-trace, winapp2 run, update check) is scriptable. Exit codes follow BCU convention (0/1/2/13/1223).
- Scheduled cleaning - Registers Task Scheduler 2.0 exec actions in
\DeepPurge\with separate executable/argument fields. Highest-privilege jobs run a content-addressed single-file CLI copy from an administrator-owned%ProgramData%store; GUI/CLI diagnostics expose the registered principal, action, and ACL trust. Legacy wrappers migrate to disabled dry-run definitions without being read or executed. - Tray icon - DeepPurge can minimize to the Windows tray, show scheduled-cleaning status, refresh schedule notifications, and launch a background dry-run clean preview.
- Portable mode - Drop a file named
DeepPurge.portablenext to the exe; every setting / backup / log redirects to./Data/beside the binary. USB-stick / field deployment ready. (BCU pattern) - Update checker - Hits GitHub Releases API to flag available upgrades; never blocks startup.
Ten built-in themes with runtime switching and persistence between sessions:
- DeepPurge Slate (graphite/cyan, default)
- Catppuccin Mocha (dark)
- OLED Black (pure black, blue accent)
- Dracula (classic purple)
- Nord Polar (frost tones)
- GitHub Dark (official palette)
- Obsidian (deep black, lavender accent)
- Matrix (neon green on black)
- Arctic (light mode)
- High Contrast (WCAG AAA, bright saturated accents on pure black)
Requires the exact .NET SDK 10.0.302; global.json disables SDK roll-forward.
Install that SDK before running BUILD.bat from the project root. Restore uses
the committed package lockfiles and fails if dependency versions drift.
BUILD.bat
Output:
build\DeepPurge.exe- GUI, ~66 MB,requireAdministratormanifestbuild\DeepPurgeCli.exe- CLI, ~66 MB,asInvokermanifest (scriptable, elevate externally if needed)build\SHA256SUMS.txt- SHA256 hashes for the published release assets
Both executables are self-contained single-file x64 portable builds. Add ARM64 package entries only after matching ARM64 assets are attached to the release and covered by SHA256SUMS.txt.
DeepPurgeCli list # TSV-formatted installed programs
DeepPurgeCli uninstall "Some App" --silent # Silent uninstall with auto-flag detection
DeepPurgeCli uninstall "Git.Git" --dry-run # Preview source-native uninstall command
DeepPurgeCli clean junk evidence --dry-run # Preview what would be freed
DeepPurgeCli health --json # Score junk, privacy, startup, and disk hygiene
DeepPurgeCli slim --dry-run # Preview selected Windows component cleanup
DeepPurgeCli repair sfc # sfc /scannow
DeepPurgeCli drivers --old # Old driver packages ready to remove
DeepPurgeCli drivers --remove oem42.inf --dry-run # Preview export-first removal
DeepPurgeCli drivers --remove oem42.inf # Export, hash, and remove; prints rollback operation id
DeepPurgeCli drivers --rollback <operation-id># Validate hashes and reinstall the recorded INF
DeepPurgeCli startup-impact # High/Medium/Low per autorun process
DeepPurgeCli duplicates C:\Users\you # Duplicate file groups
DeepPurgeCli duplicates C:\Users\you --delete --reference-folder C:\Users\you\Documents\Keep --dry-run # Preview guarded removal
DeepPurgeCli snapshot trace "MyApp" setup.exe # Record install delta
DeepPurgeCli update-winapp2 --check-only # Show local/remote database provenance
DeepPurgeCli update-winapp2 # Update with an expanded-target diff and rollback backup
DeepPurgeCli winapp2 .\winapp2.ini --dry-run # Run community cleaner database
DeepPurgeCli schedule add --name Nightly --freq weekly --time 03:00 --day Mon --args "clean junk evidence"
DeepPurgeCli schedule list
DeepPurgeCli schedule migrate # Replace legacy wrappers with disabled protected dry-runs
DeepPurgeCli schedule remove --name Nightly
DeepPurgeCli settings prune --dry-run # Preview expired logs/activity/manifests to remove
DeepPurgeCli settings import settings.json --preview # Validate an import without changing local settings
DeepPurgeCli check-update
DeepPurgeCli doctor # Environment self-test (16 checks, including package sources)dotnet test tests/DeepPurge.Tests/DeepPurge.Tests.csprojThe current suite has 454 tests covering parser routing, protected helper resolution, original-user process brokering, package-manager command builders and source diagnostics, cleaner schema validation, cleanup failure reporting, release validation, privacy retention, SafetyGuard block/allow lists, handle-bound deletion/rollback, protected Task Scheduler registration and migration, versioned settings import/export contracts, capability-to-surface routing, observable enrichment updates, static WPF accessibility/resource-drift checks, and support-bundle redaction. Release builds run the suite, project-level dependency audit, and locked restore by default; use Build.ps1 -SkipTests only for an explicitly test-free inner-loop publish.
- winget —
packaging/winget/SysAdminDoc.DeepPurge.yaml(submit viawingetcreate) - Scoop —
packaging/scoop/deeppurge.json(drop into a personal bucket) - GitHub Releases — build locally with
BUILD.bat/Build.ps1, attach both executables plusSHA256SUMS.txt, then runBuild.ps1 -ValidateReleaseOnly -ReleaseChecksumsPath <path-to-SHA256SUMS.txt>before publishing package manifests; the default Release path runs locked restore, tests, and the project-level NuGet dependency audit - Dependency audit — run
Build.ps1 -AuditDependenciesOnlyto report outdated packages and block vulnerable or unreadable dependency graphs across Core, App, CLI, and Tests without using the solution-leveldotnet listpath - Authenticode signing —
./Build.ps1 -Sign -CertPath signing.pfx -CertPassword (Read-Host -AsSecureString)
- Windows 10/11
- Run as Administrator (enforced by the manifest)
- .NET SDK
10.0.302(build only; exact version required) - Optional: winget (auto-detected;
doctorreports version/list parser health when unavailable or degraded) - Optional: Scoop in
%USERPROFILE%\scoop\apps(filesystem-scanned;doctorreports root availability and app count) - Optional: Chocolatey (
choco.exeon PATH;doctorreports version/list parser health when unavailable or degraded)
MIT License