A 256 GB Mac at 96 percent full, measured folder by folder
A developer's 256 GB MacBook with 7.4 GB free, measured end to end. What filled it, what was removable, and the 77 GB Terminal could not even see.
Most storage advice is written from a big machine. This is the opposite: a 256 GB MacBook used for web, mobile and AI development, measured on the day its data volume reached 96 percent.
The fixed part: macOS itself
| Volume | Used |
|---|---|
| System (sealed, read only) | 12.7 GB |
| Preboot | 9.0 GB |
| VM (swap and sleep image) | 7.5 GB |
| Recovery | 1.3 GB |
About 30 GB goes before a single file of yours. The volumes are explained in the other volumes in your container.
The data volume
| Where | Size |
|---|---|
| Home folder, all of it | 80.8 GB |
/Applications | 14 GB |
/Library | 13.6 GB |
/opt/homebrew | 9.3 GB |
/private/var | 8.6 GB |
/usr/local | 2.8 GB |
Counted by du | 129 GB |
| Not visible to Terminal | about 77 GB |
The 77 GB nobody could see
du ran without Full Disk Access. macOS answered Operation not permitted for Mail and Messages, and reported the Photos library in ~/Pictures as nearly empty even though it was there. That privacy protection is why a Terminal measurement of a Mac always comes out low, and why any storage tool needs Full Disk Access to be honest. It is also the space most likely to be personal: photos, message attachments and mail.
Inside the 80.8 GB home folder
| Folder | Size | Removable? |
|---|---|---|
~/Library | 26.7 GB | Partly. Application Support 14.3 GB, Caches 6.2 GB |
| A work projects folder | 7.9 GB | 6.6 GB of it: node_modules 5.3 GB, build output 1.3 GB |
~/Documents | 7.6 GB | 5.6 GB of it: node_modules 2.4 GB, build output 3.2 GB |
~/.npm | 4.8 GB | Yes, all of it |
~/.nvm | 4.5 GB | Eight Node versions, from 10.24.1 to 24.9.0 |
~/.cache | 3.4 GB | Mostly an abandoned install |
~/Movies | 3.3 GB | Personal |
~/.devin, ~/.windsurf, ~/.openclaw | 6.2 GB | AI tool data |
~/Downloads | 2.5 GB | Mostly installers |
~/.rustup | 1.7 GB | Unused compile targets |
What was actually removable
Counting only things that regenerate or were plainly leftovers, and not a single personal file:
| What | Size |
|---|---|
| node_modules across all projects | 7.7 GB |
| Build output across all projects | 4.6 GB |
~/.npm download and npx caches | 4.9 GB |
| Chrome's disk cache | 3.8 GB |
An abandoned install in ~/.cache | 1.9 GB |
| A cross compiler used once | 1.4 GB |
| Seven older Node versions under nvm | 1.3 GB |
| A stuck app update | 0.8 GB |
| A duplicate JDK and an old one | 0.8 GB |
| Total | about 27 GB |
On a Mac with 7.4 GB free, that is the difference between a machine that cannot install an update and one with room to work. The lesson from this Mac: on a developer's machine the space is in tools, not documents. Node was installed three separate ways here, through nvm, through a second version manager and through Homebrew, and each kept its own copies of everything.
For the long-term setup on a small disk, see the small SSD guide, and for the order to look in, where did my Mac storage go.
Common questions
Is 256 GB enough for a developer Mac?
It works, but it needs regular cleanup. On the Mac measured, about 30 GB went to macOS, and about 27 GB of the rest was regenerable caches and leftovers.
Why does Terminal show less used space than the Mac reports?
Because without Full Disk Access, macOS hides Photos, Mail, Messages and some app data from Terminal. On this Mac that was about 77 GB.
What fills a developer's Mac the most?
Tools rather than documents: package caches, old runtime versions, build output, AI tool data and app caches.
How much space does macOS itself use?
About 30 GB on the Mac measured: 12.7 GB system, 9.0 GB Preboot, 7.5 GB swap and sleep image, 1.3 GB Recovery.