<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sarmad Hussain</title>
    <description>The latest articles on DEV Community by Sarmad Hussain (@sarmad_hussain_771d6c87fa).</description>
    <link>https://dev.to/sarmad_hussain_771d6c87fa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3923668%2F48269d4d-224b-4706-8cee-0958e466be6e.jpg</url>
      <title>DEV Community: Sarmad Hussain</title>
      <link>https://dev.to/sarmad_hussain_771d6c87fa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sarmad_hussain_771d6c87fa"/>
    <language>en</language>
    <item>
      <title>Docker Desktop is Secretly Hoarding 30GB — Here's How to Reclaim It</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Tue, 13 Oct 2026 21:07:59 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/docker-desktop-is-secretly-hoarding-30gb-heres-how-to-reclaim-it-2b7f</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/docker-desktop-is-secretly-hoarding-30gb-heres-how-to-reclaim-it-2b7f</guid>
      <description>&lt;p&gt;You open &lt;strong&gt;System Settings → General → Storage&lt;/strong&gt; on your Mac and see the dreaded label: &lt;strong&gt;"System Data: 98 GB"&lt;/strong&gt;. You haven't downloaded movies, and your &lt;code&gt;Downloads&lt;/code&gt; folder is empty. Yet your 512GB SSD is choking.&lt;/p&gt;

&lt;p&gt;If you are a developer on macOS, the primary suspect is almost certainly &lt;strong&gt;Docker Desktop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Even with just a few containers or a local Postgres instance, Docker on macOS silently hoards 30GB to 80GB of disk space. Worse: when you delete containers or images inside Docker, &lt;strong&gt;macOS doesn't automatically get that disk space back&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, we'll dissect Docker Desktop's storage architecture on macOS, explain why the virtual disk never shrinks on its own, and provide Terminal commands to reclaim your space.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why Docker on macOS is Fundamentally Different
&lt;/h2&gt;

&lt;p&gt;On Linux, Docker runs natively against the host kernel using cgroups and overlay filesystems (&lt;code&gt;overlay2&lt;/code&gt;). Files write directly to &lt;code&gt;/var/lib/docker&lt;/code&gt; on your host drive.&lt;/p&gt;

&lt;p&gt;macOS, however, uses the Darwin kernel with no native Linux container primitives. To run containers, Docker Desktop spins up a lightweight Linux virtual machine via Apple's Hypervisor framework.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────┐
│ macOS Host (APFS Filesystem)                           │
│  ~/Library/Containers/com.docker.docker/Data/vms/...   │
│  └── 📁 Docker.raw (Virtual Disk Image: 64 GB)        │
│        ▲                                               │
│        ▼ [Block-level virtualized disk]                │
│  ┌──────────────────────────────────────────────────┐  │
│  │ Linux VM (ext4 Filesystem)                       │  │
│  │  /var/lib/docker/ (overlay2, buildkit, volumes)  │  │
│  └──────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything inside Docker—container layers, pulled images, BuildKit caches, and volume mounts—is packed into a &lt;strong&gt;single virtual disk file&lt;/strong&gt; on your host drive named &lt;code&gt;Docker.raw&lt;/code&gt; (or &lt;code&gt;Docker.qcow2&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Locating &lt;code&gt;Docker.raw&lt;/code&gt; on APFS
&lt;/h2&gt;

&lt;p&gt;The virtual disk image is typically located at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The APFS Sparse File Trap: Apparent vs. Physical Size
&lt;/h3&gt;

&lt;p&gt;If you check the file with &lt;code&gt;ls -lh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might see &lt;code&gt;64G&lt;/code&gt;. However, &lt;code&gt;Docker.raw&lt;/code&gt; is an &lt;strong&gt;APFS sparse file&lt;/strong&gt;; it only allocates physical blocks on your SSD as data is written. To see how much physical space it &lt;em&gt;actually&lt;/em&gt; consumes, use &lt;code&gt;du&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;du -sh&lt;/code&gt; reports &lt;code&gt;38G&lt;/code&gt;, Docker is actively taking 38 GB of physical flash storage.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Why Docker's Virtual Disk Never Shrinks
&lt;/h2&gt;

&lt;p&gt;Here is the fundamental architectural trap with &lt;strong&gt;docker mac storage&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When you run &lt;code&gt;docker build&lt;/code&gt; or pull an image, Linux writes blocks into the virtual disk.&lt;/li&gt;
&lt;li&gt;The APFS host sees new blocks written and expands the physical footprint of &lt;code&gt;Docker.raw&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Later, you run &lt;code&gt;docker rm&lt;/code&gt; or delete an old project. The Linux VM marks those sectors as free within its &lt;code&gt;ext4&lt;/code&gt; filesystem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;However, APFS on macOS has no automatic way of knowing that those blocks were freed inside the Linux VM.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Unless an explicit TRIM/DISCARD command is passed down through the virtual block device driver to APFS, the host file stays bloated at its peak high-water mark. Your Mac SSD thinks that space is occupied, even if 80% of Docker's internal filesystem is empty air.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Diagnosing Docker Bloat from the Terminal
&lt;/h2&gt;

&lt;p&gt;Before touching anything, let’s see what is actually consuming space inside Docker's virtual disk. Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system &lt;span class="nb"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see output similar to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          18        4         12.4GB    8.6GB (69%)
Containers      8         2         840MB     620MB (73%)
Local Volumes   14        3         14.2GB    11.1GB (78%)
Build Cache     142       0         18.9GB    18.9GB (100%)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that &lt;strong&gt;Build Cache&lt;/strong&gt; and &lt;strong&gt;Local Volumes&lt;/strong&gt; often represent the vast majority of bloat!&lt;/p&gt;

&lt;p&gt;For a granular breakdown of every individual container, image layer, and volume:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system &lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. The Step-by-Step Reclamation Guide
&lt;/h2&gt;

&lt;p&gt;Let's methodically reclaim this space, from the safest non-destructive steps to deep pruning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Purge the BuildKit Cache (The Biggest Hidden Hog)
&lt;/h3&gt;

&lt;p&gt;Modern Docker builds use BuildKit by default. BuildKit aggressively caches intermediate compilation layers, npm installs, and apt packages so future builds are fast. But over months of active development, this cache routinely balloons past 20GB.&lt;/p&gt;

&lt;p&gt;To reclaim the build cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker builder prune &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To purge &lt;em&gt;all&lt;/em&gt; build cache, including non-dangling build stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker builder prune &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
This does not delete any running containers or active project images. It only clears build cache layers. The next time you build an image from scratch, Docker will simply re-download or re-compile missing layers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2: Remove Dangling and Unused Images
&lt;/h3&gt;

&lt;p&gt;When you rebuild a Dockerfile with the same tag (e.g. &lt;code&gt;myapp:latest&lt;/code&gt;), the previous image build becomes an untagged &lt;code&gt;&amp;lt;none&amp;gt;:&amp;lt;none&amp;gt;&lt;/code&gt; dangling image.&lt;/p&gt;

&lt;p&gt;To delete dangling images:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image prune &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To delete all images not currently linked to a running container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image prune &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Remove Stopped Containers
&lt;/h3&gt;

&lt;p&gt;Every time you &lt;code&gt;docker run&lt;/code&gt; without the &lt;code&gt;--rm&lt;/code&gt; flag, the container's read-write filesystem overlay remains on disk when it exits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container prune &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Audit Dangling Volumes
&lt;/h3&gt;

&lt;p&gt;Anonymous volumes created by database containers (Postgres, Redis, MongoDB) are persistent by design. If you discard a test container without removing its volume (&lt;code&gt;docker run -v /data&lt;/code&gt;), that volume remains forever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List orphaned volumes not attached to any container&lt;/span&gt;
docker volume &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-qf&lt;/span&gt; &lt;span class="nv"&gt;dangling&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;# Remove dangling volumes safely&lt;/span&gt;
docker volume prune &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!WARNING]&lt;br&gt;
If you have a local dev database in an anonymous volume that isn't named, pruning volumes will wipe that database! Ensure active databases are backed up or defined with named volumes before running &lt;code&gt;volume prune&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. Docker Cleanup Strategy Matrix
&lt;/h2&gt;

&lt;p&gt;Here is how the different Docker commands compare in terms of disk savings and safety:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What It Cleans&lt;/th&gt;
&lt;th&gt;Typical Savings&lt;/th&gt;
&lt;th&gt;Safety Level&lt;/th&gt;
&lt;th&gt;Risk / Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker builder prune -a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BuildKit compilation cache&lt;/td&gt;
&lt;td&gt;10 GB – 25 GB&lt;/td&gt;
&lt;td&gt;🟢 High&lt;/td&gt;
&lt;td&gt;Slower initial rebuild for your next &lt;code&gt;docker build&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker image prune&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Untagged dangling images (&lt;code&gt;&amp;lt;none&amp;gt;&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;2 GB – 10 GB&lt;/td&gt;
&lt;td&gt;🟢 High&lt;/td&gt;
&lt;td&gt;Zero impact; unreferenced layers only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker container prune&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stopped containers&lt;/td&gt;
&lt;td&gt;1 GB – 5 GB&lt;/td&gt;
&lt;td&gt;🟡 Medium&lt;/td&gt;
&lt;td&gt;Removes logs and ephemeral writable layer of exited containers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker volume prune&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dangling anonymous volumes&lt;/td&gt;
&lt;td&gt;5 GB – 30 GB&lt;/td&gt;
&lt;td&gt;🟠 Moderate&lt;/td&gt;
&lt;td&gt;Discards orphaned volume data; protect dev databases first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker system prune -a --volumes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Everything&lt;/strong&gt; not actively running&lt;/td&gt;
&lt;td&gt;25 GB – 70 GB&lt;/td&gt;
&lt;td&gt;🔴 Aggressive&lt;/td&gt;
&lt;td&gt;Wipes all unused images, caches, stopped containers, and volumes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  7. Shrinking &lt;code&gt;Docker.raw&lt;/code&gt; on APFS
&lt;/h2&gt;

&lt;p&gt;After pruning internally, ensure host APFS actually reclaims the space.&lt;/p&gt;

&lt;h3&gt;
  
  
  Method A: Docker Desktop Compact
&lt;/h3&gt;

&lt;p&gt;Docker Desktop (v4.20+) includes a native disk compaction utility:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Docker Desktop settings.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings → Resources → Advanced&lt;/strong&gt; (or the Troubleshoot bug icon).&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;"Clean / Purge data"&lt;/strong&gt; or click &lt;strong&gt;"Compact virtual disk"&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Method B: Resetting the Virtual Disk
&lt;/h3&gt;

&lt;p&gt;If &lt;code&gt;Docker.raw&lt;/code&gt; remains stubbornly large, reset it cleanly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;killall Docker
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When restarted, Docker initializes a fresh virtual disk of just ~1.5 GB.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Automated Intelligence: Dusty's Docker Overlay Detection
&lt;/h2&gt;

&lt;p&gt;If auditing sparse files and BuildKit layers manually is tedious, &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Dusty&lt;/strong&gt;&lt;/a&gt; handles it automatically.&lt;/p&gt;

&lt;p&gt;Dusty is an AI-powered macOS storage cleaner built in native Swift for developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdustystorage.com%2Fdusty_screenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdustystorage.com%2Fdusty_screenshot.png" alt="Dusty Interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How Dusty Handles Docker Storage:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker VM &amp;amp; Overlay Detection:&lt;/strong&gt; Automatically pinpoints &lt;code&gt;Docker.raw&lt;/code&gt;, displaying true physical usage vs logical size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini AI Explanations:&lt;/strong&gt; Explains obscure cache layers and overlay paths in plain English before cleanup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trash-First Safety:&lt;/strong&gt; Files move to macOS Trash rather than permanent deletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer Bloat Scanning:&lt;/strong&gt; Simultaneously clears orphaned &lt;code&gt;node_modules&lt;/code&gt;, Xcode &lt;code&gt;DerivedData&lt;/code&gt;, and WhatsApp media.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent Pricing:&lt;/strong&gt; &lt;strong&gt;$9.99 lifetime license&lt;/strong&gt; (pay once, own forever) with a 24-hour free trial. No subscriptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Install via Homebrew:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;sarmadhussainch/dusty/dusty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub Tap: &lt;a href="https://github.com/sarmadhussainch/homebrew-dusty" rel="noopener noreferrer"&gt;github.com/sarmadhussainch/homebrew-dusty&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Official site: &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;dustystorage.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Docker Desktop is essential for modern development, but on macOS, its storage footprint demands vigilance. Audit &lt;code&gt;docker system df&lt;/code&gt; monthly and prune your BuildKit cache to keep your SSD fast and healthy.&lt;/p&gt;




&lt;h3&gt;
  
  
  What About Your Machine?
&lt;/h3&gt;

&lt;p&gt;How much space was &lt;code&gt;Docker.raw&lt;/code&gt; taking on your Mac? Did clearing BuildKit make the biggest difference? Share your numbers in the comments!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>macos</category>
      <category>programming</category>
    </item>
    <item>
      <title>5 Hidden Folders Eating Your Mac's Storage (And How to Safely Reclaim 100GB+)</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Tue, 13 Oct 2026 15:06:24 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/5-hidden-folders-eating-your-macs-storage-and-how-to-safely-reclaim-100gb-32ko</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/5-hidden-folders-eating-your-macs-storage-and-how-to-safely-reclaim-100gb-32ko</guid>
      <description>&lt;p&gt;You sit down to build a new feature or pull a container image, and macOS interrupts you with a familiar nightmare:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;"Your disk is almost full"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You open &lt;strong&gt;System Settings → General → Storage&lt;/strong&gt;, hoping for clear answers. Instead, macOS presents an enormous, opaque bar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ]
System Data: 138.4 GB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where did 140 GB vanish? Your Documents folder is only 15 GB, and your Applications take 25 GB. &lt;/p&gt;

&lt;p&gt;The culprit is hidden inside Unix directories that macOS excludes from user categories and dumps into generic "System Data." If your &lt;strong&gt;mac storage full&lt;/strong&gt; alert is firing, here is a technical breakdown of the &lt;strong&gt;5 hidden folders silently consuming your Mac's storage&lt;/strong&gt;, the Terminal commands to audit them, and how to safely reclaim 100GB+ without breaking your development workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 5 Hidden Storage Killers at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Directory&lt;/th&gt;
&lt;th&gt;Typical Size&lt;/th&gt;
&lt;th&gt;What Lives There&lt;/th&gt;
&lt;th&gt;Safe to Purge?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/Library/Caches&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;15 GB – 45 GB&lt;/td&gt;
&lt;td&gt;App, browser, &amp;amp; Electron framework caches&lt;/td&gt;
&lt;td&gt;✅ Yes (App-by-app)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/Library/Developer/Xcode/DerivedData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20 GB – 70 GB&lt;/td&gt;
&lt;td&gt;Build artifacts, index symbols, module caches&lt;/td&gt;
&lt;td&gt;✅ Yes (Xcode regenerates)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;10 GB – 40 GB&lt;/td&gt;
&lt;td&gt;Cached media, video duplicates, voice notes&lt;/td&gt;
&lt;td&gt;⚠️ Yes (Keep SQLite DB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/.gradle/caches&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;10 GB – 35 GB&lt;/td&gt;
&lt;td&gt;JVM/Android build transforms &amp;amp; stale jars&lt;/td&gt;
&lt;td&gt;✅ Yes (Stop daemon first)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/Library/Containers/com.docker.docker/Data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;30 GB – 80 GB&lt;/td&gt;
&lt;td&gt;Docker Desktop Linux VM disk (&lt;code&gt;Docker.raw&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;⚠️ Yes (Via Docker CLI)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;~/Library/Caches&lt;/code&gt;: The App Landfill
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What creates it?
&lt;/h3&gt;

&lt;p&gt;Every macOS application stores discardable cache files in &lt;code&gt;~/Library/Caches/&amp;lt;bundle-identifier&amp;gt;&lt;/code&gt;. This includes browsers (Chrome, Safari), development editors (VS Code, Cursor), Electron apps (Slack, Discord, Spotify), and system frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it grows
&lt;/h3&gt;

&lt;p&gt;While apps should prune old files, they rarely do. Slack caches media from channels you haven't opened in years; Spotify keeps gigs of cached streams; and VS Code accumulates language server indexes. Worse, when you drag an application to the Trash, its directory inside &lt;code&gt;~/Library/Caches&lt;/code&gt; remains behind forever.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect its size
&lt;/h3&gt;

&lt;p&gt;Audit the 10 largest cache hogs in Terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Caches/&lt;span class="k"&gt;*&lt;/span&gt; 2&amp;gt;/dev/null | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-hr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to clean it safely
&lt;/h3&gt;

&lt;p&gt;Never run &lt;code&gt;rm -rf ~/Library/Caches/*&lt;/code&gt; with open apps, which can corrupt running cache databases. Instead, close the target app and purge its folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Chrome cache&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Caches/Google/Chrome/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# Slack cache&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Caches/com.tinyspeck.slackmacgap/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# Spotify audio cache&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Caches/com.spotify.client/Data/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Purging caches won't log you out—user sessions and preferences live in &lt;code&gt;~/Library/Application Support&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. &lt;code&gt;~/Library/Developer/Xcode/DerivedData&lt;/code&gt;: The Build Artifact Monster
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What creates it?
&lt;/h3&gt;

&lt;p&gt;Whenever you compile iOS, macOS, watchOS, or Swift packages—or run React Native and Flutter projects invoking native compilers—Xcode writes intermediate build objects, module caches, and index files into &lt;code&gt;DerivedData&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it grows
&lt;/h3&gt;

&lt;p&gt;Xcode retains separate build artifacts for every branch, configuration, and project workspace. If you worked on a client project months ago, its 15GB compilation footprint remains indefinitely. Xcode provides no automatic expiration policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect its size
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On active developer machines, this folder routinely swells past 40 GB.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to clean it safely
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;DerivedData&lt;/code&gt; contains purely ephemeral build artifacts and indexes. Purging it is completely safe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your next build will re-index symbols and compile clean binaries, immediately reclaiming tens of gigabytes.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. WhatsApp Desktop Shared Media: The Secret Video Mirror
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What creates it?
&lt;/h3&gt;

&lt;p&gt;WhatsApp Desktop uses macOS App Group containers to share data across its sandboxed helper processes and notification services:&lt;br&gt;
&lt;code&gt;~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Why it grows
&lt;/h3&gt;

&lt;p&gt;Every video, voice memo, GIF, and PDF shared across your personal chats and work groups is stored in this directory. Even if you clear media on your phone, WhatsApp Desktop often keeps local duplicates on your Mac.&lt;/p&gt;
&lt;h3&gt;
  
  
  Inspect its size
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Group&lt;span class="se"&gt;\ &lt;/span&gt;Containers/group.net.whatsapp.WhatsApp.shared 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  How to clean it safely
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;CAUTION:&lt;/strong&gt; Do not wipe the entire folder. It contains &lt;code&gt;ChatStorage.sqlite&lt;/code&gt;, which houses your message history and encryption keys!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, purge only media payloads older than 30 days or larger than 10MB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Inspect media size&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Group&lt;span class="se"&gt;\ &lt;/span&gt;Containers/group.net.whatsapp.WhatsApp.shared/Message/Media 2&amp;gt;/dev/null

&lt;span class="c"&gt;# Safely prune video files larger than 10MB while keeping chat history intact&lt;/span&gt;
find ~/Library/Group&lt;span class="se"&gt;\ &lt;/span&gt;Containers/group.net.whatsapp.WhatsApp.shared/Message/Media &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-size&lt;/span&gt; +10M &lt;span class="nt"&gt;-delete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. &lt;code&gt;~/.gradle/caches&lt;/code&gt;: The Multi-Gigabyte JVM Reservoir
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What creates it?
&lt;/h3&gt;

&lt;p&gt;If you build Android, React Native, Kotlin, or backend Spring apps, Gradle stores downloaded dependencies (JARs, AARs) and compiler transform outputs inside &lt;code&gt;~/.gradle/caches&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it grows
&lt;/h3&gt;

&lt;p&gt;Gradle preserves dependency resolutions across every wrapper version you've ever compiled. When libraries update, previous versions remain on disk indefinitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect its size
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/.gradle/caches 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to clean it safely
&lt;/h3&gt;

&lt;p&gt;Stop running background daemons first to unlock active files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Stop background daemons&lt;/span&gt;
./gradlew &lt;span class="nt"&gt;--stop&lt;/span&gt; 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; pkill &lt;span class="nt"&gt;-f&lt;/span&gt; gradle

&lt;span class="c"&gt;# 2. Flush cached dependencies and daemons&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.gradle/caches/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.gradle/daemon/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gradle will re-download only the exact dependencies needed on your next build.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;~/Library/Containers/com.docker.docker/Data&lt;/code&gt;: The Runaway VM Disk
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What creates it?
&lt;/h3&gt;

&lt;p&gt;Because macOS runs the Darwin kernel, Docker Desktop spins up a lightweight Linux VM via Apple's &lt;code&gt;Virtualization.framework&lt;/code&gt;. All images, containers, and volumes reside inside a single virtual disk file (&lt;code&gt;Docker.raw&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it grows
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Docker.raw&lt;/code&gt; is an APFS sparse file. As you pull images and build layers, it expands. However, when you delete images or stop containers, APFS does not automatically reclaim unused space, leaving a bloated virtual disk on your Mac SSD.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect its size
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Containers/com.docker.docker/Data 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to clean it safely
&lt;/h3&gt;

&lt;p&gt;Avoid &lt;code&gt;rm -rf&lt;/code&gt; directly on the disk image while Docker runs. Instead, prune unused Docker objects cleanly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Check Docker disk utilization&lt;/span&gt;
docker system &lt;span class="nb"&gt;df&lt;/span&gt;

&lt;span class="c"&gt;# 2. Prune unused containers, networks, dangling images, and build cache&lt;/span&gt;
docker system prune &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--volumes&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;Docker.raw&lt;/code&gt; remains oversized, open &lt;strong&gt;Docker Desktop Settings → Resources → Virtual disk limit&lt;/strong&gt; and adjust the ceiling to trim the allocated sparse file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reclaimed Space Summary
&lt;/h2&gt;

&lt;p&gt;Cleaning these five targets produces massive storage gains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. User Caches (Slack, Chrome, Spotify): ~15 GB
2. Xcode DerivedData:                    ~40 GB
3. WhatsApp Cached Media:                ~15 GB
4. Gradle Build Caches:                  ~12 GB
5. Docker VM Prune:                      ~25 GB
------------------------------------------------
TOTAL ESTIMATED RECLAIMED SPACE:        ~107 GB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Automating Storage Hygiene with Dusty
&lt;/h2&gt;

&lt;p&gt;Manual terminal maintenance works, but remembering paths, avoiding destructive deletions, and crawling directories manually every few weeks is tedious.&lt;/p&gt;

&lt;p&gt;That's why we created &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Dusty&lt;/strong&gt;&lt;/a&gt; — an AI-powered macOS storage cleaner engineered specifically for developers and power users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdustystorage.com%2Fdusty_screenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdustystorage.com%2Fdusty_screenshot.png" alt="Dusty macOS Storage Cleaner" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Developers Use Dusty:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini AI File Explanations:&lt;/strong&gt; Wondering what an obscure 8GB folder in &lt;code&gt;~/Library/Caches&lt;/code&gt; does? Dusty uses Gemini AI to analyze file headers and explain in plain English what created it and whether it's safe to delete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer Bloat Scanner:&lt;/strong&gt; Scans for orphaned &lt;code&gt;node_modules&lt;/code&gt;, Xcode &lt;code&gt;DerivedData&lt;/code&gt;, Gradle artifacts, and Docker overlays across your entire disk in seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surgical WhatsApp Cleaner:&lt;/strong&gt; Reclaims heavy media while protecting your SQLite message database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trash-First Safety:&lt;/strong&gt; Files are never erased permanently on first pass; they move safely to the macOS Trash for instant restoration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay Once, Own Forever:&lt;/strong&gt; No recurring $40/year subscriptions. Just a &lt;strong&gt;$9.99 lifetime license&lt;/strong&gt; (with a 24-hour free trial).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Dusty in seconds via Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;sarmadhussainch/dusty/dusty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or download the universal binary at &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;dustystorage.com&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep Your SSD Healthy
&lt;/h2&gt;

&lt;p&gt;When an APFS SSD dips below 10-15% available storage, wear leveling slows down and swap memory stalls. Running a quick audit on these five hidden folders guarantees your Mac stays fast and responsive.&lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;What is the largest hidden folder you've uncovered on your Mac? Share your findings and favorite cleanup tricks in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>macos</category>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Taming Local Disk Bloat: Where Did My 512GB Mac SSD Go and How to Clean It Safely</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:41:40 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/taming-local-disk-bloat-where-did-my-512gb-mac-ssd-go-and-how-to-clean-it-safely-a8h</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/taming-local-disk-bloat-where-did-my-512gb-mac-ssd-go-and-how-to-clean-it-safely-a8h</guid>
      <description>&lt;p&gt;Every developer working on a Mac has encountered that sudden, dreaded system alert:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;"Your disk is almost full"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You open &lt;strong&gt;System Settings → General → Storage&lt;/strong&gt;, hoping for answers. Instead, macOS gives you a massive, mysterious gray bar labeled:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Data: 142 GB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What on earth is in that 142 GB? Why is it growing? And more importantly: &lt;strong&gt;how do you reclaim it without corrupting your active Git repositories or breaking your dev environment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this guide, we'll dissect the real culprits behind hidden developer disk bloat on macOS, provide native Terminal commands to find them, and explain how to clean them safely.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Real Culprits Behind Developer Disk Bloat
&lt;/h2&gt;

&lt;p&gt;Standard Mac cleaners scan for browser cookies, language packs, and user caches. But for developers, those are trivial pennies. The real gigabyte-scale storage hogs are buried in your developer toolchains:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Storage Hog&lt;/th&gt;
&lt;th&gt;Typical Size&lt;/th&gt;
&lt;th&gt;Where It Hides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orphaned &lt;code&gt;node_modules&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20 GB – 80 GB&lt;/td&gt;
&lt;td&gt;Forgotten tutorial projects, abandoned feature branches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Xcode &lt;code&gt;DerivedData&lt;/code&gt; &amp;amp; Simulators&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 GB – 70 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/Library/Developer/Xcode/DerivedData&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker VM Overlays &amp;amp; BuildKit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;25 GB – 60 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/Library/Containers/com.docker.docker/Data/vms&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gradle &amp;amp; Maven Caches&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 GB – 30 GB&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;~/.gradle/caches&lt;/code&gt;, &lt;code&gt;~/.m2/repository&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Homebrew Downloads &amp;amp; Stale Bottles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 GB – 15 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/Library/Caches/Homebrew&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WhatsApp / Slack Desktop Media&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15 GB – 40 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Terminal Deep-Dive: Finding Bloat with Native Commands
&lt;/h2&gt;

&lt;p&gt;Before running third-party scripts, let's inspect our disk using native Unix utilities already built into macOS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding Forgotten &lt;code&gt;node_modules&lt;/code&gt; Directories
&lt;/h3&gt;

&lt;p&gt;If you've been developing in JavaScript, TypeScript, or React for a couple of years, you likely have dozens of stale projects lingering in your &lt;code&gt;~/Projects&lt;/code&gt;, &lt;code&gt;~/Sites&lt;/code&gt;, or &lt;code&gt;~/Developer&lt;/code&gt; folders.&lt;/p&gt;

&lt;p&gt;To find all &lt;code&gt;node_modules&lt;/code&gt; folders taking up more than 500MB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find ~/Projects &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"node_modules"&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-prune&lt;/span&gt; &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; + 2&amp;gt;/dev/null | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-hr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Never delete &lt;code&gt;node_modules&lt;/code&gt; blindly using global &lt;code&gt;rm -rf&lt;/code&gt; scripts while an active project is compiling or using symbolic links.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Finding Xcode DerivedData Bloat
&lt;/h3&gt;

&lt;p&gt;Every time you compile an iOS or macOS app in Xcode, index files, intermediate build objects, and module caches accumulate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that folder is over 30 GB, you can safely wipe its contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Xcode will seamlessly regenerate whatever it needs during your next build).&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspecting Docker Storage
&lt;/h3&gt;

&lt;p&gt;Docker on macOS runs inside a lightweight Linux virtual machine disk image (&lt;code&gt;Docker.raw&lt;/code&gt; or &lt;code&gt;Docker.qcow2&lt;/code&gt;). Over time, unreferenced images, stopped containers, and build cache layers expand this virtual disk to maximum capacity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system &lt;span class="nb"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To safely reclaim unused Docker build cache and dangling images:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system prune &lt;span class="nt"&gt;--volumes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. The Trust Problem: Why Traditional Cleaners Fail Developers
&lt;/h2&gt;

&lt;p&gt;Traditional "one-click" Mac cleaning software operates like an opaque black box:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They report a vague counter: &lt;em&gt;"24.8 GB of System Junk found!"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;They ask for full disk access permissions.&lt;/li&gt;
&lt;li&gt;They delete files with zero explanation of what they actually were.&lt;/li&gt;
&lt;li&gt;And worse: they demand $40/year recurring subscriptions for a basic cron job.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When a cleaner touches a developer's machine, trust is paramount. Deleting a configuration file in &lt;code&gt;~/Library/Application Support&lt;/code&gt; or removing a SQLite database from a local test environment can cost hours of debugging.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Introducing Dusty: AI-Explained macOS Storage Management
&lt;/h2&gt;

&lt;p&gt;To solve this trust gap, we built &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Dusty&lt;/strong&gt;&lt;/a&gt; natively in Swift and SwiftUI.&lt;/p&gt;

&lt;p&gt;Dusty is engineered specifically for developers and power users who need complete transparency and surgical control over their disk space.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ds8qazfoccdsz7ap5zk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ds8qazfoccdsz7ap5zk.png" alt="Dusty UI" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Architectural Pillars:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plain-English AI Explanations:&lt;/strong&gt; When inspecting obscure cache files in &lt;code&gt;~/Library/Caches&lt;/code&gt;, Dusty connects to Google Gemini AI to analyze file headers and directory trees. It explains in plain English:

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What application created this file?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why is it taking up this much space?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Is it safe to delete, or will it cause an app to re-index?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer Bloat Scanner:&lt;/strong&gt; Directly targets &lt;code&gt;node_modules&lt;/code&gt;, Xcode &lt;code&gt;DerivedData&lt;/code&gt;, Docker container overlays, Gradle caches, and &lt;code&gt;.next&lt;/code&gt; build caches across all project directories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surgical WhatsApp Media Cleaner:&lt;/strong&gt; Scans WhatsApp Desktop storage and lets you safely reclaim gigabytes of forwarded videos and audio notes without touching your chat history or &lt;code&gt;ChatStorage.sqlite&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trash-First Safety Architecture:&lt;/strong&gt; Nothing is permanently deleted without your explicit review. Every cleaned file moves safely to native macOS Trash first, so you can inspect or restore it at any time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Subscriptions:&lt;/strong&gt; An honest $9.99 lifetime license (with a 24-hour full free trial). Pay once, own forever.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Quick Install via Homebrew
&lt;/h2&gt;

&lt;p&gt;You can install Dusty in seconds directly through Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;sarmadhussainch/dusty/dusty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or download the universal binary (Apple Silicon M1/M2/M3/M4 &amp;amp; Intel) directly from the official website:&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;https://dustystorage.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Tap: &lt;a href="https://github.com/sarmadhussainch/homebrew-dusty" rel="noopener noreferrer"&gt;https://github.com/sarmadhussainch/homebrew-dusty&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary Checklist for Developer Disk Hygiene
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;find&lt;/code&gt; or use an analyzer to audit old &lt;code&gt;node_modules&lt;/code&gt; directories.&lt;/li&gt;
&lt;li&gt;Flush &lt;code&gt;~/Library/Developer/Xcode/DerivedData&lt;/code&gt; every few months.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker system prune&lt;/code&gt; when disk space dips below 20%.&lt;/li&gt;
&lt;li&gt;Clean WhatsApp Desktop forwarded media attachments.&lt;/li&gt;
&lt;li&gt;Keep your Mac SSD at least 15% free so APFS wear-leveling and swap memory perform optimally!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What's the biggest storage hog you've discovered on your Mac? Let me know in the comments below!&lt;/p&gt;

</description>
      <category>macos</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why We Built a Zero-Signup, Ephemeral AI Text Humanizer in React</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Thu, 08 Oct 2026 17:09:12 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/why-we-built-a-zero-signup-ephemeral-ai-text-humanizer-in-react-5bjh</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/why-we-built-a-zero-signup-ephemeral-ai-text-humanizer-in-react-5bjh</guid>
      <description>&lt;p&gt;&lt;em&gt;By Sarmad Hussain — Founder, &lt;a href="https://itandall.com" rel="noopener noreferrer"&gt;ClearWrite by I.T &amp;amp; All&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The modern web is suffering from severe &lt;strong&gt;account fatigue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Try finding an online text tool today. Within three seconds of landing on the page, you are greeted by an aggressive modal demanding your Google OAuth authorization, an email verification code, or a "Free 3-Day Trial" that asks for your credit card.&lt;/p&gt;

&lt;p&gt;Worse, when you paste sensitive work emails, internal memos, or draft assignments into these tools, your raw data is silently saved in their database to train models, build user profiles, or sell enterprise upgrades.&lt;/p&gt;

&lt;p&gt;We wanted to build something different: a fast, distraction-free writing workbench with &lt;strong&gt;zero signups, zero tracking, and completely ephemeral processing&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Here is how we architected and launched &lt;a href="https://itandall.com" rel="noopener noreferrer"&gt;ClearWrite&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: The "Robotic Sameness" of AI Text
&lt;/h2&gt;

&lt;p&gt;Large language models (ChatGPT, Claude, Gemini) write with an unmistakable digital accent. Even non-technical readers can spot AI text instantly due to three telltale patterns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Over-synthesized sentence cadence:&lt;/strong&gt; Every sentence is 18–22 words long, perfectly balanced, and devoid of human rhythm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable transition words:&lt;/strong&gt; Overuse of &lt;em&gt;"Furthermore,"&lt;/em&gt; &lt;em&gt;"Delve,"&lt;/em&gt; &lt;em&gt;"Testament,"&lt;/em&gt; &lt;em&gt;"In conclusion,"&lt;/em&gt; and &lt;em&gt;"Crucial."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyper-defensive hedging:&lt;/strong&gt; Constant caveats (&lt;em&gt;"It is important to remember that..."&lt;/em&gt;, &lt;em&gt;"While opinions vary..."&lt;/em&gt;) that weaken persuasive copy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Existing tools like QuillBot or Wordtune often replace robotic phrases with even clunkier synonyms that sound like a student using a thesaurus for the first time.&lt;/p&gt;

&lt;p&gt;We wanted an engine that restructures syntax from the ground up—varying sentence length, injecting colloquial pacing, and preserving genuine human intent.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 4 Core Writing Workflows
&lt;/h2&gt;

&lt;p&gt;Rather than bundling everything into a bloated, generic "AI rewriter", we engineered 4 distinct, single-purpose modes:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://itandall.com/tools/humanize-ai-text" rel="noopener noreferrer"&gt;Free AI Text Humanizer&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Designed for students, content creators, and founders who use LLMs to draft ideas but refuse to publish sterile, robotic prose. It breaks robotic cadence, removes formulaic transition markers, and rewrites sentences with natural human burstiness.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;a href="https://itandall.com/tools/email-tone-checker" rel="noopener noreferrer"&gt;Email Tone Checker&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In remote workplaces (Slack, Microsoft Teams, Gmail), flat text is easily misinterpreted as passive-aggressive, rude, or overly cold. This mode analyzes interpersonal tone—flagging unintentional condescension, apologizing too much, or sound overly pushy—and suggests polite, assertive phrasing.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;a href="https://itandall.com/tools/simplify-text" rel="noopener noreferrer"&gt;Simplify Text Online&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Engineered for technical writers, medical communicators, and engineers. It strips out dense bureaucratic jargon and translates complex explanations into crisp, accessible 8th-grade readability without dumbing down the core insight.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;a href="https://itandall.com/tools/make-text-professional" rel="noopener noreferrer"&gt;Make Text Professional&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A rapid transformation engine that takes messy, casual notes or brain dumps and shapes them into executive-ready communication.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Architecture &amp;amp; Privacy by Design
&lt;/h2&gt;

&lt;p&gt;Here is the tech stack powering ClearWrite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React 18 + Vite for sub-100ms client hydration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; Tailwind CSS with a zero-friction dark mode interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Delivery:&lt;/strong&gt; Cloudflare CDN with custom cache rules for instant global asset distribution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ephemeral Processing Policy:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;When a user submits text (up to 500 words per pass), the payload is processed in-memory and immediately returned.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero logs are retained.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;No user accounts exist in the database. There is literally no user table, no email list, and no session tracking cookies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Ephemeral Software is the Future
&lt;/h2&gt;

&lt;p&gt;As AI becomes commoditized, the real value proposition of utility software isn't more feature bloat—it is &lt;strong&gt;respect for user time and privacy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If a student needs to polish an introduction paragraph before submitting, or a founder needs to check an email tone before hitting send on a high-stakes deal, they shouldn't need to create an account, verify a captcha, and navigate a paywall.&lt;/p&gt;

&lt;p&gt;ClearWrite is live, completely free, and open to anyone without an account:&lt;br&gt;
👉 &lt;strong&gt;Try it here:&lt;/strong&gt; &lt;a href="https://itandall.com" rel="noopener noreferrer"&gt;https://itandall.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Reclaim 60GB+ of Hidden macOS Bloat Without Paying $40/yr Subscriptions</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Fri, 25 Sep 2026 20:18:05 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/how-to-reclaim-60gb-of-hidden-macos-bloat-without-paying-40yr-subscriptions-25lb</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/how-to-reclaim-60gb-of-hidden-macos-bloat-without-paying-40yr-subscriptions-25lb</guid>
      <description>&lt;p&gt;If you develop on macOS, you’ve probably seen the dreaded "Disk Full" warning while macOS Storage Settings claims you have 80GB to 120GB of mysterious "System Data".&lt;/p&gt;

&lt;p&gt;Commercial utilities often charge steep &lt;strong&gt;$40/year recurring subscriptions&lt;/strong&gt; and mostly scan superficial browser caches, completely ignoring where developer storage actually vanishes.&lt;/p&gt;

&lt;p&gt;Here is an architectural breakdown of where that hidden bloat actually lives on modern macOS (Sonoma &amp;amp; Sequoia), the native Terminal commands to inspect them, and how to safely clean them.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Orphaned &lt;code&gt;node_modules&lt;/code&gt; Trees (30GB – 60GB)
&lt;/h3&gt;

&lt;p&gt;Every JavaScript, TypeScript, or frontend project clones its own independent tree of dependencies. If you work on multiple client projects or clone repositories to test, dozens of forgotten &lt;code&gt;node_modules&lt;/code&gt; folders sit on your SSD indefinitely.&lt;/p&gt;

&lt;h4&gt;
  
  
  Terminal Inspection Command:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find ~ &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"node_modules"&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-prune&lt;/span&gt; &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; + 2&amp;gt;/dev/null | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-hr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Notice:&lt;/em&gt; Deleting active project dependencies will break your build until you run &lt;code&gt;npm install&lt;/code&gt; again. Only remove &lt;code&gt;node_modules&lt;/code&gt; from archived or inactive repositories.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. WhatsApp Desktop Media Bloat (10GB – 30GB)
&lt;/h3&gt;

&lt;p&gt;WhatsApp Desktop downloads every voice note, video clip, and PDF attachment locally. Even if you delete the chat inside your phone, macOS retains cached local media files inside application containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/Library/Containers/net.whatsapp.WhatsApp/Data/Library/Application Support/WhatsApp/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Crucial Safety Rule:&lt;/em&gt; Never touch &lt;code&gt;ChatStorage.sqlite&lt;/code&gt;. Only delete cached audio/video attachments.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Stale Xcode DerivedData &amp;amp; Simulator Caches (20GB – 50GB)
&lt;/h3&gt;

&lt;p&gt;If you build Swift, Flutter, or React Native apps, Xcode generates gigabytes of intermediate build artifacts, index files, and device logs that are never automatically purged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/Library/Developer/Xcode/DerivedData
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can safely remove everything inside &lt;code&gt;DerivedData&lt;/code&gt;; Xcode will rebuild it automatically on your next compile.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Docker Virtual Disk Overlays (20GB – 40GB)
&lt;/h3&gt;

&lt;p&gt;Docker Desktop creates a raw virtual disk (&lt;code&gt;Docker.raw&lt;/code&gt;) that expands dynamically as you pull images, but &lt;strong&gt;does not automatically shrink&lt;/strong&gt; when containers are removed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system prune &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--volumes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  The Problem with Blind Automation
&lt;/h3&gt;

&lt;p&gt;Running manual shell commands works, but running &lt;code&gt;rm -rf&lt;/code&gt; on obscure &lt;code&gt;~/Library&lt;/code&gt; directories carries real risk of breaking system state or losing important project files.&lt;/p&gt;

&lt;p&gt;To solve this, I built &lt;strong&gt;&lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;Dusty&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-Explained Decisions:&lt;/strong&gt; Uses Google Gemini AI to analyze file metadata and provide a plain-English explanation of what each folder is, what app created it, and whether it is safe or rebuildable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer Bloat Focus:&lt;/strong&gt; Automatically locates stale &lt;code&gt;node_modules&lt;/code&gt;, Xcode caches, Docker overlays, and WhatsApp media.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% Trash-First:&lt;/strong&gt; Nothing is permanently erased; files move safely to macOS Trash first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Subscriptions:&lt;/strong&gt; Built with a pay-once, own-forever model ($7.99 lifetime license with a 24-hour full-access free trial).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can install Dusty directly via Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;theappcenter/tap/dusty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or explore the open web version and direct DMG at &lt;strong&gt;&lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;dustystorage.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What’s the largest hidden directory you’ve ever found eating your Mac’s storage? Let me know in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>macos</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Where Did My 512GB Go? How Developers Lose 50GB+ to Node, Docker &amp; macOS Build Artifacts</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Wed, 19 Aug 2026 00:37:22 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/where-did-my-512gb-go-how-developers-lose-50gb-to-node-docker-macos-build-artifacts-6m5</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/where-did-my-512gb-go-how-developers-lose-50gb-to-node-docker-macos-build-artifacts-6m5</guid>
      <description>&lt;p&gt;If you develop on a MacBook (especially a 256GB or 512GB model), you've probably seen the dreaded "Disk Almost Full" notification.&lt;/p&gt;

&lt;p&gt;When you check macOS Storage Settings, Apple simply labels 100GB+ under the ambiguous &lt;strong&gt;"System Data"&lt;/strong&gt; banner.&lt;/p&gt;

&lt;p&gt;Here is an honest breakdown of where that disk space actually disappears—and how to reclaim it safely without breaking active projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 4 Biggest Storage Hogs on Developer Macs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Orphaned &lt;code&gt;node_modules&lt;/code&gt; Folders
&lt;/h3&gt;

&lt;p&gt;Every tutorial, side project, and prototype you worked on 6 months ago still has a 500MB–1.5GB &lt;code&gt;node_modules&lt;/code&gt; tree sitting quietly on your drive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you have 30 inactive repositories, that's &lt;strong&gt;30GB–50GB of pure disk waste&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Framework &amp;amp; Bundler Build Artifacts
&lt;/h3&gt;

&lt;p&gt;Modern full-stack toolchains leave heavy caching artifacts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.next&lt;/code&gt; and &lt;code&gt;.nuxt&lt;/code&gt; build outputs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.turbo&lt;/code&gt; and &lt;code&gt;.parcel-cache&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Composer &lt;code&gt;vendor&lt;/code&gt; folders&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Xcode DerivedData &amp;amp; Simulators
&lt;/h3&gt;

&lt;p&gt;Even if you aren't an iOS developer, installing packages with native dependencies or running React Native / Flutter builds causes &lt;code&gt;~/Library/Developer/Xcode/DerivedData&lt;/code&gt; to silently balloon to 20GB+.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. WhatsApp Desktop &amp;amp; Communication Apps Local Cache
&lt;/h3&gt;

&lt;p&gt;WhatsApp Desktop on macOS caches all incoming media locally at &lt;code&gt;~/Library/Containers/desktop.WhatsApp/Data/Library/Application Support/WhatsApp/&lt;/code&gt;. This can easily consume 15GB–40GB of stale videos and voice notes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick CLI Inspection Commands
&lt;/h2&gt;

&lt;p&gt;To see your top 10 largest folders inside your projects directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Projects/&lt;span class="k"&gt;*&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rh&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To calculate the total space consumed by &lt;code&gt;node_modules&lt;/code&gt; across your machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find ~/Projects &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"node_modules"&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-prune&lt;/span&gt; &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-chs&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; +
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why Standard Mac Cleaners Are Risky for Developers
&lt;/h2&gt;

&lt;p&gt;Most generic Mac cleaner utilities search for browser cache and system logs, but they fail developers in two ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They ignore developer project artifacts completely.&lt;/li&gt;
&lt;li&gt;If they do find them, they delete blindly without explaining whether a folder is rebuildable or critical.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To solve this transparency issue, I built &lt;a href="https://dustystorage.com" rel="noopener noreferrer"&gt;Dusty&lt;/a&gt;, an AI-explained macOS storage cleaner tailored specifically for developers. &lt;/p&gt;

&lt;p&gt;It classifies files into transparent risk tiers (&lt;strong&gt;Safe&lt;/strong&gt;, &lt;strong&gt;Rebuildable&lt;/strong&gt;, &lt;strong&gt;Review First&lt;/strong&gt;, &lt;strong&gt;Never Touch&lt;/strong&gt;) and uses Gemini AI to give a plain-English explanation before moving anything safely to the macOS Trash.&lt;/p&gt;

&lt;p&gt;You can check out our in-depth guide on &lt;a href="https://dustystorage.com/blog/mac-cleaner-for-developers.html" rel="noopener noreferrer"&gt;how developers can clean hidden Mac storage safely&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What's your current Mac cleanup routine?
&lt;/h3&gt;

&lt;p&gt;Do you use shell aliases, npx scripts, or dedicated tools? Share your setup in the comments!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>macos</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Check redirect chains free: how to inspect 301/302 redirects before launch</title>
      <dc:creator>Sarmad Hussain</dc:creator>
      <pubDate>Mon, 11 May 2026 17:31:57 +0000</pubDate>
      <link>https://dev.to/sarmad_hussain_771d6c87fa/check-redirect-chains-free-how-to-inspect-301302-redirects-before-launch-4gg3</link>
      <guid>https://dev.to/sarmad_hussain_771d6c87fa/check-redirect-chains-free-how-to-inspect-301302-redirects-before-launch-4gg3</guid>
      <description>&lt;p&gt;Redirects are easy to ignore until a launch goes wrong.&lt;/p&gt;

&lt;p&gt;A page may look fine in the browser, but the request path can still have problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;http&lt;/code&gt; redirects to &lt;code&gt;https&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;non-www redirects to www, or the other way around&lt;/li&gt;
&lt;li&gt;old URLs redirect to new slugs&lt;/li&gt;
&lt;li&gt;tracking links add another hop&lt;/li&gt;
&lt;li&gt;a CMS or proxy adds one more redirect without anyone noticing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One redirect is normal. A long chain is where problems start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why redirect chains matter
&lt;/h2&gt;

&lt;p&gt;Every redirect adds a request before the visitor reaches the final page. That can slow down crawlers, make analytics harder to read, and hide mistakes that only appear after deployment.&lt;/p&gt;

&lt;p&gt;Common examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://example.com/page
-&amp;gt; https://example.com/page
-&amp;gt; https://www.example.com/page
-&amp;gt; https://www.example.com/new-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That page works, but it takes three hops to reach the final URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before launch
&lt;/h2&gt;

&lt;p&gt;Before shipping a site migration, landing page, or SEO update, check:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does the URL end at the page you expect?&lt;/li&gt;
&lt;li&gt;Are there more redirects than necessary?&lt;/li&gt;
&lt;li&gt;Are redirects using the right status code?&lt;/li&gt;
&lt;li&gt;Is there a redirect loop?&lt;/li&gt;
&lt;li&gt;Does the final URL return &lt;code&gt;200&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Are &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;https&lt;/code&gt;, &lt;code&gt;www&lt;/code&gt;, and non-www variants consistent?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  301 vs 302 in plain terms
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;301&lt;/code&gt; when the move is permanent. This is the usual choice for old pages, changed slugs, and canonical domain redirects.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;302&lt;/code&gt; when the move is temporary. This is useful for short campaigns, experiments, or temporary routing.&lt;/p&gt;

&lt;p&gt;The important thing is consistency. A permanent URL migration that accidentally uses temporary redirects can create confusion for crawlers and reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple redirect audit workflow
&lt;/h2&gt;

&lt;p&gt;Pick the important URLs first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;homepage&lt;/li&gt;
&lt;li&gt;top landing pages&lt;/li&gt;
&lt;li&gt;pages with backlinks&lt;/li&gt;
&lt;li&gt;old URLs from the previous site&lt;/li&gt;
&lt;li&gt;paid campaign URLs&lt;/li&gt;
&lt;li&gt;sitemap URLs&lt;/li&gt;
&lt;li&gt;links used in email or social campaigns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then inspect each URL and record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;starting URL&lt;/li&gt;
&lt;li&gt;every hop&lt;/li&gt;
&lt;li&gt;status code for each hop&lt;/li&gt;
&lt;li&gt;final URL&lt;/li&gt;
&lt;li&gt;final status code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the final URL is correct and the chain is short, the redirect is probably fine. If there are multiple hops, loops, or unexpected destinations, fix the redirect rules before launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free browser tool
&lt;/h2&gt;

&lt;p&gt;I made a browser-based redirect checker inside I.T &amp;amp; All:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://itnall.com/tools/redirect-checker?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=redirect-checker" rel="noopener noreferrer"&gt;https://itnall.com/tools/redirect-checker?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=redirect-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is useful when you want to check a URL quickly without opening terminal tools or browser devtools.&lt;/p&gt;

&lt;h2&gt;
  
  
  When terminal tools are better
&lt;/h2&gt;

&lt;p&gt;If you are checking redirects inside CI or auditing hundreds of URLs, use command-line tools or a crawler. For one-off checks, launch QA, and quick debugging, a browser-based checker is usually faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;Before launch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep redirect chains short.&lt;/li&gt;
&lt;li&gt;Prefer one canonical domain.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;301&lt;/code&gt; for permanent moves.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;302&lt;/code&gt; only for temporary moves.&lt;/li&gt;
&lt;li&gt;Make sure the final page returns &lt;code&gt;200&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Recheck after deployment, not only locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small redirect mistakes are easy to miss, but they are much easier to fix before search engines and users start hitting the new URLs.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>nextjs</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
