{"type":"project","slug":"zap","name":"zap","tagline":"A terminal-native, agent-friendly app uninstaller. Dry-run by default, Trash not rm, undo always.","status":"active","repo_url":"https://github.com/waltspence/zap","site_url":null,"started_on":"2026-08-20","last_activity_on":"2026-08-31","url":"https://waltspence.com/projects/zap","links":{"html":"https://waltspence.com/projects/zap","json":"https://waltspence.com/projects/zap.json","txt":"https://waltspence.com/projects/zap.txt","md":"https://waltspence.com/projects/zap.md","canonical":"https://waltspence.com/projects/zap"},"topics":[{"name":"Automation","slug":"automation","url":"https://waltspence.com/topics/automation"},{"name":"macOS","slug":"macos","url":"https://waltspence.com/topics/macos"},{"name":"Python","slug":"python","url":"https://waltspence.com/topics/python"}],"tags":[],"description_markdown":"Dragging an app to the Trash leaves its data behind. GUI cleaners fix that but can't be scripted. `zap` finds an application and every leftover it scattered — preferences, caches, containers, launch agents, receipts — and removes them recoverably.\n\nThree ideas hold it together: removal is a dry run unless you say otherwise; everything goes to the Trash and is journaled so `zap undo` can bring it back; and bundle ids come from the system, not from guesses. Pure Python stdlib, zero runtime dependencies, macOS and Linux.\n\nThe Reclaim Space feature (large files, old downloads, app leftovers) came from [Featherweight](/projects/featherweight), which was folded in rather than shipped alone.\n\nOn its first run on my own machine, it freed over 20 GB.","description_html":"<p>Dragging an app to the Trash leaves its data behind. GUI cleaners fix that but can’t be scripted. <code>zap</code> finds an application and every leftover it scattered — preferences, caches, containers, launch agents, receipts — and removes them recoverably.</p>\n<p>Three ideas hold it together: removal is a dry run unless you say otherwise; everything goes to the Trash and is journaled so <code>zap undo</code> can bring it back; and bundle ids come from the system, not from guesses. Pure Python stdlib, zero runtime dependencies, macOS and Linux.</p>\n<p>The Reclaim Space feature (large files, old downloads, app leftovers) came from <a href=\"/projects/featherweight\">Featherweight</a>, which was folded in rather than shipped alone.</p>\n<p>On its first run on my own machine, it freed over 20 GB.</p>\n","architecture_markdown":null,"updates":[{"on":"2026-08-31","kind":"milestone","title":"Featherweight folded in as Reclaim Space","body":"One tool instead of two. The standalone shell and licensing were pruned."},{"on":"2026-08-29","kind":"changelog","title":"A plan is a selection over a fresh scan","body":"One structural fix replaced three rounds of plan-file patches."}],"related":[{"type":"project","title":"Featherweight","url":"https://waltspence.com/projects/featherweight"}],"backlinks":[{"type":"project","title":"Featherweight","url":"https://waltspence.com/projects/featherweight"},{"type":"page","title":"Now","url":"https://waltspence.com/now"},{"type":"thought","title":"You have to understand who you are. That’s critical to finding happiness.","url":"https://waltspence.com/thoughts/s000004"}]}