singularity-forge/native
github-actions[bot] 55c8988900 release: v2.47.0
2026-03-25 19:53:13 +00:00
..
.cargo feat: Rust native engine scaffold with grep module 2026-03-13 12:21:09 -06:00
crates merge: incorporate main into next (resolve 26 conflicts) 2026-03-24 13:21:19 -06:00
npm release: v2.47.0 2026-03-25 19:53:13 +00:00
scripts Respect CARGO_TARGET_DIR in native build script (#1441) 2026-03-19 15:28:44 -06:00
.gitignore feat: Rust native engine scaffold with grep module 2026-03-13 12:21:09 -06:00
.npmignore fix: include darwin-arm64 native binary in npm tarball (Phase A hotfix) 2026-03-13 14:33:37 -06:00
Cargo.lock feat(native): add libgit2-backed git read operations for dispatch hotpath (#388) 2026-03-14 13:07:02 -06:00
Cargo.toml feat: Rust native engine scaffold with grep module 2026-03-13 12:21:09 -06:00
README.md feat: Rust native engine scaffold with grep module 2026-03-13 12:21:09 -06:00

GSD Native Engine

Rust N-API addon providing high-performance native modules for GSD.

Architecture

JS (packages/native) -> N-API -> Rust crates
                                  ├── engine/  (N-API bindings, cdylib)
                                  └── grep/    (ripgrep internals, pure Rust lib)

Inspired by Oh My Pi's pi-natives, adapted for GSD's Node.js runtime.

Prerequisites

Build

# Release build (optimized)
npm run build:native

# Debug build (fast compile, no optimizations)
npm run build:native:dev

The build script compiles the Rust code and copies the .node shared library to native/addon/.

Test

# Rust unit tests
cd native && cargo test

# Node.js integration tests
npm run test:native

Modules

grep

Ripgrep-backed regex search using the grep-regex, grep-searcher, and grep-matcher crates.

Functions:

  • search(content, options) — Search in-memory Buffer/Uint8Array content
  • grep(options) — Search files on disk with glob filtering and .gitignore support

TypeScript usage:

import { grep, searchContent } from "@gsd/native";

// Search files
const result = grep({
  pattern: "TODO",
  path: "./src",
  glob: "*.ts",
  ignoreCase: true,
  maxCount: 100,
});

// Search content
const contentResult = searchContent(Buffer.from(fileContent), {
  pattern: "function\\s+\\w+",
  contextBefore: 2,
  contextAfter: 2,
});

Adding New Modules

  1. Create a new crate in native/crates/ (pure Rust library)
  2. Add N-API bindings in native/crates/engine/src/
  3. Add TypeScript wrapper in packages/native/src/
  4. Add the crate to engine/Cargo.toml dependencies