A system monitor and cleanup toolkit for the Mac menu bar, written in Rust.
Kipimo's menu bar panel shows free disk space, memory pressure, battery charge and power draw, CPU load and temperature, network speed, and the batteries of your Bluetooth devices. The tools clear out caches and logs, uninstall apps together with the files they leave behind, show what is filling your disk, list everything that starts automatically, and check your apps for updates.
Everything Kipimo removes goes to the Trash, where Finder's Put Back can restore it. Kipimo takes 5.6 MB on disk and about 9 MB of memory with the panel closed.
Kipimo is in English, Simplified Chinese, Japanese, German, French, Spanish, Brazilian Portuguese and Korean, and follows your Mac's language. You can set Kipimo's language in System Settings › General › Language & Region › Applications.
Kipimo (kee-PEE-moh) is Swahili for "measurement" or "gauge".
- The panel
- Tools: Clean up · Uninstall · Space · Startup items · Updates
- Alerts and the weekly summary
- Install · Updating Kipimo · Uninstall Kipimo
- Privacy and safety
- Resource use
- Troubleshooting
- Development
- License
Click the menu bar icon to open the panel.
| Card | Shows |
|---|---|
| Mac Health | An overall status, with your Mac's model and memory, or what needs attention |
| Protection | Whether XProtect, the malware protection built into macOS, is on, and when its definitions were updated |
| Startup disk | Free space, with a Clean up button |
| Memory | Memory pressure; hover for used, compressed and swap |
| Battery | Charge, charging state and the power the Mac is drawing, in watts |
| CPU | Load, chip temperature and the busiest app |
| Network | Download and upload speed |
| Devices | Battery levels of AirPods, keyboards, mice and other Bluetooth devices |
| Today's recommendation | A suggestion, such as a cleanup or waiting app updates. Later hides it until tomorrow |
The panel refreshes every 2 seconds while it's open (every second, if you choose that in Settings). When it's closed, Kipimo checks once a minute and colours the menu bar icon if something needs attention.
Open Kipimo opens the tools. The gear opens a menu with Settings, Launch at Login, Check for Updates and Quit.
Clean up finds files that apps and macOS recreate when they need them: app and macOS caches, logs and crash reports, Xcode build data, old device symbols and simulators, and package manager caches (Homebrew, npm, Yarn, pnpm, Cargo, pip, Gradle, CocoaPods and Go). It also lists old Xcode archives, Mail's copies of attachments you've opened, and iPhone and iPad backups older than 90 days. Backups always start unticked, because a backup may be the only copy of a device's data.
Each category shows its size and a risk label, and expands to list every item. Items that would be slow to download again start unticked with a note saying why. These include browsers used for automated testing, AI models, and items over 1 GB. Caches that a running app is using are skipped.
Clean moves the ticked items to the Trash. Empty Trash… asks Finder to empty the Trash, and Finder asks you to confirm.
Pick an app to see everything it stores on your Mac: preferences, caches, saved window state, containers and more. The list sorts by name, size or last use.
An app's preferences and caches start ticked. Its data, such as Application Support folders and containers, starts unticked, so documents and message history aren't removed by accident. If the app or any of its background helpers is running, Kipimo says so and offers to stop it. Apps that come with macOS can't be removed.
When you drag an app to the Trash yourself, Kipimo sends a notification about 30 seconds later listing the files the app left behind. You can review them and move the ones you choose to the Trash.
Space shows what is using your disk, folder by folder, largest first. Choose your home folder, a disk or any other folder, then open folders to go deeper, or switch to Largest files. Sizing /System/Applications (13,850 files, 726 MB) took 0.2 seconds on an M5 Max.
Show in Finder reveals the selected item, and Move to Trash… removes it after you confirm. Kipimo won't move iCloud Drive's top-level folders, app containers, running apps or system folders.
Startup items lists everything set to start automatically: apps that open at login, items allowed to run in the background, and launch agents and daemons. Each entry shows who signed it, whether it's running, and the program it runs. Kipimo flags items that are unsigned, signed only for this Mac, have an invalid signature, or point at a missing file.
- Disable and Move to Trash… stops a launch agent of yours and moves its file to the Trash. Put Back restores the file, and the item starts again at your next login.
- Login items and background items are managed in System Settings, and Kipimo opens the right page.
- Entries left by apps you deleted get Remove Leftover Entries. It opens Login Items in System Settings, which makes macOS remove them, and scans again.
- Kipimo needs Full Disk Access to list login items and background items. Without it, a banner offers Open Full Disk Access…, or Use Password… to read them for that scan with your administrator password.
- Items installed for all users need an administrator. Turn Off with Password… and Remove with Password… run the commands shown, after macOS asks for your password. Copy Commands gives them to you for Terminal instead.
- Check Apps for Broken Signatures verifies the apps in Applications and lists those whose code signature is broken.
- Ignore is for a flagged item, or an app from the signature check, that you already know about. It stays in the list, dimmed and marked Ignored, and stops counting toward "need a look", the menu bar icon's colour, Mac Health and Today's recommendation. An ignored app also stops counting as broken. The item counts again if its problem changes, for example a new flag, a rebuilt program, or an app that was updated or reinstalled. Stop Ignoring undoes it.
Reinstall… opens a source for a good copy of an app whose signature broke:
- its App Store page, for an App Store app;
- the download its update feed offers, for an app the Updates tool can check;
- otherwise its developer's site, if the app or its feed names it.
If Kipimo has none of these, it shows the app in Finder, and you can replace it with a new copy from its developer.
Download and Replace… appears when the feed offers the app as a zip. Quit the app first. Kipimo downloads the zip, unpacks it, and checks that the new copy's signature is intact and is a Developer ID signature from the same team as your copy. Then it moves the old copy to the Trash and puts the new copy in its place. If a step fails, nothing changes, and after a replacement, Put Back restores the old copy.
Kipimo doesn't re-sign broken apps. A new signature made on your Mac would replace the developer's, which can break the app's keychain access, its entitlements and its updates.
Updates checks each app's update feed (Sparkle, electron-updater and Visual Studio Code's) and the App Store for newer versions. Each result shows your version, the new version and its release date. Kipimo doesn't install updates. Release Notes, Download Page and Open Updater open the place where you update the app.
Kipimo can notify you when:
- the startup disk has less than 20 GB free;
- the Trash grows past 2 GB;
- a Bluetooth device's battery drops below 20%;
- an external drive is connected or ejected;
- an app you moved to the Trash left files behind.
Each alert can be switched off and its limit changed in Settings › Alerts. An alert fires when a value crosses its limit, and not again until the value recovers.
Once a week (Sunday at 10:00 unless you change it), Kipimo sends a notification with how much space a cleanup would free and how many app updates are waiting.
Download Kipimo-macOS-arm64.zip from the latest release. It needs a Mac with Apple silicon and macOS 15 or later. Unzip it, drag Kipimo into Applications and open it. Kipimo is signed and notarized by Apple.
You need:
- a Mac with Apple silicon and macOS 15 or later;
- the Xcode Command Line Tools (
xcode-select --install); - Rust 1.98 or later, from rustup.
git clone https://github.com/piedol/kipimo.gitcd kipimo && scripts/bundle.sh --installThe script builds Kipimo, signs it, copies it to /Applications and opens it. It signs with KIPIMO_SIGN_IDENTITY if that's set, or else with the first Developer ID Application certificate in your keychain. Without either, it uses an ad-hoc signature, which works on your Mac, but macOS then forgets Kipimo's Full Disk Access after every rebuild.
When Kipimo first opens:
- Allow notifications when macOS asks. Alerts, the weekly summary and new versions of Kipimo use them.
- If Settings › General says Kipimo can't read the Trash, click Open Full Disk Access… and turn Kipimo on. It needs this to measure the Trash, to notice apps you drag there and to list login and background items.
- To start Kipimo when you log in, turn on Launch Kipimo at login in Settings › General.
Kipimo has no Dock icon. To quit, open the panel and choose Quit Kipimo from the gear menu.
Choose Check for Updates… from the gear menu, or from the menu you get by right-clicking the menu bar icon, to look for a new version. Kipimo also checks about a minute after it starts if the last check was more than a day ago, then daily while it runs. To stop these checks, turn off Check for updates automatically in Settings › General.
When a new version is out, a notification says so and the menu shows Update to Kipimo X.Y.Z…. Choose it, or click the notification, to read the release notes, then click Install and Relaunch.
Kipimo downloads the release from GitHub and installs it only if the download matches the checksum GitHub lists for it and the app inside is signed by Kipimo's developer and notarized by Apple. The old copy goes to the Trash and the new version opens in its place. If the Kipimo window is moving files to the Trash, downloading an app or asking you to confirm something, the install waits until that's finished, then closes the window. If your account can't make changes in the folder Kipimo is in, Kipimo opens the release page in your browser instead.
- Turn off Launch Kipimo at login in Settings › General, then quit Kipimo from the gear menu.
- Move
/Applications/Kipimo.appto the Trash. - Move
~/Library/Caches/top.piedol.kipimoto the Trash, along with~/Library/Caches/Kipimoif updates left it there, and rundefaults delete top.piedol.kipimoto remove its settings. - Remove Kipimo from System Settings › Privacy & Security › Full Disk Access, if you added it.
- Kipimo moves files to the Trash and never deletes them. Emptying the Trash is left to you and Finder.
- It acts only on the items you tick, and asks before it moves anything. Cancel is the default button in every confirmation, so pressing Return never removes files.
- It never changes the contents of an app bundle or re-signs an app. Download and Replace swaps the whole app for its developer's copy, after checking that copy's signature.
- It runs as your user, without a privileged helper. Administrator rights come into play when you click Use Password…, Turn Off with Password… or Remove with Password…, and macOS asks for the password itself.
- It goes online only to check for updates and, when you ask, to download a replacement app or a new version of Kipimo.
- Kipimo checks GitHub once a day for a new version. You can turn this off in Settings › General.
- The Updates tool checks your apps at most once a day, when you click Check Now, and when you click Reinstall… for an app whose feed it hasn't checked in the last day. Each update feed is asked only about its own app. Download and Replace… downloads the app from the link in its feed, and only when you click it. App Store apps are looked up through Apple's public lookup service in batches of up to 40, so Apple sees which App Store apps you have. Kipimo sends no analytics.
Measured on a MacBook Pro with an M5 Max:
| Measure | Value |
|---|---|
| App size | 5.6 MB |
| Memory, panel closed | about 9 MB |
| Memory, panel open | about 14 MB |
| CPU, panel closed | about 0.03% |
The tools run in a separate process that quits when their window closes, so the menu bar app stays at about 9 MB.
| Problem | Fix |
|---|---|
| The panel says Kipimo can't read the Trash | Click Open Full Disk Access… in Settings › General and turn Kipimo on. |
| Startup items lists entries from apps you deleted | Click Remove Leftover Entries. macOS removes them when Login Items opens in System Settings. Entries it keeps can't start, since their apps are gone. Ignore them to stop the warning. |
| Startup items says login and background items need Full Disk Access | Click Open Full Disk Access… in the banner, turn Kipimo on and click Scan Again. Use Password… reads them for that scan instead. |
| Uninstall says macOS blocked the move | Allow Kipimo in System Settings › Privacy & Security › App Management. Kipimo offers to open that page. |
| No notifications arrive | Check System Settings › Notifications › Kipimo, then click Send a Test Notification in Settings › Alerts. |
| You removed something you need | Open the Trash in Finder, select the item and choose Put Back. |
| Battery watts or CPU temperature are missing | macOS didn't report them on this Mac. The rest of the panel keeps working. |
| An update opens the release page instead of installing | Your account can't make changes in the folder Kipimo is in. Download the zip from that page and drag Kipimo into Applications. |
crates/
├── app the AppKit interface (objc2): panel, tools window, Settings, notifications
├── sys readers: CPU, memory, disk, network, battery and power, temperature, Bluetooth, XProtect
├── clean Clean up, Uninstall and the leftover finder
├── space folder sizes for Space
├── startup startup items, code signatures and the broken-signature check
└── updates update feeds and App Store versions
The engine crates (clean, space, startup and updates) have no UI code, and each documents its API at the top of its lib.rs. Tests run against synthetic folders in a temporary directory and never touch your home folder.
Power and temperature come from private IOKit interfaces (IOReport and the SMC), so those two readings may stop working in a future version of macOS.
crates/app/src/update/ checks GitHub for a new release of Kipimo and installs it: the download, the checksum, signature and notarization checks, and replacing the app and reopening it. The folder is shared with piedol's other Mac apps and kept the same in each. Kipimo's menu item, setting, notification and update window are in crates/app/src/update_ui.rs.
To test an update with a copy in another folder, next to the installed Kipimo:
TMPDIR=/tmp/kipimo-update KIPIMO_UPDATE_TEST=install KIPIMO_LOG=1 /path/to/Kipimo.app/Contents/MacOS/KipimoIt opens the tools window, checks GitHub and installs a newer release without asking, closing the tools window first. The separate TMPDIR keeps it from finding the installed Kipimo's lock file and quitting. KIPIMO_UPDATE_FEED=<url> reads the release from that URL instead of GitHub.
Kipimo is translated into Simplified Chinese, Japanese, German, French, Spanish, Brazilian Portuguese and Korean. It uses the language macOS picks for it: your preferred languages in System Settings › General › Language & Region, or the one set for Kipimo there.
Text the user sees goes through the calls in crates/app/src/i18n.rs, with the English text as the key:
tr("Quit Kipimo") // fixed text
trf("Saved to {folder}", &[("folder", &name)]) // values in the text, by name
trn(count, "{n} item", "{n} items") // counts; both forms are literal- Keys must be string literals, so the test below can find them. Translate whole sentences:
trf("Saved to {folder}", …), nevertr("Saved to") + &name, because word order differs between languages. - Placeholders are named,
{folder}rather than{}, so a translation can move them. - The engine crates (
clean,space,startup,updates) have no UI code, so text they produce is translated in the app crate, with atr("…")literal for each value. Leave untranslated: product and brand names, file names, URL schemes, settings keys, log and debug output, and the self-tests. - Each language is a flat JSON object in
locales/<lang>.json, from the English text to the translation.scripts/bundle.shturns each into<lang>.lproj/Localizable.stringsin the app bundle.
cargo test runs catalogs_match_the_source, which fails when a catalog is missing a key, still has a key the code no longer uses, or has different placeholders from the English. Add the new English text to every catalog when you add a string.
To see the app in a language without changing your Mac's settings:
open /Applications/Kipimo.app --args -AppleLanguages '(de)'Bug reports and pull requests are welcome. Before opening a pull request, run:
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspaceKipimo calls Apple's frameworks through objc2. It uses ureq with rustls for the Updates tool's checks, and plist and quick-xml to read app metadata and update feeds.
Copyright 2026 piedol.
Kipimo is free software under the GNU General Public License v3.0 or later. You can use, study, share and change it, including at work. If you distribute a modified version, you must release its source under the same license.









