MAIMU field notes

Why MAIMU moves things to the Trash instead of deleting them

14 Aug 2026

Why MAIMU moves things to the Trash instead of deleting them

You are about to let a stranger's binary loose on your home folder. Being suspicious of that is the correct instinct, and disk cleaners have spent two decades earning it.

So here is MAIMU's answer, in the only form that means anything: not a promise, but the rules the code actually enforces — and what each one costs you when it gets in your way.

Deleting means moving to the Trash

When MAIMU removes something, it renames it into ~/.Trash. That is the whole operation — a rename, not a copy and not a shred.

Two things follow from that, and both matter more than they sound.

It is instant, whatever the size. Trashing a 20 GB Docker.raw takes the same time as trashing a 900 KB folder, because nothing is read or rewritten; only a directory entry moves. And it is reversible by you, in Finder, without MAIMU's help or permission — open the Trash and drag it back out.

You will notice MAIMU tags what it moved: a folder arrives in the Trash as node_modules.maimu-1755043200000. That is deliberate. It means you can always tell what this app took versus what you threw away yourself, and it means two projects' node_modules can sit in the Trash at once without colliding. The trade-off is honest: because it is a plain rename and not a Finder operation, macOS's Put Back has no original location to restore to. You drag it where it belongs, or you run npm i and never think about it again.

Which means the space does not come back yet

Moving something to the Trash stages the reclaim. Your disk is not any emptier until you empty it, and any tool that reports gigabytes freed at the moment it trashes them is quoting you a number rather than the truth.

MAIMU says "trashed" and gives you an Empty Trash button, and those are two separate clicks on purpose. The gap between them is the entire point of the design: it is the window in which you can change your mind.

Permanent delete exists — and is a different button

I would rather tell you this than have you find it: there is a hard delete. It is a separately labelled Delete permanently action, it warns you it means "no takebacks", and it is opt-in per action — never a default, never a setting you can flip on and then forget you flipped.

And it has a hole punched in it that you cannot close: anything over 250 MB can only ever be trashed, never hard-deleted, whatever you click. Big files are the ones with no second copy — the screen recording, the VM image, the dataset. They are exactly where a confident tool does the most damage, so on those the app overrules you.

It refuses to leave your home folder

Every deletion runs through one gate, and the gate takes an absolute path and rejects it unless it sits strictly inside your home directory. Not your home directory itself. Not /Applications, not /System, not /Library, not a path with .. in it doing something clever.

External volumes are read-only territory: MAIMU will happily draw you a sunburst of a 4 TB backup drive, and it will not delete a byte of it.

There is a quiet bonus in that restriction, which is why the first section is true. Because the target is always inside home, and ~/.Trash is on that same volume, trashing is always a same-filesystem rename — never a slow copy across devices.

It can only delete things it found itself

This is the rule I would check first in anyone else's cleanup app.

MAIMU's delete endpoint does not accept a path. It accepts an id from the scan you just ran, and looks that id up in the list of candidates it surfaced. A path never crosses the boundary. There is no free-form delete anywhere in the app — no text field where a path could go, no "advanced" mode, nothing a bug in the user interface could turn into an arbitrary rm.

It is stricter than that, even: ids carry the scan they came from. Select some folders, rescan, then click delete with a stale selection, and it refuses each one with "stale candidate from a previous scan — rescan and select again" rather than deleting whatever now happens to hold that number. That failure mode — the list shifted under you between looking and clicking — is the one that actually eats people's files.

an open ship's logbook on a worn wooden desk beside a fountain pen, handwritten columns, soft window light from the left, photographic, close-up, no legible text or lettering anywhere in the image

Every deletion is written down

Each removal appends one JSON line to ~/Library/Application Support/MAIMU/cleanup.log: the timestamp, whether it was trashed or hard-deleted, the full path, what kind of thing it was, and how many bytes it freed.

Plain text, on your machine, yours to read, grep, or hand to someone else. It is not a feature I expect most people to open twice. It exists because "what did that app do to my disk last Tuesday?" should have an answer that is not a shrug.

If you are the person other people's disk-full tickets land on, that log is the reason this is recommendable at all: you can hand the user a tool and still audit what it did.

Nothing leaves the machine

No account. No sign-in. No telemetry, no analytics, no crash reporting, no cloud. Your scan happens on your Mac, and its results are never uploaded anywhere — the app's own server binds to localhost and answers only itself.

There is exactly one exception, and I would rather name it than let you find it with Little Snitch: once at launch, MAIMU fetches https://maimu.app/version.json to see whether a newer release exists. It is a plain GET for a static file. It sends nothing — no identifier, no licence key, no query string, nothing about your disk — and if it fails, the app carries on in silence. Turn the Wi-Fi off and everything still works; you just do not get told there is an update. It is checked once per launch and surfaced once, because a cleanup app that nags is its own kind of malware.

Your disk's contents are among the more revealing things about you — client names in project folders, an employer's initials in a repo path. None of that is any of my business, so the app is built so that it cannot become my business.

You can check all of this before paying

Scanning is free, and free means the whole thing: the full scan, the sunburst, every finding, every size, every staleness judgement, the table view. The licence gates the parts that delete, and nothing else.

That ordering is deliberate. You get to watch MAIMU be right about your own disk — and disagree with it where it is wrong — before you have any reason to trust it with a single file. If the free half does not convince you, the paid half has not earned $9.99.

The short version

Trash first, home only, nothing but what it found, all of it logged, none of it leaving the Mac. Five rules, each one a place where the app is deliberately less powerful than it could be.

A cleanup tool's job is to be right, and its second job — the one that took longer to build — is to be recoverable when it is wrong.

Download MAIMU for macOS — signed and notarised by Apple, free to see everything.

Curious what it actually finds? Where your Mac's disk actually went is the map: the directories that fill a developer's disk, and which ones regrow by themselves.