Skip to content

Repository files navigation

mille

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

npm npm ui CI License: MIT


Packages

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.

Engine highlights

  • 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

UI highlights

  • 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

Quickstart

pnpm add @vibecook/mille @vibecook/mille-ui
# or: npm install @vibecook/mille @vibecook/mille-ui
import { 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.

Documentation

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

Status

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.

Supported platforms

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

Repo layout

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

Development

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 test

Watcher benchmark

Run 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 25

The 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.

Release

  1. Bump versions on publishable packages.
  2. Tag and push: git tag vX.Y.Z && git push origin vX.Y.Z
  3. Release workflow builds all 8 NAPI targets and publishes via npm Trusted Publishing (OIDC) — no long-lived token.

License

MIT

About

High-performance native file-explorer primitives for Electron IDEs. Rust core, NAPI, virtualized React tree (@vibecook/mille + @vibecook/mille-ui).

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages