Disk Space Analyzer
See exactly what is eating your disk space — scanned locally, nothing uploaded.
Who it's for
Anyone staring at a full drive wondering where the space went — media hoarders, developers with node_modules everywhere, videographers with 100 GB of rushes.
What it does
- Visual treemap of your storage — instantly shows which folders and file types dominate, so the big wins are obvious without reading a table of numbers.
- Find the junk patterns — largest files list, old-file detection, and duplicate detection (by size+name) surface the usual suspects: old exports, duplicate downloads, cache folders.
- Safe cleanup workflow — analysis only by default; you decide what to delete using your own file manager. Nothing is removed by the tool itself.
How it works
Point it at a folder or drive. It scans locally and renders a treemap plus largest-files and old-files lists. Nothing is deleted by the tool — you clean up using your own file manager.
| Platform | Result | Notes |
|---|---|---|
| Windows / Mac — Chrome, Edge, Brave | Full experience. Pick a folder and its complete recursive tree is scanned live via the File System Access API, with a real progress readout for large folders. Every rectangle's area is genuinely proportional to real byte size. | Visually confirmed in the real, installed Google Chrome app on this Mac (empty state and capability banner render correctly). The full functional flow — recursive walk, squarified-treemap layout, hover tooltips, real mouse-click drill-down, breadcrumb navigation, keyboard navigation (arrow keys + Enter + Backspace), and per-entry error handling — was run end-to-end via Playwright driving the real Chromium engine against a real `FileSystemDirectoryHandle` obtained from the Origin Private File System (OPFS), substituted only for the native OS folder-picker dialog itself, which no browser-automation tool can script (a documented, general limitation, not specific to this tool). Rectangle areas were checked against the exact bytes written to OPFS and matched real proportions within floating-point tolerance at every level of a multi-folder nested tree. A synthetic 8,000-file, two-level-deep folder scanned in 709ms. A separate mock-handle test proved that a folder throwing a permission error partway through iteration, and a single file failing to read, are both caught and flagged without losing or crashing the rest of the scan — the sibling `Readable` folder next to the broken ones was still walked correctly (150-byte total, exactly as expected). |
| Mac / Windows — Safari or Firefox | Full recursive treemap, not just a degraded fallback. Selecting a folder via the picker input hands this page every file's full relative path and byte size up front — since this tool never needs write access, only sizes, the resulting map is exactly as complete as the Chromium path. The two real, verified differences: no live progress readout during the picker's own work (the browser does that part invisibly before JS sees anything), and a folder that is empty all the way down through its entire subtree doesn't appear in the tree at all (browsers only report actual files, never bare empty directories, through this API). | Run completely end-to-end, for real, in Playwright's actual bundled WebKit (the same engine real Safari uses) and actual bundled Firefox (Gecko), against a real 111-file, 519MB on-disk test folder with genuinely varied nesting and file sizes. Every top-level and nested folder's total came back byte-for-byte identical to an independent Python `os.path.getsize`-based recursive total in both engines. The full interactive flow — rendering, a real mouse click on the "Photos" rectangle, drilling into its `raw` subfolder, breadcrumb, legend — was also verified working with zero console errors in both engines. Separately, the empty state and capability banner were visually confirmed in the real, installed Safari.app and Firefox.app on this Mac (screenshots: `screenshots/phase3-safari-empty-state.png`, `screenshots/phase3-firefox-empty-state.png`). One specific scenario was not automatable in Firefox: the test folder also contained a real `chmod 000` permission-restricted subfolder, which both Chromium and WebKit silently and correctly skip during folder selection (confirmed) — but Playwright's own Firefox directory-upload automation hung indefinitely trying to enumerate that same restricted folder (confirmed reproducible: instant success on an identical tree with the restricted folder removed, 60+ second hang with it present). This is a Playwright+Firefox tooling limitation on the test automation side, not a confirmed behavior of real, human-driven Firefox — real Firefox is expected to match Chromium and Safari's confirmed silent-skip behavior (same underlying OS-level folder enumeration), but this specific edge case could not be independently automated-verified in Firefox and is flagged honestly rather than claimed as tested. |
| iOS (Safari, Chrome, or any iOS browser) | Expected: the same full-recursive-scan-via-picker behavior as Mac Safari, since all iOS browsers share Safari's WebKit engine and the same File System Access API gap. | Not verified — no iOS device was available to test on. Flagged as an open item, not claimed as tested. |
| Android — Chrome | Full experience — works, same as desktop Chrome. | Tested on a real Android device in Chrome. |
| Small screens / touch | Genuinely checked, not assumed: a 390×844px touch-enabled mobile viewport was emulated and the tool was driven through a real scan and render at that size. No horizontal overflow on either the empty state or a fully rendered treemap; the layout reflows correctly. | Verified via Playwright's device/viewport emulation with `hasTouch`/`isMobile` set, checking `scrollWidth` against `innerWidth` after both an empty-state render and a full treemap render. Screenshots: `screenshots/mobile-01-empty-state.png`, `screenshots/mobile-02-treemap.png`. |
| Keyboard / focus | The canvas is a real focusable, `tabindex="0"` element with a visible focus ring; arrow keys move a selection (drawn as a highlighted outline) between items in reading order, Enter drills into a selected folder, Backspace/Escape goes up a level, and every action is announced via an `aria-live` status region for screen readers. | Checked with real Playwright keyboard events (`ArrowRight`, `Enter`, `Backspace`) against a live-rendered treemap, confirming both the internal navigation state and the visible selection ring change correctly (screenshot: `screenshots/07-keyboard-selection.png`) — not just read from the code. |
| Light / dark mode | Both checked and correct: color tokens, treemap category colors, and text contrast all have explicit dark-mode values and were rendered, not just declared in CSS. | Verified via Playwright's `colorScheme: 'dark'` context emulation, rendering both the empty state and a full treemap (screenshots: `screenshots/dark-01-empty-state.png`, `screenshots/dark-02-treemap.png`, `screenshots/dark-03-drilled-into-photos.png`). |
Limits (stated plainly)
- Runs in your browser — it works on the files you explicitly give it, not on folders in the background.
- Free-tier limits apply (see the free version); the paid tool removes them.
Privacy proof
Runs entirely in your browser. No server, no account, no analytics — the files you work on are processed locally in memory and never leave your computer.
Try it free in your browser → Open the free version of this tool — runs entirely in your browser, nothing uploaded.
- ✓ Runs 100% offline in your browser
- ✓ Single HTML file — no install, no dependencies
- ✓ No account, no telemetry, no tracking
- ✓ Buy once — yours forever
After checkout you get an instant download link. Open the file in any modern browser and it just works.
Pairs well with
✓ runs entirely on your device — Wi-Fi off? Still works.
accounts sign-ups cloud uploads none
✓ your files stay where you put them
Prefer to try before buying? The browser versions of every tool run free at tools.untracked.tools — no upload, ever.