- JavaScript 33%
- Python 30.2%
- CSS 15.8%
- C 10.5%
- Swift 7.7%
- Other 2.8%
Zoomable sunburst of disk usage for macOS: a getattrlistbulk-based C scanner, a stdlib Python engine with a localhost API, a canvas/d3 web UI and a Swift WKWebView app wrapper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| app | ||
| web | ||
| .gitignore | ||
| build.sh | ||
| orbit.py | ||
| README.md | ||
| scan.c | ||
Orbit
A disk space visualizer for macOS in the spirit of DaisyDisk: a zoomable sunburst of your disk, a cleanup tray you drag things into, and suggestions for caches and toolchains that are safe to clear.
Run it
./build.sh # builds ~/Applications/Orbit.app (+ ./orbit-scan)
open ~/Applications/Orbit.app
Or without the app wrapper, in your browser:
python3 orbit.py # http://127.0.0.1:7311
For a complete picture, give Orbit.app (or your terminal) Full Disk Access in System Settings › Privacy & Security.
Using it
- Hover a segment to see its size; click a folder to zoom in, click the center (or press Esc / Backspace) to go back up.
- Drag any segment or list row onto the Cleanup tray at the bottom right, then Move to Trash. Nothing is deleted outright; empty the Trash (top bar) to actually free the space.
- Right-click for Reveal in Finder, Quick Look, Copy Path.
- The Suggestions tab lists caches, toolchains, installers,
node_modulesand big files, with the right cleanup command where a tool owns the data. - The palette button switches between Spectrum and Mono colors.
How sizes are measured
Sizes are what deleting an item would actually free: APFS clones (e.g. copied repos or git worktrees) share blocks, so Orbit counts each file's private size and shows the shared part separately ("+72 GB shared with clones"). For the startup disk, "Hidden & system" accounts for the other APFS volumes (Preboot, Recovery, VM swap, ...) plus clone-shared data, snapshots and unreadable folders, so the ring adds up to the disk's real usage.
Layout
| Path | What |
|---|---|
scan.c |
orbit-scan: multithreaded walker built on getattrlistbulk(2) |
orbit.py |
tree, suggestions, Trash actions, local HTTP API (stdlib only, Python 3.9+) |
web/ |
UI: canvas sunburst (d3-shape for arcs), sidebar, cleanup tray |
app/ |
Swift wrapper (main.swift), Info.plist, icon generator |
The API only answers on 127.0.0.1 with a per-launch token, and refuses to trash system folders, top-level home folders and the scan root.