2026
Eine native macOS-App, die jeden Ordner auf der Festplatte einmal erfasst, diese Karte über das Änderungsprotokoll von macOS aktuell hält und daraus eine kurze Liste macht, die man aufräumen kann, ohne etwas kaputtzumachen.
Ballast ist eine native SwiftUI-App für macOS 26, die drei Fragen der Reihe
nach beantwortet: Wo ist der Speicher hin, was kann gefahrlos weg, und geht
dabei etwas kaputt? Sie richtet sich an alle, denen der Speicher ausgeht, und
besonders an Entwickler, deren Festplatten sich mit node_modules,
Build-Ausgaben, Toolchains, Simulatoren und Paketmanager-Caches füllen – Dinge,
die man gefahrlos löschen kann, aber schwer findet.
Ballast durchläuft /System/Volumes/Data einmal (nicht /, damit per Firmlink
eingebundene Ordner wie /Users nur einmal zählen) und speichert jeden Ordner
in einem SQLite-Index. Die Größen sind der tatsächlich belegte Platz – das, was
du anzeigt –, und Hardlinks werden nur einmal gezählt. Bei jedem weiteren
Start spielt Ballast das FSEvents-Protokoll ab, das macOS ohnehin führt, und
prüft nur geänderte Ordner neu. Ist dem Protokoll nicht zu trauen – verlorene
Ereignisse, übergelaufene IDs, geänderte Wurzel –, scannt es vollständig,
statt zu raten.
Externe Laufwerke und andere Volumes bekommen einen eigenen Index und werden nur auf Wunsch gescannt. APFS- und Mac-OS-Extended-Laufwerke werden über ihr eigenes Änderungsprotokoll aktualisiert; ExFAT und FAT beginnen bei jedem Einhängen ein neues Protokoll, daher scannt Ballast sie neu und sagt das auch.
Jeder Eintrag bekommt eines von vier Urteilen, das im Moment des Löschens erneut geprüft wird:
| Urteil | Beispiele |
|---|---|
| Sicher | App-Caches, node_modules, DerivedData, geladene Installer |
| Erst App beenden | Browser-Cache, während der Browser läuft |
| Erst prüfen | Git-Repositories, Tool-Ordner, Apps |
| Geschützt | App-Daten, Schlüsselbunde, Mail, Fotos, .ssh, .git |
Standard ist In den Papierkorb legen, und jede Bereinigung wird
protokolliert, sodass Put Back sie zurückholen kann – nie über etwas Neues,
das inzwischen am selben Pfad liegt. Werkzeuge mit eigenem Aufräumbefehl
(npm cache clean, go clean -modcache, brew cleanup) führen diesen Befehl
aus, statt Dateien zu löschen. Ballast fragt zum Löschen nie nach
Administratorrechten.
target/ nur neben einer Cargo.toml, .next nur neben einer
package.json oder Next-Konfiguration –, nie allein anhand des Namens.brew und git.Index, Wachstumsverlauf und Bereinigungsprotokoll bleiben in
~/Library/Application Support/Ballast. Update-Prüfungen (Sparkle) und anonyme
Nutzungsdaten sind beide aus, bis man zustimmt; Nutzungsereignisse enthalten
nur Werte aus festen Listen, Booleans und Bereiche – nie Pfade, Namen oder
exakte Größen.
Releases liegen als Ballast.zip auf GitHub. Die Builds sind ad hoc signiert
und nicht notarisiert, daher fragt macOS beim ersten Start nach einer
Bestätigung. Festplattenvollzugriff wird empfohlen, damit auch geschützte
Ordner gemessen werden können.
Swift 6, SwiftUI, SQLite, FSEvents, WidgetKit, App Intents, Sparkle. Lizenziert unter der GNU AGPL v3.