KURA
A Finder Replacement for macOS
A kura (蔵) is the thick-walled storehouse at the back of a Japanese property — where a household keeps what it owns but does not use. Everything ends up in one, and nobody knows what is in theirs. The app does three things about that: browse, measure, and clean.
Origin Story開発の背景
Disk-space tools tell you what is big. Finder tells you what is there. Neither answers the question people actually have, which is what is growing. Kura remembers every measurement it takes, so the second time you look at a folder it can show a sparkline and a delta since last time — and a breadcrumb running the whole way back to / where each crumb it has measured before carries what it measured.
How It's Builtつくり方
Most of the engineering went into behaving well at sizes that break file managers. A folder of two hundred thousand files takes seconds to stat, and returning it in one call meant a frozen window followed by one enormous JSON payload for the webview to parse on its main thread. Rust now streams the listing in slices of 500 and the view fills as it reads: the first slice renders immediately, the rest are pooled and flushed on a timer, because every flush re-sorts the whole list and sorting two hundred thousand entries sixty times a second is its own freeze. Navigating away cancels the read rather than finishing a job nobody is waiting for.
Engineering Notesエンジニアリングノート
Streaming two hundred thousand files
Returning a large folder in one call meant seconds of frozen window followed by one enormous JSON payload parsed on the webview's main thread. Rust sends slices of 500 instead: the first renders immediately, the rest are pooled and flushed on a timer, because each flush re-sorts the whole list and sorting two hundred thousand entries sixty times a second is its own freeze.
Selection by arithmetic, not measurement
Tiles are a uniform size, so which are visible is arithmetic and the only measured value is row height for wrapped captions. The rubber band works the same way — O(what you selected) rather than O(what is in the folder), and the only way a band dragged past the bottom of the screen can take items the window has left unmounted.
Why drag and drop is hand-rolled
macOS routes every drag over a webview through the native view first, and Tauri installs a handler there so files from Finder arrive with real filesystem paths — something the DOM will not give us. That handler consumes the drag before WebKit sees it, so dragover and drop never fire on anything in the page. Doing it from pointer events keeps both halves working, and lets the label under the cursor say whether the drop will copy or move.
Undo that does not lie
⌘Z undoes a rename or a move, but not a trash. macOS has no public Put Back API, and an undo that silently did something other than what it said would be worse than not offering one.
The rule that shaped the whole app is that it never deletes anything and never pretends to have done more than it did. A cleaner that quietly frees nothing, or a search that silently stops at 500, is worse than no tool at all — you cannot audit a lie you were never told.
What It Does主な機能
Five Layouts, in Tabs
List, Grid, Gallery, Miller Columns and Focus. Columns shows the hierarchy left to right so you can see what is beside you at every level of the path — drilling in opens a column rather than navigating, so Back still means what it meant. Each tab owns its own history, because tabs sharing a history stack are one window wearing two hats, and you find that out the first time you use them to copy between two folders.
Space — What Is Growing
A squarified treemap for proportion, the 300 largest files ranked, and a breakdown by file kind. Every measurement is kept, so repeat visits answer the change over time rather than just the current total.
Clean, With the Cost Named
Named rules for caches, build artefacts, device backups and stale downloads, plus the big creative ones — DaVinci Resolve's render cache, optimised media and proxies read from Resolve's configured working folder rather than guessed at, and Lightroom and Capture One previews. Each rule says what it is, how big it is, and what taking it costs you. A rule is not all-or-nothing: expand it and any single file can be spared, with the total dropping to match.
Nothing Is Deleted
Every removal is a move to the Trash via NSFileManager.trashItemAtURL — the same call Finder makes — so Put Back works. Which also means trashing a 40 GB cache does not give you 40 GB back; it moves it. The Clean view says so at the top, every time. Emptying the Trash is the sole exception, behind a typed confirmation that touches nothing outside ~/.Trash.
Copies as Jobs, Not as a Frozen Window
A toolbar chip shows a real fraction measured in bytes rather than items, because a folder of one 4 GB clip and two hundred JPEGs is not 99% done when the JPEGs are. Clicking it opens an activity panel: every running job with its own bar, current file, rate, time remaining and Stop button. Progress and cancellation are per file, so a 40 GB folder is no longer one indivisible step where Stop cannot take effect until the thing you wanted stopped has already happened.
Finder's Own Tags
The real com.apple.metadata:_kMDItemUserTags extended attribute, read through Spotlight and written as a binary plist. What you tag in Kura shows up in the Finder sidebar, in every open dialog and in Spotlight — a private tag store would only be a worse copy of something the OS already does well. Every tag in use on the machine appears as its own sidebar section, each row a saved search over kMDItemUserTags, which is all a tag ever was.
Duplicates, Identical and Similar
Identical is byte-for-byte, grouped on size first so almost everything is discarded before a byte is hashed. Similar is perceptual — a difference hash catching burst frames, re-exports and resized copies — run over previews Kura has already cached. Indexing lifts that beyond a single folder, so any photograph can answer where else does this live: the same frame filed under a client folder, an archive drive and a Desktop export is three copies nothing else would put side by side.
⌘K and Saved Searches
A command palette over places, favourites, recent folders and every action, with whole-disk Spotlight results folded in underneath. A query containing kMDItem is passed through raw, so predicates like kMDItemISOSpeed > 3200 work — and any query that finds what you wanted can be saved as a smart folder in the sidebar. Results cap at 500 and the header says so, because a list that stops at 500 without mentioning it is lying about the size of the answer.
Where It Stands現在地
Kura is a working Finder replacement — five layouts, streaming listings, per-file copy jobs, real Finder tags, treemap sizing, duplicate detection and Trash-only cleanup — running as a local build. It is not signed or released; notarisation and a DMG are what stand between it and being installable by anyone else.
Tauri 2 with a Rust core and a React 19 / Vite / Tailwind 4 front end. Directory walking is jwalk running parallel on a background thread with a cancel button and progress events, because a home folder is routinely several hundred thousand entries. The grid and list virtualise: tiles are a uniform size so visibility is arithmetic rather than measurement, spacers stand in for what is not drawn so the scrollbar still describes the whole folder, and the entrance animation is dropped past 400 items — a stagger across forty tiles is a nice touch, across four thousand it is four thousand simultaneous transforms. Rubber-band selection works by index arithmetic too, which is both O(what you selected) rather than O(what is in the folder) and the only way a band dragged past the bottom of the screen can take items the window has left unmounted. Dragging is done from pointer events rather than HTML5 drag and drop, which cannot work in this window at all: macOS routes every drag over a webview through the native view first, and Tauri installs a handler there so Finder's files arrive with real filesystem paths — that handler consumes the drag before WebKit sees it, so dragover and drop never fire in the page. Kura registers as a Viewer for folders and volumes at rank Alternate, which is the honest one: Finder owns folders, Kura offers to.