Reclaim disk space, inspect memory pressure, trim startup load, and act on system recommendations from one native desktop app.
No telemetry · Native desktop shell · Safe-by-default cleanup · Open source
| Module | Capabilities |
|---|---|
| Overview | Desktop-style summary shell with health score, reclaimable space, memory pressure, startup load, and capacity tracking. |
| Disk Cleanup | Review workflow for temp files, browser caches, crash dumps, Windows Update leftovers, and developer caches. Filtering never mutates selection. |
| Memory | Inspector for RAM pressure, top memory consumers, grouped process table, VM inventory, and problem-process heuristics. |
| Startup | Grouped startup manager with impact tiers, recommendation badges, and reversible enable/disable switches. |
| Recommendations | Priority-sorted action queue with direct navigation into the relevant screen. |
The current frontend is built around a labeled nav rail, per-screen command bars, shared UI primitives, and screen hooks:
App.tsxis a thin composition layer that switches tabs and renders the shell.src/components/ErrorBoundary.tsxcatches render crashes and shows a styled recovery screen.src/components/layout/contains shell-level pieces such as the nav rail.src/components/ui/contains reusable cards, rows, badges, buttons, progress bars, tooltips, and loading/empty states.src/hooks/owns screen data and side effects so the screen components stay mostly presentational.
Every screen explicitly handles loading, empty, error, and healthy states. Hooks expose an error field so screens can render retry surfaces instead of silently dropping failures.
Important
Cleanup always stays review-first. Every target is listed with a path, category, size, and risk level before deletion.
| Risk | Policy |
|---|---|
| Safe | Temp files, caches, crash dumps, and similar data that can be regenerated automatically. Quick Clean only uses this tier. |
| Moderate | Developer caches and Windows Update leftovers that can be re-downloaded or rebuilt later. These require explicit selection. |
| Advanced | Reserved for future cleanup targets. The filter exists in the UI today, but the current backend does not emit Advanced items. |
Additional guarantees:
- Safe items are preselected in Disk Cleanup.
- Switching filters does not change the current selection.
- Quick Clean on the Overview screen only submits Safe items.
- System processes stay protected in the Memory screen.
- Startup changes are reversible because they only change launch-on-sign-in behavior.
Full policy: docs/SAFETY.md
Grab the latest build from Releases.
| Artifact | Notes |
|---|---|
System Cleaner_x.x.x_x64-setup.exe |
NSIS installer |
System Cleaner_x.x.x_x64_en-US.msi |
MSI package |
Note
Admin elevation is requested on launch because the app reads protected temp locations, enumerates system processes, and manages startup entries.
Node.js >= 18 · Rust >= 1.85 · Windows 10/11 · WebView2 Runtime
git clone https://github.com/TMHSDigital/system-cleaner.git
cd system-cleaner
npm install
npm run dev # browser preview with mock API data
npm run tauri:dev # real desktop app with Rust backend + hot reload
npm run tauri:build # production bundle| Command | Mode | Notes |
|---|---|---|
npm run dev |
Browser preview | Uses src/lib/mockApi.ts when Tauri runtime is unavailable. Useful for UI iteration and browser automation. |
npm run tauri:dev |
Real desktop app | Uses the real Rust backend via Tauri invoke() calls. Use this before shipping cleanup, memory, or startup changes. |
npm run tauri:build |
Production build | Outputs installers and release binaries under src-tauri/target/release/bundle/. |
flowchart TD
subgraph Frontend ["React 19 + TypeScript + Tailwind v4"]
App["App shell + Nav rail"]
UI["Shared UI primitives"]
Hooks["Screen hooks"]
Api["api.ts"]
Mock["mockApi.ts (dev browser only)"]
App --> UI
App --> Hooks
Hooks --> Api
Api --> Mock
end
subgraph Backend ["Rust backend — Tauri 2"]
Disk["disk.rs"]
Memory["memory.rs"]
Startup["startup.rs"]
Cleanup["cleanup.rs"]
Recommendations["recommendations.rs"]
end
Api -- "invoke() in Tauri runtime" --> Disk
Api -- "invoke() in Tauri runtime" --> Memory
Api -- "invoke() in Tauri runtime" --> Startup
Api -- "invoke() in Tauri runtime" --> Cleanup
Api -- "invoke() in Tauri runtime" --> Recommendations
Full architecture docs: docs/ARCHITECTURE.md
| Frontend | React 19 · TypeScript 5.9 · Tailwind CSS v4 |
| UI | Framer Motion · Radix UI primitives · Lucide React · clsx · tailwind-merge |
| Backend | Tauri 2 · Rust · sysinfo · winreg · windows-rs |
| Build | Vite 7 · Cargo · tauri-cli |
Project structure
src/
├── App.tsx
├── index.css
├── main.tsx
├── vite-env.d.ts
├── components/
│ ├── Dashboard.tsx
│ ├── DiskCleanup.tsx
│ ├── ErrorBoundary.tsx
│ ├── MemoryPanel.tsx
│ ├── Recommendations.tsx
│ ├── StartupManager.tsx
│ ├── layout/
│ │ └── NavRail.tsx
│ └── ui/
│ ├── AppCheckbox.tsx
│ ├── AppSwitch.tsx
│ ├── Button.tsx
│ ├── DataRow.tsx
│ ├── EmptyState.tsx
│ ├── LoadingState.tsx
│ ├── MetricCard.tsx
│ ├── PageHeader.tsx
│ ├── ProgressBar.tsx
│ ├── SectionCard.tsx
│ ├── StatusBadge.tsx
│ ├── StickyActionBar.tsx
│ └── Tooltip.tsx
├── hooks/
│ ├── useDashboardData.ts
│ ├── useDiskCleanup.ts
│ ├── useMemoryData.ts
│ ├── useRecommendations.ts
│ └── useStartupData.ts
├── lib/
│ ├── api.ts
│ ├── cn.ts
│ ├── format.ts
│ ├── mockApi.ts
│ └── types.ts
└── styles/
└── tokens.css
src-tauri/
├── src/
│ ├── lib.rs
│ ├── main.rs
│ └── commands/
│ ├── cleanup.rs
│ ├── disk.rs
│ ├── memory.rs
│ ├── recommendations.rs
│ └── startup.rs
├── tauri.conf.json
├── Cargo.toml
└── icons/
PRs are welcome. Start with docs/CONTRIBUTING.md for setup, workflow, and validation guidance.