Ballast

Give your disk its space back.

Ballast is a menu bar app for macOS that finds the disk space developer tools leave behind, and gives it back safely.

Download Ballast View on GitHub

Free · open source · macOS 14+

Ballast's main window listing Ruby versions, with the default and pinned versions marked and three old versions ticked for removal

Old Ruby and Node versions, node_modules in projects you forgot about, simulator runtimes, Docker images, package caches, AI models you tried once. Developer tools leave tens of gigabytes behind, and most clean-up apps either can't see them or can't tell what's still in use.

Ballast knows which version your projects pin, which worktree still has unpushed work and which database is running, and it shows you exactly what it will do before it does anything.

What it finds

More than 60 tools, across everything developer work leaves on a disk.

Developer toolchains
Ruby, Node and Python versions (rvm, rbenv, chruby, frum, asdf, mise, nvm, fnm, n, nodenv, pyenv, uv), conda environments, pipx apps and Poetry, Pipenv and Hatch virtualenvs; Java, Go, Rust, Elixir, PHP and other languages (SDKMAN, goenv, rustup, asdf, mise); Homebrew leftovers and runaway service logs, GitHub Actions runners.
Xcode and Android
Xcode versions, simulators, runtimes, device support for iOS, watchOS, tvOS and visionOS, simulator logs and docs; Android system images, NDKs and emulators.
Containers and VMs
Docker images, volumes and build cache, Docker Desktop itself, Colima, Lima, minikube, Podman and Rancher Desktop machines, Parallels and VMware virtual machines.
Project leftovers
Build output in projects you haven't touched for a while (node_modules, target, .venv, .next, Pods, .gradle, _build and more), and git worktrees whose pull request is merged.
Caches
Package manager caches (npm, Yarn, pnpm, Bun, Deno, pip, uv, Poetry, conda, Cargo, Go modules, Gradle, Maven, sbt, CocoaPods, Carthage, SwiftPM, NuGet, Composer and more) and large app caches.
Local databases
Postgres, MySQL, Redis and others from Homebrew, Postgres.app and DBngin.
AI models
Ollama, Hugging Face, Whisper, LM Studio, GPT4All, Jan, llama.cpp, DiffusionBee and PyTorch Hub models.
AI tools and editors
Caches and old workspace data of Cursor, VS Code, Windsurf and the Claude app, old Claude Code versions, and Claude Code history for projects that no longer exist.
Apps
Your apps with their size and when you last opened them, removed together with their leftovers and background helpers.
Large personal files
The biggest files in your home folder, only when you ask, with files in iCloud Drive marked.

A quick tour

The menu bar icon shows free space at a glance. Click it for a summary of the biggest concerns and what's safe to reclaim, or open the main window to review and remove things.

The menu

Free space, what's safe to reclaim, the biggest concerns and the Trash, one click from the menu bar.

The Ballast menu: free space, what's safe to reclaim, the biggest concerns and the Trash

Safe to reclaim

Everything Ballast is sure you can remove: caches, old downloads and build output that come back when needed, and nothing you use. Review and remove a group at a time.

Safe to reclaim: 38.75 GB of simulator runtimes, package caches and old Ruby versions, grouped by tool, each group with a Review and remove button

Project leftovers

Which node_modules and other build folders belong to projects you haven't touched in a while, and which git worktrees are done with: their pull request is merged and nothing is left uncommitted or unpushed.

Project leftovers: idle node_modules folders and git worktrees, badged with merged or open pull requests and uncommitted changes

AI models

Every model you've downloaded, wherever the tool put it. Ollama models are removed with ollama rm, and a blob two models share stays until neither needs it.

AI models: Ollama, Hugging Face and LM Studio models with their sizes, two ticked for removal

Your iPhone is a disk too.

Plug in an iPhone by USB and Ballast shows what's using its storage, including what it can't see over USB.

  • It moves large videos and photos to the Mac, checking each copy before it deletes the original from the phone.
  • With iCloud Photos on, deleting removes them everywhere. Ballast warns you first.
  • It can uninstall apps from the phone.

Needs brew install libimobiledevice ideviceinstaller.

Ballast showing a connected iPhone and what is using its storage

Cleaning up should be hard to regret.

The confirmation sheet: a Read this first box saying Ruby 3.2.2 is pinned by billing-api, an I understand checkbox, and each command marked Deleted for good

Install

Needs macOS 14 or later.

From a release

Download Ballast-x.y.z.zip from Releases, unzip it, and move Ballast.app to ~/Applications or /Applications.

Ballast is not notarised, so macOS blocks it the first time. Either open System Settings → Privacy & Security and click Open Anyway, or run:

xattr -dr com.apple.quarantine ~/Applications/Ballast.app

From source

You need Swift 6. The Command Line Tools are enough (xcode-select --install); you don't need Xcode.

git clone https://github.com/linearza/ballast.git
cd ballast
make install

This builds Ballast, copies it to ~/Applications and opens it.

Asks for nothing.

No account, no analytics, and no permissions up front. If a step needs more, such as Full Disk Access for a protected location, Ballast says so when you reach that step. The network is used for two things only: a daily check of GitHub for a newer Ballast and, if you have the GitHub CLI signed in, asking GitHub whether a worktree's pull request is merged.