The local searcher · your disk, asked properly

Your files.
Found properly.

Point the searcher at any folder and it indexes every file inside — then answer-time is instant: six ways of matching a name, a path search, type and size and date filters, a grep through the text files with the matching line shown, duplicate detection three ways, and the results as a table, as cards, or as a wall of thumbnails.

All of it happens in this browser, on your machine, using the File System Access API. No file, no name and no path is ever uploaded — the page cannot see a byte you did not point it at. What it keeps, it keeps in your own browser, and the privacy section below names all four of those things. It needs a desktop browser: a phone cannot hand a folder to a web page at all.

files indexed

on the shelf

kinds of file

0bytes of yours uploaded

The searcher

Point it at a folder. Ask it anything.

The index is built once, when you choose the folder; every filter below re-asks it instantly. Chrome and Edge give the whole File System Access API — the folder picker, the pin, and a ZIP that streams straight to disk. Safari and Firefox ship none of that: they get the broad picker and the drop zone, which index the same tree but cannot pin it and build a ZIP in memory instead. All three doors need a desktop browser. A phone or a tablet cannot hand a folder to a web page at all, and this page will say so if you are on one.

The searcher

Drop a folder here — it is walked in full Files work too. A dropped folder goes around the picker entirely, which is the way in when Chrome refuses one.

Chrome refuses to open some folders through the picker — the whole home folder and anything it considers system territory — and says so in its own dialog (“contains system files”). That is the browser’s blocklist, not a fault here. Three ways past it: pick a subfolder instead, drop the folder on the zone above, or use the broad picker — both of the last two take any folder.

Name
Path
Type
Size
Modified — browsers only expose last-modified
Content — text files under 2 MB
Exclude & depth — applied while indexing
node_modules, .git, __pycache__ and friends are skipped on their own, through all three doors. A bare word matches a whole folder or file name (tmp drops tmp/, not tmp-reports/); * stops at a slash and ** crosses one. Depth counts levels below the chosen folder.
Extra
Saved filters — kept in this browser

No folder chosen yet

A searcher, not a search box.

Choose a folder and every file in it joins an index that lives only in this tab. From there the whole bench works instantly:

  • Six name modes — contains, starts, ends, exact, regex, fuzzy.
  • Content grep — search inside the text files, matching line shown.
  • Duplicates — three definitions of “the same file”, marked in place.
  • Bulk actions — select across pages, copy paths, export CSV or JSON, or download a ZIP this page writes by hand.
  • Previews — images with zoom, video and audio players, text and code, and a real hex dump for anything binary. A PDF is handed to the browser’s own viewer, with Open and Download buttons beside it because this site’s security policy may refuse to embed one.

Keyboard: / aims the name search. Click a row to put the cursor on it — then (or jk) walk the rows, Space selects, Enter previews, c copies the selected paths, and Esc closes the preview and drops the cursor, which hands the arrow keys back to the page. In the content grep, foo -bar means foo without bar.

The bench

Three moves, honestly made.

01

Find

Six name modes, a path search, extensions and categories, size and date windows, exclude patterns, a depth limit, and a duplicate detector with three definitions of “the same”. Every filter narrows the same index, instantly.

02

Read

Grep through the text files with the matching line shown under each hit. Preview anything in place — images with zoom, video and audio players, text and code, and a hex dump of the first 4 KB when a file is binary. A PDF goes to the browser’s own viewer, with buttons to open or save it if this site’s security policy refuses the frame.

03

Act

Select across pages and act on the lot: copy the paths, export the table as CSV or JSON, or download the files themselves as a ZIP — one this page writes by its own hand, no library, so the bytes go straight from your disk to your download.

Privacy

Nothing of yours leaves. That is the design.

The searcher makes no network request with your files in it — not to labs.llc, not to anyone. Its code contains no fetch() at all. No name, no path and no byte of anything you index leaves this machine.

Four things persist, and all four live in your own browser. This page used to say two, which was wrong in a way worth correcting rather than softening:

  • The filter sets you name and save. Yours, listed in the console, deletable one by one.
  • The exclude list, the depth limit and the hide-dotfiles switch, remembered so you do not retype them each visit.
  • A snapshot of the last index — names, full paths, sizes, dates and types, up to 60,000 files. Never contents. It is what lets the page open where you left it, and it is written after every scan. Clear deletes it, and so does Dismiss on the ribbon it appears under.
  • A pinned folder’s handle, if you pin one. A handle is a claim on nothing until the browser re-authorises it, and it asks every session — the page could not silently read the folder again even if it wanted to. The Pinned badge unpins it.

One thing does leave this page, and it is not yours: the same Google Analytics tag every page on labs.llc carries, loaded in the head before anything else. It counts a page view. It is never told what you indexed, because nothing on this page is ever told what you indexed.

About

A searcher, brought home.

The Local File Searcher, brought home to labs.llc and rebuilt on the paper system in both editions. Everything the standalone build could do survives — the six name modes, the content grep, the duplicate detector, the three views, the bulk bench, the previews, the presets, the pinned folder — and the toolchain got lighter on the way: the ZIP is written by the page itself and the previews need no highlighting library. Best in Chrome or Edge, where the File System Access API is whole; a fallback picker covers the rest.