Make room on the disk that came with your Mac.
Exodrive moves a developer cache to an external drive. It checks every byte first. It frees the space only after the copy passes.
Apache 2.0. Free to use. The macOS window needs macOS 13 or later.
An example. The window reads the real numbers.
Every move runs the same five steps
The order is the safety: the local cache stays until the copy is proven.
-
Copy
The cache goes to the drive with its permissions and times.
-
Check
Exodrive reads every file on both sides. One different byte stops the move.
-
Record
The move goes into a ledger, so a move back finds it later.
-
Switch
The tool reads the new path at its next start.
-
Free
Exodrive deletes the local copy. The space is yours again.
Exodrive stops before it damages data
Each rule refuses the move. None of them continues in a weaker mode.
| Rule | What happens |
|---|---|
| Filesystem | Exodrive uses APFS, HFS+, ext2, ext3, ext4, btrfs, zfs, xfs, f2fs, bcachefs, or NTFS. It refuses exFAT and FAT32. |
| Running tool | A package manager or container engine that runs stops the move. Stop it first. |
| Shell variable | A cache path in your shell wins over the tool setting. Exodrive names the variable and stops. |
| Binaries | Exodrive moves caches only. Your binaries stay where they are. |
| Second move | An item in the ledger stays where it is. Move it back first. |
What Exodrive moves
Each toolchain uses its own setting or a symbolic link. The card in the window names the change.
| Toolchain | What moves | How the tool finds it |
|---|---|---|
| npm | Global cache | npm config set cache |
| pnpm | Package store | pnpm config set store-dir |
| yarn 1.x | Cache folder | yarn config set cache-folder |
| Cargo | registry/ and git/ | Symbolic link |
| Go | GOCACHE, GOMODCACHE | go env -w |
| Bun | install/cache | Symbolic link |
| uv | Cache and Python toolchains | Symbolic link |
| pip | Cache | pip config set global.cache-dir |
| Docker Desktop | Docker.raw | Symbolic link to the file |
| OrbStack | VM data and images | data_dir |
| Colima | VM disks | Symbolic link to ~/.colima |
| Ollama | Model store | Symbolic link to the models folder |
| Hugging Face | hub/ under HF_HOME | Symbolic link |
| LM Studio | Model store | Symbolic link to the models folder |
| Xcode | Derived Data, Archives, Device Support, Previews, and the Xcode cache | Symbolic link for each folder |
| Maven | repository/ | Symbolic link |
| Gradle | caches/ and wrapper/dists/ | Symbolic link |
| CocoaPods | Cache and spec repos | Symbolic link |
| SwiftPM | Package cache | Symbolic link |
| Dart and Flutter | Pub cache downloads and git checkouts | Symbolic link for each folder |
| Android | Build cache | Symbolic link |
| Conda | Every package folder that conda info reports | Symbolic link for each folder |
| Homebrew | downloads/ | Symbolic link |
Exodrive does not move ~/Library/Developer/CoreSimulator/Devices.
A link stops Xcode from creating simulator devices.
Install
Install the newest release with one command:
curl -fsSL https://jungley8.github.io/exodrive/install.sh | sh
On Windows, run this command in PowerShell:
irm https://jungley8.github.io/exodrive/install.ps1 | iex
The script downloads the archive for this machine and checks it against SHA256SUMS. A mismatch stops the install. Read it first: install.sh or install.ps1. The macOS bundle is ad-hoc signed, so a download from a browser asks for your confirmation on the first start: right-click the app, then choose Open.
Prefer an archive? Download it from the releases page.
Where Exodrive runs
The promise is narrow on purpose: one platform carries a promise today.
macOS 13 or later
The window ships here. Every test runs here.
Linux
The command line tool builds and runs. CI tests it on Ubuntu.
Windows
The window and the command line tool ship. No test runs on Windows.