# @oh-my-pi/pi-natives Native Rust functionality via N-API. ## What's Inside - **Grep**: Regex-based search powered by ripgrep's engine with native file walking and matching - **Find**: Glob-based file/directory discovery with gitignore support (pure TypeScript via `globPaths`) - **SIXEL**: Terminal image encoding for SIXEL-capable terminals (decode, resize, encode in one pass) General-purpose image processing (decode/resize/encode for files and buffers) lives in [`Bun.Image`](https://bun.com/docs/runtime/image) on the JS side; this crate only ships the SIXEL encoder because no built-in equivalent exists for that terminal protocol. ## Usage ```typescript import { grep, find, encodeSixel } from "@oh-my-pi/pi-natives"; // Grep for a pattern const results = await grep({ pattern: "TODO", path: "/path/to/project", glob: "*.ts", context: 2, }); // Find files const files = await find({ pattern: "*.rs", path: "/path/to/project", fileType: "file", }); // SIXEL encode for a terminal cell box (px) const sequence = encodeSixel(pngBytes, widthPx, heightPx); ``` ## Building ```bash # Build native addon from workspace root (requires Rust) bun run build # Type check bun run check ``` ## Architecture `@oh-my-pi/pi-natives` publishes a small core package plus generated platform-specific optional dependency packages: ``` crates/pi-natives/ # Rust source (workspace member) src/lib.rs # N-API exports src/sixel.rs # SIXEL terminal-image encoding Cargo.toml # Rust dependencies native/ # Core loader files and local/CI native build outputs index.js # Public native export surface loader-state.js # Platform, ISA variant, and addon resolution embedded-addon.js # Standalone binary embed stub/generated metadata pi_natives.--modern.node # x64 modern ISA (local/CI artifact) pi_natives.--baseline.node # x64 baseline ISA (local/CI artifact) pi_natives.-.node # non-x64 build artifact npm/-/ # Generated at publish time, not committed package.json # @oh-my-pi/pi-natives-- *.node # Only that platform's addon binary or x64 ISA variants src/ # TypeScript wrappers and generated declarations source native.ts index.ts ``` The published core package contains only the JS loader, declarations, README, and `package.json`. Release publishing generates one leaf package per supported `os`/`cpu` pair and injects those leaves into the core manifest as pinned `optionalDependencies`, so package managers install only the host platform's native addon. x64 leaves include every built ISA variant, and the loader keeps choosing between `baseline` and `modern` at runtime.