Exodrive

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.

This Mac82 GB free
38 GB in caches
move
External drive1.8 TB free
6 GB moved here

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.

  1. Copy

    The cache goes to the drive with its permissions and times.

  2. Check

    Exodrive reads every file on both sides. One different byte stops the move.

  3. Record

    The move goes into a ledger, so a move back finds it later.

  4. Switch

    The tool reads the new path at its next start.

  5. 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.

RuleWhat 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.

ToolchainWhat movesHow the tool finds it
npmGlobal cachenpm config set cache
pnpmPackage storepnpm config set store-dir
yarn 1.xCache folderyarn config set cache-folder
Cargoregistry/ and git/Symbolic link
GoGOCACHE, GOMODCACHEgo env -w
Buninstall/cacheSymbolic link
uvCache and Python toolchainsSymbolic link
pipCachepip config set global.cache-dir
Docker DesktopDocker.rawSymbolic link to the file
OrbStackVM data and imagesdata_dir
ColimaVM disksSymbolic link to ~/.colima
OllamaModel storeSymbolic link to the models folder
Hugging Facehub/ under HF_HOMESymbolic link
LM StudioModel storeSymbolic link to the models folder
XcodeDerived Data, Archives, Device Support, Previews, and the Xcode cacheSymbolic link for each folder
Mavenrepository/Symbolic link
Gradlecaches/ and wrapper/dists/Symbolic link
CocoaPodsCache and spec reposSymbolic link
SwiftPMPackage cacheSymbolic link
Dart and FlutterPub cache downloads and git checkoutsSymbolic link for each folder
AndroidBuild cacheSymbolic link
CondaEvery package folder that conda info reportsSymbolic link for each folder
Homebrewdownloads/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.