A modern, native-looking macOS application uninstaller built with Electron. Completely removes applications along with their residual files (caches, preferences, logs, support files).
- Complete Uninstallation - Removes apps and all associated junk files
- Modern UI - Native macOS look with automatic dark mode support
- Smart Detection - Finds caches, logs, preferences, and support files
- Visual Reports - Storage charts and detailed uninstall reports
- Safe Deletion - Moves files to Trash (recoverable)
- Drag & Drop - Drag apps to uninstall zone
- Search & Filter - Find apps by name, filter by size
Open Terminal and run:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/aitorevi/open-cleaner/main/install.sh)"Then launch with:
opencleaner-
Prerequisites: Install Node.js (v18 or higher)
-
Clone the repository:
git clone https://github.com/aitorevi/open-cleaner.git cd open-cleaner -
Install dependencies:
npm install
-
Run the app:
npm run dev
- Grant Permissions: On first launch, grant Full Disk Access in System Preferences
- Browse Apps: See all installed applications with their sizes
- Search/Filter: Use the search bar or filter by size category
- Select App: Click on an app to see details and junk files
- Uninstall: Click "Uninstall Application" or drag the app to the trash zone
- Review Report: See exactly what was removed and space freed
Due to macOS 15 Sequoia's strict code signing requirements, unsigned apps are blocked by Gatekeeper. Running in development mode (npm run dev) bypasses this limitation safely.
This is NOT a security risk - you're running the source code directly, which you can inspect yourself.
If you want to distribute a signed .app, you'll need an Apple Developer Certificate ($99/year).
Clean architecture with three layers — each depends only on the one above it:
┌─────────────────────────────────────────┐
│ domain/ │
│ ├── entities/ App, JunkFile │
│ └── ports/ AppScannerPort, │
│ FileSystemPort │
├─────────────────────────────────────────┤
│ application/ │
│ ├── ScanApplications │
│ ├── FindJunkFiles │
│ ├── UninstallApp │
│ ├── MoveToTrash │
│ └── CheckPermissions │
├─────────────────────────────────────────┤
│ infrastructure/ │
│ ├── adapters/ MacOSAppScanner, │
│ │ NodeFileSystem │
│ └── ipc/ IPC handlers │
└─────────────────────────────────────────┘
↕ Electron IPC bridge
┌─────────────────────────────────────────┐
│ renderer/ React 19 UI │
└─────────────────────────────────────────┘
Domain ports make all use cases testable without Electron or a real filesystem.
- Framework: Electron 39 + Vite
- Frontend: React 19 + TypeScript
- UI Components: Radix UI primitives
- Animations: Framer Motion
- Charts: Recharts
- Icons: Lucide React
src/
├── main/ # Electron main process
│ ├── adapters/ # File system & app scanner
│ ├── ipc/ # IPC handlers
│ └── use-cases/ # Business logic
├── preload/ # Preload scripts (IPC bridge)
├── renderer/ # React frontend
│ └── src/
│ ├── components/ # UI components
│ ├── hooks/ # Custom React hooks
│ └── styles/ # Design system
└── shared/ # Shared types
# Run in development mode with hot reload
npm run dev
# Build for production (requires code signing for distribution)
npm run build:mac
# Lint code
npm run lint
# Format code
npm run format- macOS 15 Sequoia or later
- Node.js 18+ (for development mode)
- Full Disk Access permission
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by AppCleaner
- Built with electron-vite
