Mac Sai: the open-source Mac cleaner, optimizer, and malware scanner. A free, Apple-notarized alternative to CleanMyMac, built with Swift 6 and SwiftUI.
1,525
stars
188
commits
Swift
primary language
Sep 3, 2026
updated
The open-source Mac cleaner, optimizer, and malware scanner.
A feature-complete, free alternative to CleanMyMac, built with Swift 6 and SwiftUI.
Install in one command:
brew install --cask mac-sai
Or grab the latest DMG from Releases.
Mac Sai is a free, open-source macOS app that cleans junk files, removes malware, optimizes performance, uninstalls apps completely, and visualizes disk usage — all from a single, beautiful interface. It replicates every major feature of CleanMyMac while being fully transparent and community-driven.
No subscriptions. No telemetry. No ads. Just a clean Mac.
Available in English, Simplified Chinese (简体中文), and Russian (Русский). Switch anytime in Settings → Interface Language; by default it follows your system language.
| Mac Sai | CleanMyMac | Pearcleaner | PureMac | OnyX | Mole | |
|---|---|---|---|---|---|---|
| Price | Free | $39.95/yr | Free | Free | Free | Free (CLI) |
| Open source | ✅ BSD-3 | ❌ | ✅ Fair-code | ✅ MIT | ❌ | ✅ MIT |
| Telemetry | ❌ None | ⚠️ Yes | ❌ None | ❌ None | ❌ None | ❌ None |
| Native GUI app | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ CLI (paid GUI separate) |
| Smart Scan (one-click) | ✅ | ✅ | ❌ | ➖ Partial | ❌ | ➖ Interactive CLI |
| System Junk (16 categories) | ✅ | ✅ | ➖ | ✅ | ➖ Limited | ✅ |
| Universal Binary thinning | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Malware scanner | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Browser privacy cleaner | ✅ | ✅ | ❌ | ❌ | ➖ | ❌ |
| Uninstaller with leftover detection | ✅ 10-level | ✅ | ✅ Focus | ❌ | ❌ | ✅ |
| Disk treemap visualizer | ✅ | ❌ | ❌ | ❌ | ❌ | ➖ Analyzer |
| Duplicate finder | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Menu bar system monitor | ✅ | ✅ Menu | ❌ | ❌ | ❌ | ❌ |
| Maintenance scripts | ✅ | ✅ | ❌ | ❌ | ✅ Strong | ➖ |
| In-app activity log viewer | ✅ | ❌ | ❌ | ❌ | ❌ | N/A CLI |
| Notarized by Apple | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
| macOS version | 14+ | 13+ | 13+ | 13+ | varies | varies |
CleanMyMac is a great product — they deserve the revenue from users who want a polished, supported experience. Mac Sai is for everyone who'd rather have transparent source code and zero subscription.
| Module | Description |
|---|---|
| Smart Scan | One-click scan combining cleanup, protection, and performance analysis with live progress across 13 modules |
| System Junk | 16 scan categories — user/system caches, logs, language files, broken preferences, broken login items, document versions, iOS backups, Xcode junk, Universal Binary thinning (detects fat Mach-O binaries with both arm64 and x86_64 slices and rewrites them to your native arch via lipo), deleted users, and more |
| Mail Attachments | Find cached attachments from Apple Mail, Outlook, and Spark |
| Trash Bins | Empty trash from all locations including external drives |
| Module | Description |
|---|---|
| Malware Removal | Signature-based scanning with 3 depths (Quick / Balanced / Deep), checks launch agents/daemons, browser extensions, and known malware patterns |
| Privacy | Clean Safari, Chrome, and Firefox data — history, cookies, cache. System traces cleanup with time filters |
| Module | Description |
|---|---|
| Optimization | Manage login items and launch agents with enable/disable toggles |
| Maintenance | 10 system tasks — free RAM, run maintenance scripts, repair permissions, rebuild Launch Services, reindex Spotlight, flush DNS, thin Time Machine snapshots. Tasks are tagged with severity (safe / disruptive) and "Run All" requires explicit confirmation; long-running tasks can be cancelled mid-flight |
| Module | Description |
|---|---|
| Uninstaller | 10-level app matching engine that finds every associated file across 17+ Library subdirectories. Complete removal, app reset, unused app detection |
| Updater | Check for available updates across installed apps via Sparkle appcast feeds |
| Module | Description |
|---|---|
| Space Lens | Squarified treemap visualization of disk usage with drill-down navigation |
| Large & Old Files | Find files >50 MB sorted by size and last access date |
| Duplicates | Progressive detection — size grouping → partial SHA-256 (4KB) → full hash → inode verification |
| Shredder | Secure file erasure with standard, permanent, and secure overwrite modes |
A glassmorphism menu bar widget that puts your Mac's vitals one click away — an independent process that launches at login and is toggled from the app's sidebar. No need to open the main window just to check in.
host_processor_info, vm_statistics64, APFS capacity, IOKit power source), color-graded green → amber → red--| Shortcut | Action |
|---|---|
| ⌘R | Start a scan in the current module |
| ⌘K | Clean the current selection (when results are showing) |
| ⌘1–⌘9 | Jump to the first nine sidebar modules (Smart Scan → …) |
| ⌘, | Open Settings |
Mac Sai
├── MacClean — Main SwiftUI app (14 modules, 15 views)
├── MacCleanKit — Shared framework (models, constants, protocols)
├── MacCleanHelper — XPC privileged helper (LaunchDaemon for root ops)
└── MacCleanMenu — Menu bar monitor (independent process)
| Layer | Technology |
|---|---|
| Language | Swift 6 with strict concurrency |
| UI | SwiftUI + AppKit hybrid |
| Concurrency | Actors, TaskGroup, async/await, @Sendable |
| Database | GRDB.swift (SQLite) with WAL mode |
| File Scanning | URLResourceKey prefetching on APFS |
| Incremental Updates | FSEvents with historical replay |
| Privileged Ops | SMAppService + NSXPCConnection |
| System Stats | Mach APIs (host_processor_info, vm_statistics64, proc_pidinfo) |
Mac Sai is designed to never cause data loss:
/System, /usr, /bin, /sbin, Apple system apps are untouchable/var↔/private/var, /tmp↔/private/tmp, /etc↔/private/etc resolved to a single canonical form so symlink-redirect detection doesn't false-positive on legitimate system paths~/Library/Caches/com.apple.*) are dropped at scan time so they never reach the UI as cleanableTask.isCancelled between chunks so cancellation is responsiveScanCoordinator.cancel() returns the UI to idle within about a second without orphan tasksNSXPCListener.setCodeSigningRequirement (macOS 13+) so the kernel itself rejects connections from any process whose code signature doesn't match the main app's identifier and teamMac Sai is in the official Homebrew cask repository, so no tap is needed:
brew install --cask mac-sai
Mac Sai is notarized by Apple, so it launches from Spotlight or Applications with no warnings, no right-clicks, and no commands.
Installed via the old
iliyami/macsaitap? You can drop it now that Mac Sai is in the official cask:brew untap iliyami/macsai(your installed app and futurebrew upgradeare unaffected).
curl -fsSL https://raw.githubusercontent.com/iliyami/MacSai/main/scripts/install.sh | bash
This downloads the latest DMG and installs the app to /Applications.
Download the latest DMG from Releases and drag Mac Sai to your Applications folder. Mac Sai is notarized by Apple, so it launches normally with no Gatekeeper warning and no extra commands.
git clone https://github.com/iliyami/MacSai.git
cd MacSai
swift build
swift test # run 486 tests
bash scripts/build-dmg.sh # build local DMG (unsigned)
Some modules (Mail Attachments, Privacy, Malware) need Full Disk Access to scan protected areas:
If you installed with Homebrew, remove the app and all of its support files in one command:
brew uninstall --zap --cask mac-sai
For a DMG or manual install, run the uninstaller (it also handles a Homebrew install):
curl -fsSL https://raw.githubusercontent.com/iliyami/MacSai/main/scripts/uninstall.sh | bash
Both remove Mac Sai plus its preferences, caches, logs, and database under ~/Library. If a leftover entry remains under System Settings → General → Login Items, remove it there; macOS clears it once the app is gone.
Mac Sai is code-signed with an Apple Developer ID and notarized by Apple. That matters more for a cleaning app than for almost anything else you install, because you are about to give it deep access to your files. You deserve to know that what runs on your Mac is genuinely ours and has not been tampered with.
Here is what that gives you, enforced by your own Mac and not just promised by us:
Put together with the fact that the entire source is open for you to read, this is a chain of trust you do not have to take on faith: the code is public, we sign every release, Apple verifies it, and your Mac re-checks that seal every single time you open the app.
Maintainers: see docs/RELEASING.md for how releases are built, signed, and notarized.
Sources/
├── MacClean/
│ ├── App/ # App entry point, state, content view
│ ├── Core/
│ │ ├── Scanner/ # FileTreeScanner, TargetedScanner, ScanCoordinator
│ │ ├── Cleaner/ # CleaningEngine, SafetyGuard
│ │ ├── Cache/ # GRDB database layer
│ │ └── FSMonitor/ # FSEvents incremental watcher
│ ├── Modules/ # 13 scan modules
│ │ ├── SystemJunk/ # 16 junk categories
│ │ ├── Malware/ # Signature scanner + real-time monitor
│ │ ├── Uninstaller/ # 10-level app matching engine
│ │ ├── SpaceLens/ # Squarified treemap algorithm
│ │ ├── Duplicates/ # Progressive hash pipeline
│ │ └── ...
│ ├── Views/ # SwiftUI views (14 module views + shared components)
│ ├── ViewModels/ # @Observable view models
│ ├── Services/ # PermissionManager, XPCClient
│ └── Utilities/ # SuperEllipse shape, extensions
├── MacCleanKit/ # Shared models, constants, protocols
├── MacCleanHelper/ # XPC privileged helper (root operations)
└── MacCleanMenu/ # Menu bar system monitor
Tests/ # XCTest suite — 486 tests
├── MacCleanTests/ # app-target tests
├── MacCleanKitTests/ # framework tests
└── MacCleanTestSupport/ # fixtures (withTempHome, withFakeApp, …)
swift test
XCTest-based suite covering:
SafetyGuard — 24 adversarial tests (symlinks, traversal, NULL bytes, SIP, protected apps, file caps, idempotence)CleaningEngine — 9 integration tests (dry-run, trash, permanent, error handling, operation log)PlistJunkFilter — 9 tests including Apple-system-domain safety contractScanCoordinator state machine — scan/cancel/category-filter/include-heavyTargetedScanner integration — runs against synthetic temp directory fixturesBrokenPreferences, BrokenLoginItems, UniversalBinaries, DeletedUsers)SquarifiedTreemap — empty, single, multi-node, area conservation, aspect-ratio propertiesAppMatching — all 10 levels of the uninstaller pattern engineDuplicateDetection — size groups, partial/full hash groups, inode dedupMalwareSignatures — name patterns + suspicious launch agent payloadsMaintenanceTask — all 10 tasks have descriptions, icons, executable pathsFileGroup — by-size / by-type / by-age groupingAppcastParser — Sparkle XML parsingVolumeInfo — usage math, equalityAppDatabase — GRDB cache CRUD, migrations, invalidationFSEventMonitor — invalidated-path computationAppDiscovery, AppPathFinder — smoke testsTest infrastructure (Tests/MacCleanTestSupport/) provides withTempHome, withFakeApp, withFakePlist, and other fixture helpers so tests stay deterministic and never touch the user's real home.
Coverage target: 85%+ overall, 100% on SafetyGuard and CleaningEngine (the death-and-life files). See docs/TESTING.md for the full roadmap.
Mac Sai takes security seriously:
Don't take our word for it — the source and the running process are both checkable.
1. Search the source for networking APIs
# Network client APIs used by the app (update check + optional Sparkle appcast fetches
# for the Updater module). There is no analytics, crash reporter, or tracker SDK.
rg -n 'URLSession|NSURLConnection' Sources --glob '*.swift'
You should only see networking in:
Sources/MacCleanKit/UpdateChecker.swift — optional Mac Sai update check (Settings → turn off Automatic update checks, or never press Check for Updates)Sources/MacClean/Modules/Updater/UpdaterModule.swift — user-driven scan of other apps' Sparkle feeds when you open the Updater moduleURL(string:) also appears for local deep links (macclean://…), System Settings panes, and constant GitHub URLs in Constants.swift — those are not outbound telemetry.
2. Watch the live process
# While Mac Sai is running (and you are not checking for updates / using Updater):
lsof -i -P -n | grep -i 'MacClean\|Mac Sai\|MacSai' || echo "no network sockets"
Expected: no established connections from the main app when you are only cleaning locally. If Automatic update checks are on, you may briefly see one HTTPS request to api.github.com after launch — disable that toggle in Settings to silence it.
Third-party tools like Little Snitch or LuLu make the same check visual: allowlist nothing for Mac Sai except the optional GitHub Releases call you choose to enable.
We welcome contributions! Please read our Contributing Guidelines before submitting a PR.
git checkout -b feature/amazing-feature)swift test)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the BSD 3-Clause License — see the LICENSE file for details.
This means you can use, modify, and redistribute this code, but you must:
Inspired by the open-source Mac utility community:
If Mac Sai saved you from a subscription, a ⭐ helps others find it.
Mac Sai is free software built by the community, for the community.
If you find it useful, please star the repo and share it with others.
Swift
98.2%
Shell
1.3%
Mac Sai: the open-source Mac cleaner, optimizer, and malware scanner. A free, Apple-notarized alternative to CleanMyMac, built with Swift 6 and SwiftUI.
1,525
stars
188
commits
Swift
primary language
Sep 3, 2026
updated
The open-source Mac cleaner, optimizer, and malware scanner.
A feature-complete, free alternative to CleanMyMac, built with Swift 6 and SwiftUI.
Install in one command:
brew install --cask mac-sai
Or grab the latest DMG from Releases.
Mac Sai is a free, open-source macOS app that cleans junk files, removes malware, optimizes performance, uninstalls apps completely, and visualizes disk usage — all from a single, beautiful interface. It replicates every major feature of CleanMyMac while being fully transparent and community-driven.
No subscriptions. No telemetry. No ads. Just a clean Mac.
Available in English, Simplified Chinese (简体中文), and Russian (Русский). Switch anytime in Settings → Interface Language; by default it follows your system language.
| Mac Sai | CleanMyMac | Pearcleaner | PureMac | OnyX | Mole | |
|---|---|---|---|---|---|---|
| Price | Free | $39.95/yr | Free | Free | Free | Free (CLI) |
| Open source | ✅ BSD-3 | ❌ | ✅ Fair-code | ✅ MIT | ❌ | ✅ MIT |
| Telemetry | ❌ None | ⚠️ Yes | ❌ None | ❌ None | ❌ None | ❌ None |
| Native GUI app | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ CLI (paid GUI separate) |
| Smart Scan (one-click) | ✅ | ✅ | ❌ | ➖ Partial | ❌ | ➖ Interactive CLI |
| System Junk (16 categories) | ✅ | ✅ | ➖ | ✅ | ➖ Limited | ✅ |
| Universal Binary thinning | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Malware scanner | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Browser privacy cleaner | ✅ | ✅ | ❌ | ❌ | ➖ | ❌ |
| Uninstaller with leftover detection | ✅ 10-level | ✅ | ✅ Focus | ❌ | ❌ | ✅ |
| Disk treemap visualizer | ✅ | ❌ | ❌ | ❌ | ❌ | ➖ Analyzer |
| Duplicate finder | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Menu bar system monitor | ✅ | ✅ Menu | ❌ | ❌ | ❌ | ❌ |
| Maintenance scripts | ✅ | ✅ | ❌ | ❌ | ✅ Strong | ➖ |
| In-app activity log viewer | ✅ | ❌ | ❌ | ❌ | ❌ | N/A CLI |
| Notarized by Apple | ✅ | ✅ | ✅ | ✅ | ✅ | N/A |
| macOS version | 14+ | 13+ | 13+ | 13+ | varies | varies |
CleanMyMac is a great product — they deserve the revenue from users who want a polished, supported experience. Mac Sai is for everyone who'd rather have transparent source code and zero subscription.
| Module | Description |
|---|---|
| Smart Scan | One-click scan combining cleanup, protection, and performance analysis with live progress across 13 modules |
| System Junk | 16 scan categories — user/system caches, logs, language files, broken preferences, broken login items, document versions, iOS backups, Xcode junk, Universal Binary thinning (detects fat Mach-O binaries with both arm64 and x86_64 slices and rewrites them to your native arch via lipo), deleted users, and more |
| Mail Attachments | Find cached attachments from Apple Mail, Outlook, and Spark |
| Trash Bins | Empty trash from all locations including external drives |
| Module | Description |
|---|---|
| Malware Removal | Signature-based scanning with 3 depths (Quick / Balanced / Deep), checks launch agents/daemons, browser extensions, and known malware patterns |
| Privacy | Clean Safari, Chrome, and Firefox data — history, cookies, cache. System traces cleanup with time filters |
| Module | Description |
|---|---|
| Optimization | Manage login items and launch agents with enable/disable toggles |
| Maintenance | 10 system tasks — free RAM, run maintenance scripts, repair permissions, rebuild Launch Services, reindex Spotlight, flush DNS, thin Time Machine snapshots. Tasks are tagged with severity (safe / disruptive) and "Run All" requires explicit confirmation; long-running tasks can be cancelled mid-flight |
| Module | Description |
|---|---|
| Uninstaller | 10-level app matching engine that finds every associated file across 17+ Library subdirectories. Complete removal, app reset, unused app detection |
| Updater | Check for available updates across installed apps via Sparkle appcast feeds |
| Module | Description |
|---|---|
| Space Lens | Squarified treemap visualization of disk usage with drill-down navigation |
| Large & Old Files | Find files >50 MB sorted by size and last access date |
| Duplicates | Progressive detection — size grouping → partial SHA-256 (4KB) → full hash → inode verification |
| Shredder | Secure file erasure with standard, permanent, and secure overwrite modes |
A glassmorphism menu bar widget that puts your Mac's vitals one click away — an independent process that launches at login and is toggled from the app's sidebar. No need to open the main window just to check in.
host_processor_info, vm_statistics64, APFS capacity, IOKit power source), color-graded green → amber → red--| Shortcut | Action |
|---|---|
| ⌘R | Start a scan in the current module |
| ⌘K | Clean the current selection (when results are showing) |
| ⌘1–⌘9 | Jump to the first nine sidebar modules (Smart Scan → …) |
| ⌘, | Open Settings |
Mac Sai
├── MacClean — Main SwiftUI app (14 modules, 15 views)
├── MacCleanKit — Shared framework (models, constants, protocols)
├── MacCleanHelper — XPC privileged helper (LaunchDaemon for root ops)
└── MacCleanMenu — Menu bar monitor (independent process)
| Layer | Technology |
|---|---|
| Language | Swift 6 with strict concurrency |
| UI | SwiftUI + AppKit hybrid |
| Concurrency | Actors, TaskGroup, async/await, @Sendable |
| Database | GRDB.swift (SQLite) with WAL mode |
| File Scanning | URLResourceKey prefetching on APFS |
| Incremental Updates | FSEvents with historical replay |
| Privileged Ops | SMAppService + NSXPCConnection |
| System Stats | Mach APIs (host_processor_info, vm_statistics64, proc_pidinfo) |
Mac Sai is designed to never cause data loss:
/System, /usr, /bin, /sbin, Apple system apps are untouchable/var↔/private/var, /tmp↔/private/tmp, /etc↔/private/etc resolved to a single canonical form so symlink-redirect detection doesn't false-positive on legitimate system paths~/Library/Caches/com.apple.*) are dropped at scan time so they never reach the UI as cleanableTask.isCancelled between chunks so cancellation is responsiveScanCoordinator.cancel() returns the UI to idle within about a second without orphan tasksNSXPCListener.setCodeSigningRequirement (macOS 13+) so the kernel itself rejects connections from any process whose code signature doesn't match the main app's identifier and teamMac Sai is in the official Homebrew cask repository, so no tap is needed:
brew install --cask mac-sai
Mac Sai is notarized by Apple, so it launches from Spotlight or Applications with no warnings, no right-clicks, and no commands.
Installed via the old
iliyami/macsaitap? You can drop it now that Mac Sai is in the official cask:brew untap iliyami/macsai(your installed app and futurebrew upgradeare unaffected).
curl -fsSL https://raw.githubusercontent.com/iliyami/MacSai/main/scripts/install.sh | bash
This downloads the latest DMG and installs the app to /Applications.
Download the latest DMG from Releases and drag Mac Sai to your Applications folder. Mac Sai is notarized by Apple, so it launches normally with no Gatekeeper warning and no extra commands.
git clone https://github.com/iliyami/MacSai.git
cd MacSai
swift build
swift test # run 486 tests
bash scripts/build-dmg.sh # build local DMG (unsigned)
Some modules (Mail Attachments, Privacy, Malware) need Full Disk Access to scan protected areas:
If you installed with Homebrew, remove the app and all of its support files in one command:
brew uninstall --zap --cask mac-sai
For a DMG or manual install, run the uninstaller (it also handles a Homebrew install):
curl -fsSL https://raw.githubusercontent.com/iliyami/MacSai/main/scripts/uninstall.sh | bash
Both remove Mac Sai plus its preferences, caches, logs, and database under ~/Library. If a leftover entry remains under System Settings → General → Login Items, remove it there; macOS clears it once the app is gone.
Mac Sai is code-signed with an Apple Developer ID and notarized by Apple. That matters more for a cleaning app than for almost anything else you install, because you are about to give it deep access to your files. You deserve to know that what runs on your Mac is genuinely ours and has not been tampered with.
Here is what that gives you, enforced by your own Mac and not just promised by us:
Put together with the fact that the entire source is open for you to read, this is a chain of trust you do not have to take on faith: the code is public, we sign every release, Apple verifies it, and your Mac re-checks that seal every single time you open the app.
Maintainers: see docs/RELEASING.md for how releases are built, signed, and notarized.
Sources/
├── MacClean/
│ ├── App/ # App entry point, state, content view
│ ├── Core/
│ │ ├── Scanner/ # FileTreeScanner, TargetedScanner, ScanCoordinator
│ │ ├── Cleaner/ # CleaningEngine, SafetyGuard
│ │ ├── Cache/ # GRDB database layer
│ │ └── FSMonitor/ # FSEvents incremental watcher
│ ├── Modules/ # 13 scan modules
│ │ ├── SystemJunk/ # 16 junk categories
│ │ ├── Malware/ # Signature scanner + real-time monitor
│ │ ├── Uninstaller/ # 10-level app matching engine
│ │ ├── SpaceLens/ # Squarified treemap algorithm
│ │ ├── Duplicates/ # Progressive hash pipeline
│ │ └── ...
│ ├── Views/ # SwiftUI views (14 module views + shared components)
│ ├── ViewModels/ # @Observable view models
│ ├── Services/ # PermissionManager, XPCClient
│ └── Utilities/ # SuperEllipse shape, extensions
├── MacCleanKit/ # Shared models, constants, protocols
├── MacCleanHelper/ # XPC privileged helper (root operations)
└── MacCleanMenu/ # Menu bar system monitor
Tests/ # XCTest suite — 486 tests
├── MacCleanTests/ # app-target tests
├── MacCleanKitTests/ # framework tests
└── MacCleanTestSupport/ # fixtures (withTempHome, withFakeApp, …)
swift test
XCTest-based suite covering:
SafetyGuard — 24 adversarial tests (symlinks, traversal, NULL bytes, SIP, protected apps, file caps, idempotence)CleaningEngine — 9 integration tests (dry-run, trash, permanent, error handling, operation log)PlistJunkFilter — 9 tests including Apple-system-domain safety contractScanCoordinator state machine — scan/cancel/category-filter/include-heavyTargetedScanner integration — runs against synthetic temp directory fixturesBrokenPreferences, BrokenLoginItems, UniversalBinaries, DeletedUsers)SquarifiedTreemap — empty, single, multi-node, area conservation, aspect-ratio propertiesAppMatching — all 10 levels of the uninstaller pattern engineDuplicateDetection — size groups, partial/full hash groups, inode dedupMalwareSignatures — name patterns + suspicious launch agent payloadsMaintenanceTask — all 10 tasks have descriptions, icons, executable pathsFileGroup — by-size / by-type / by-age groupingAppcastParser — Sparkle XML parsingVolumeInfo — usage math, equalityAppDatabase — GRDB cache CRUD, migrations, invalidationFSEventMonitor — invalidated-path computationAppDiscovery, AppPathFinder — smoke testsTest infrastructure (Tests/MacCleanTestSupport/) provides withTempHome, withFakeApp, withFakePlist, and other fixture helpers so tests stay deterministic and never touch the user's real home.
Coverage target: 85%+ overall, 100% on SafetyGuard and CleaningEngine (the death-and-life files). See docs/TESTING.md for the full roadmap.
Mac Sai takes security seriously:
Don't take our word for it — the source and the running process are both checkable.
1. Search the source for networking APIs
# Network client APIs used by the app (update check + optional Sparkle appcast fetches
# for the Updater module). There is no analytics, crash reporter, or tracker SDK.
rg -n 'URLSession|NSURLConnection' Sources --glob '*.swift'
You should only see networking in:
Sources/MacCleanKit/UpdateChecker.swift — optional Mac Sai update check (Settings → turn off Automatic update checks, or never press Check for Updates)Sources/MacClean/Modules/Updater/UpdaterModule.swift — user-driven scan of other apps' Sparkle feeds when you open the Updater moduleURL(string:) also appears for local deep links (macclean://…), System Settings panes, and constant GitHub URLs in Constants.swift — those are not outbound telemetry.
2. Watch the live process
# While Mac Sai is running (and you are not checking for updates / using Updater):
lsof -i -P -n | grep -i 'MacClean\|Mac Sai\|MacSai' || echo "no network sockets"
Expected: no established connections from the main app when you are only cleaning locally. If Automatic update checks are on, you may briefly see one HTTPS request to api.github.com after launch — disable that toggle in Settings to silence it.
Third-party tools like Little Snitch or LuLu make the same check visual: allowlist nothing for Mac Sai except the optional GitHub Releases call you choose to enable.
We welcome contributions! Please read our Contributing Guidelines before submitting a PR.
git checkout -b feature/amazing-feature)swift test)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the BSD 3-Clause License — see the LICENSE file for details.
This means you can use, modify, and redistribute this code, but you must:
Inspired by the open-source Mac utility community:
If Mac Sai saved you from a subscription, a ⭐ helps others find it.
Mac Sai is free software built by the community, for the community.
If you find it useful, please star the repo and share it with others.
Swift
98.2%
Shell
1.3%