Native file-explorer primitives for Electron IDEs.
Rust walks, watches, and searches the tree. TypeScript freezes viewport snapshots. React renders hundreds of thousands of rows without breaking a sweat.
Docs: vibecook-dev.github.io/mille · API reference · npm
| Package | What it is |
|---|---|
@vibecook/mille |
File-explorer engine — Rust core via NAPI, host/renderer split, snapshots, search, decorations |
@vibecook/mille-ui |
React FileTree — virtualized ARIA tree, icons, Git badges, commands, DnD |
Platform binaries ship as optional deps (@vibecook/mille-darwin-arm64, …) and resolve automatically on install.
- Parallel walk + gitignore (symlink-aware for pnpm-style
node_modules) - Live watch with rename pairing and volatile-dir throttling
- Viewport-virtualized mirror with frozen snapshots for React
- Fuzzy filename search (
nucleo) - Decoration pipeline (Git, lint, agent-rules) including port / UtilityProcess fan-out
- Crash-resume via atomic snapshot
- WAI-ARIA 1.2 tree, keyboard model, multi-select, rename / create
- Soft-duotone, monoline default, and Material icon themes
- Imperative
FileTreeRef(revealPath,scrollToRow, …) - Headless entry under a 13 KB gzip budget
pnpm add @vibecook/mille @vibecook/mille-ui
# or: npm install @vibecook/mille @vibecook/mille-uiimport { FileExplorer } from '@vibecook/mille';
import { FileTree } from '@vibecook/mille-ui';
import { duotoneIconTheme } from '@vibecook/mille-ui/icons/duotone';
import '@vibecook/mille-ui/tokens.css';
const fx = new FileExplorer({ roots: ['/path/to/workspace'] });
await fx.populateFromRoots();
export function Sidebar() {
return (
<FileTree
fx={fx}
ariaLabel="Files"
rowHeight={22}
iconTheme={duotoneIconTheme}
/>
);
}For Electron UtilityProcess host/client wiring, packaging, and performance notes see packages/mille/EMBEDDING.md.
| Site | https://vibecook-dev.github.io/mille/ |
| API | https://vibecook-dev.github.io/mille/api.html |
| Icons | https://vibecook-dev.github.io/mille/icons-preview.html |
| Embedding | packages/mille/EMBEDDING.md |
| Types | packages/mille/api.d.ts |
| Changelog | CHANGELOG.md |
| IDE parity assessment | planning/IDE_EXPLORER_PARITY_ASSESSMENT.md |
| IDE parity plan | planning/IDE_EXPLORER_PARITY_PLAN.md |
v0.3.0 is on npm. A native panic now surfaces as a catchable JS error instead of aborting the host process — the shipped binary previously took your editor down with it. Plus soft-delete/undo with real file identity on every platform, IDE workflow integration (Phase 5), and the @vibecook/mille/provider filesystem boundary. Earlier v0.2: soft-duotone icons, roots-in-deltas, lazy list-on-expand, decorations over the port, shell Git client, Material icons, FileTreeRef.
| Platform | Package |
|---|---|
| macOS arm64 | @vibecook/mille-darwin-arm64 |
| macOS x64 | @vibecook/mille-darwin-x64 |
| Windows x64 | @vibecook/mille-win32-x64-msvc |
| Windows arm64 | @vibecook/mille-win32-arm64-msvc |
| Linux x64 glibc | @vibecook/mille-linux-x64-gnu |
| Linux arm64 glibc | @vibecook/mille-linux-arm64-gnu |
| Linux x64 musl | @vibecook/mille-linux-x64-musl |
| Linux arm64 musl | @vibecook/mille-linux-arm64-musl |
crates/mille-core/ Pure-Rust engine (no NAPI)
crates/mille-binding/ napi-rs bindings (cdylib)
crates/mille-bench/ Criterion benches
packages/mille/ TS client + React adapter + EMBEDDING.md
packages/mille-ui/ React FileTree companion
packages/mille-{triple}/ Per-platform .node binaries
docs/ GitHub Pages site (index, API, icons)
apps/playground/ Electron playground
pnpm install
cargo test --workspace --exclude mille-binding
pnpm --filter @vibecook/mille run build:napi:debug
pnpm --filter @vibecook/mille run build:ts
pnpm -r --if-present testRun the observable Electron/UtilityProcess/MessagePort benchmark against an isolated temporary workspace:
pnpm bench:watch
# larger run with a tighter debounce
pnpm bench:watch -- --operations 1200 --debounce 25The playground displays live mirror and paint-ready latency while an external worker performs create, modify, append, rename, copy, and recursive subtree operations. See the watcher benchmark guide for methodology, options, and JSON reports. Native Criterion benchmarks remain available through pnpm bench:core.
- Bump versions on publishable packages.
- Tag and push:
git tag vX.Y.Z && git push origin vX.Y.Z - Release workflow builds all 8 NAPI targets and publishes via npm Trusted Publishing (OIDC) — no long-lived token.
MIT