Backspacer

Backspacer

I got some if you need it.

A small macOS app that finds the caches, build output and tooling leftovers that silently eat a developer's disk, sorts them by how safe they are to remove, and deletes only what you tick.

  • macOS 13 or later
  • Apple silicon and Intel
  • Notarized, no Gatekeeper warnings
  • Free for noncommercial use
Backspacer scanning a Mac: a disk meter, then the Safe to delete bucket listing Claude session data, ~/Library/Caches and ~/.cache with sizes and Details, Reveal and Delete buttons on each row

You know this row.

System Settings tells you how much, never what. Backspacer grew out of a month of chasing that number on a 245 GB MacBook Air.

Most of it was Xcode, simulators, npm, Gradle, Docker, Electron apps and the AI tools' own caches, each one rebuildable, none of them visible from where macOS puts the number. Backspacer is the catalog of everything that chase found, with a Scan button in front of it.

Five buckets, one confirmation.

Every entry is measured, explained, and placed by how safe it is to remove. You tick what goes; the dialog lists every item and its size before anything happens.

Safe to delete

Caches and build output every app rebuilds on its own. No cost.

removed for good

Regenerable

Comes back on the next build or install. Costs one slow build.

removed for good

Your call

Real data or tooling. Delete only what you no longer use.

moved to the Trash

Keep

Needed for current work. Shown so the numbers add up.

read-only

Managed by macOS

macOS manages these itself — purged automatically or SIP-protected. Shown for accounting.

read-only

What it knows about.

77 entries in the catalog today, grouped like this. Multi-path entries open a Details list with a Delete per project, per simulator, per model, per app.

  • Xcode & simulatorsDerivedData, simulator devices and runtimes, DeviceSupport symbols, archives, preview data
  • Project build outputnode_modules, Pods, .next, Android and iOS build folders, .NET bin/ and obj/ across your project folders
  • Toolchain cachesnpm, Yarn, pnpm, Bun, Gradle, Maven, NuGet, CocoaPods, Cargo, Go, pip, conda, pub
  • Caches~/Library/Caches and ~/.cache per app, Electron web caches, Homebrew downloads and orphans, logs, Trash
  • AndroidEmulator system images, virtual devices, NDK, SDK sources
  • Regrowth sourcesThe things that refill a disk: local VM images, agent session data, a staged macOS update
  • AI tool historyClaude Code, Codex, Gemini CLI, Cursor and Antigravity session data
  • App dataiPhone backups per device, Ollama models per model, Notion, Steam, Spotify, Safari, Telegram
  • VS CodeCaches, workspace storage per project, dictation models
  • Virtual machinesParallels and UTM, measured and explained, deleted from their own apps
  • Your filesScreenshots and Downloads: measured, never deleted by the app
  • Managed by macOSTime Machine local snapshots, Apple Intelligence models, developer documentation

Built to be trusted with a disk.

An app that deletes folders has to earn it. The rules are in the source, and the test suite runs the safety gate over every path in the shipped catalog.

  • The page never names a path.

    Every disk operation takes a catalog entry id. The Swift side resolves it from its own copy of the catalog, so a bug or injection in the UI cannot delete anything the catalog doesn't already describe.

  • A second gate on every path.

    Home, Documents, Desktop, Pictures, Mail, Messages, Keychains, iCloud Drive, .ssh and anything outside the allowed roots are refused at any depth, after symlinks are resolved.

  • Your call goes to the Trash.

    Real data is moved to the Trash so Finder can put it back. Caches and build output are removed for good, because parked in the Trash they would reclaim nothing.

  • Nothing runs as root without the system dialog.

    Admin items go through macOS's own password prompt. The app never sees a password and there is no helper tool to trust.

  • The threshold hides, it doesn't just filter.

    Entries under the size you choose leave the list and can't be selected until you lower it again.

  • A plain-text log of what it did.

    Every scan and delete, the exact commands, failures. About → Reveal log. Nothing is ever sent anywhere.

Read it before you trust it.

The source is public so you can check what the app does before handing it your disk, build it yourself, and propose catalog entries. The UI runs in a plain browser with a mock bridge; the app is a Swift package with no dependencies.

Backspacer is free for noncommercial use under the PolyForm Noncommercial License 1.0.0: use it, share it, read and modify the source. Commercial use needs a separate license from the author. The name and icon aren't licensed, so a modified build must be renamed. Full terms in LICENSE; pull requests are accepted under Apache-2.0.

The most useful things you can send are a bug report with the log attached, and a catalog entry: what the folder is, where it lives, which bucket and why, what brings it back. The issue templates ask exactly those questions.

# build the app from source (Xcode 16 or later)
git clone https://github.com/anton-g-kulikov/backspacer.git
cd backspacer
scripts/build-app.sh
open build/Backspacer.app

# or just try the UI, no Xcode needed
python3 -m http.server 8765
open http://localhost:8765/web/index.html