find-my-files

A file-name search for Windows. Reads the NTFS $MFT directly and stays current through the USN journal. A Rust engine with a WinUI 3 UI. Indexes file names only.

Apache-2.0 · Windows 10/11 (NTFS)

How it works

  • Initial index from the $MFT — reads the NTFS Master File Table directly; every file name on a volume in seconds.
  • Updates via the USN journal — change notifications come from the USN change journal. No file watchers, no rescans; updates reach the UI in about a second.
  • Multithreaded search — substring scan over an in-memory index. p99 ≤ 50 ms at a million files, 3+ characters.
  • Native WinUI 3 — Mica, a dark theme, Per-Monitor V2 DPI.
  • Memory-lean — indexing file names only means about 100 MB per million files.
  • Privilege separation — MFT/USN access is split into a Windows service. The UI runs unprivileged and talks over a same-user-only named pipe.

Out of scope

Indexes file names only. The following are not covered.

  • Content search
  • Property / tag indexing
  • Previews
  • FTP / HTTP servers
  • FAT / exFAT / network drives
  • ReFS
  • Cross-platform

Performance targets

The numbers the final milestone must hit.

MetricTarget
First index (real C:)250k ≈ 5s / 1M ≈ 60s
Search p99 (1M files, 3+ chars)≤ 50 ms
Change reflection (USN → UI)≤ 1 s
Snapshot restore → ready≤ 2 s
RAM (engine only, bytes/file)≤ 110 B

Architecture

Default is an unprivileged UI plus the service. Without the service, it falls back to an elevated in-process engine.

WinUI 3 app (C#, unprivileged) ──named pipe──▶  fmf-service (Rust, LocalSystem)
   └─ IEngineClient boundary                       └─ fmf-core: $MFT scan, USN tailing,
       ├─ PipeEngineClient (default)                  in-memory index, query engine
       └─ FfiEngineClient ──P/Invoke──▶  fmf_engine.dll (elevated in-proc fallback)

Get started

Toolchain pinned via mise, tasks run with just.

mise install        # rust + dotnet
just setup          # toolchain + git hooks
just build          # engine (cargo, release)
just service-install  # register the service (elevated, once)

Prebuilt binaries are on the Releases page.