A focused, native macOS application uninstaller
Inspect associated files, choose what stays, and move only approved items to the Trash.
Download latest release · Product flow · Safety model · Development
Tilly is intentionally small and conservative. It relies on application metadata and exact associations instead of broad filename matching, so the user can review the result before anything moves to the Trash.
Note
Tilly is designed for macOS 27 or later and currently ships as an Apple Silicon arm64 application.
Tilly keeps the uninstall workflow visible from start to finish:
- Choose an app from the installed applications sidebar.
- Inspect related files discovered from bundle identity, preferences, containers, caches, logs, saved state, and support directories.
- Review every candidate with independent selection controls, sorting, search, paths, sizes, and shared-data warnings.
- Move approved items to the Trash after a native confirmation step.
- Swift 6 and SwiftUI with a modern
NavigationSplitViewlayout. - Native macOS controls, menus, confirmation dialogs, progress states, and keyboard actions.
- Light, dark, tinted, and clear app icon appearances through Icon Composer.
- Independent sidebar search and related-file search.
- Lightweight transient feedback for actions such as copying a path or bundle identifier.
- Installed application scanning from
/Applicationsand~/Applications. - Bundle identifier, display name, executable, and version-normalized identity matching.
- Metadata-aware container matching, including UUID-named containers.
- Application Support, caches, preferences, logs, saved state, containers, group containers, and launch agents.
- Bounded nested searches with duplicate parent and child pruning.
- Shared group containers marked for review and deselected by default.
- Selected files are moved to the macOS Trash instead of permanently deleted.
- Protected system paths and symlink targets are validated before removal.
- Running applications are detected before deletion and can be asked to quit.
- Tilly preflights every selected item and moves none if any selected item lacks access.
- Missing files, permission failures, and partial deletion results are reported clearly.
- No privileged helper, elevated shell command, or background daemon.
Important
Tilly is an uninstaller. Always review the selected paths before confirming a removal. Shared containers can belong to multiple applications and are intentionally excluded from the default selection.
Tilly searches known locations and prefers confidence over recall. It does not search every file on disk or delete unrelated data based on a loose filename match.
Tilly has no broad notification, camera, contacts, automation, or network permissions. Storage summaries avoid scanning personal folders at startup. On first launch, Tilly offers an optional Full Disk Access setup guide. Related application data is inspected on demand when an application is selected. If macOS protects a selected location, Tilly explains the requirement and opens the relevant System Settings pane instead of silently failing.
Open the latest release, download the Apple Silicon DMG, and drag Tilly to Applications.
The current release is locally built, ad hoc signed, and not notarized because the project does not yet have a Developer ID distribution certificate. macOS may ask you to Control-click Tilly in Applications and choose Open on the first launch. Read the release notes for the checksum and verification details.
Requirements:
- macOS 27 or later
- Xcode 27 or later
- Swift 6
Open the native project:
open Tilly.xcodeprojSelect the Tilly scheme and press Run.
Build the native app target from the command line:
xcodebuild \
-project Tilly.xcodeproj \
-scheme Tilly \
-configuration Debug \
-derivedDataPath .xcodebuild \
buildThe development app is created at:
.xcodebuild/Build/Products/Debug/Tilly.app
Use SwiftPM for lightweight compilation:
swift buildFormat and lint Swift sources with Xcode's formatter:
xcrun swift-format format --in-place --recursive Tilly
xcrun swift-format lint --recursive TillyFor the complete local DMG and release process, read docs/RELEASING.md.
Tilly/
├── App/ # Application entry point
├── Features/
│ ├── Sidebar/ # Installed application browser
│ ├── Storage/ # Storage summary
│ └── Uninstaller/ # Related-file review and removal actions
├── Models/ # Small value models
├── Services/ # Filesystem scanning, storage, and deletion
├── Shared/ # Search and feedback components
├── ViewModels/ # Main-actor application state
└── Resources/ # Icon Composer source asset
Tilly.xcodeproj/ # Native macOS app project
Package.swift # SwiftPM development target
See docs/ARCHITECTURE.md for runtime flow and design decisions.
Tilly focuses on one workflow: inspect and remove files associated with an installed application.
The default app does not search every file on disk, inspect package receipts, remove orphaned data unrelated to a selected app, install a privileged helper, or run privileged system cleanup. These are deliberate boundaries that keep the experience understandable and reduce false-positive risk.
- Report a bug
- Request a feature
- Join Discussions
- Read the contribution guide
- Read the security policy
Tilly is available under the MIT License.