micropuffer is a self-contained, in-memory turbopuffer-compatible query engine for local testing, mocks, and dashboard development.
It intentionally favors correctness over speed. The crate supports row and column writes, filters, vector/BM25/sparse search, aggregations, namespace workspace operations, schema updates, warm-cache mocks, recall debugging, and explain-query shape support.
pnpm add micropufferimport { Micropuffer } from "micropuffer";
const engine = new Micropuffer();
const ns = engine.namespace("quickstart-example");
await ns.write({
distance_metric: "cosine_distance",
upsert_rows: [{ id: 1, vector: [1, 0] }],
});
const response = await ns.query({ rank_by: ["id", "asc"], limit: 10 });
const httpResponse = await ns.queryResponse({ rank_by: ["id", "asc"], limit: 10 });
const storeJson = engine.exportStore();Like turbopuffer, the first write that creates a dense vector column must include distance_metric.
Namespace methods accept JavaScript request objects and return parsed JavaScript response objects. The lower-level engine.query(namespaceName, requestJson) and engine.write(namespaceName, requestJson) methods are still available when an HTTP bridge needs raw JSON strings from the WASM boundary.
The npm package ships generated wasm-bindgen output from pkg/. Generated artifacts are built during prepack and in the publish workflow, but are not committed to git.
cargo build
pnpm build:wasmcargo test
cargo clippy --all --benches --tests --examples --all-features
pnpm exec tsc --noEmit
pnpm test:wasm
pnpm test:live
pnpm test:fuzzLive parity tests require:
TURBOPUFFER_API_KEY=tpuf_...
TURBOPUFFER_REGION=gcp-us-central1See docs/api-coverage.md for current coverage and known gaps.
The pnpm workspace sets minimumReleaseAge: 10080, so dependency installs ignore package versions published in the last seven days.
Run the live head-to-head benchmark with a temporary turbopuffer namespace:
MICROPUFFER_BENCH_ROWS=100000 pnpm bench:liveUseful knobs:
MICROPUFFER_BENCH_DIMS=32
MICROPUFFER_BENCH_BATCH_SIZE=1000
MICROPUFFER_BENCH_QUERY_RUNS=3
MICROPUFFER_BENCH_KEEP_NAMESPACE=1The benchmark covers row writes, ANN, BM25, sparse vector search, filtered order-by, count aggregation, and grouped count aggregation. Query cases run one unmeasured warm-up before recorded samples. It prints a Markdown table plus JSON summaries for copying into issues or release notes.
Run the local stateful WASM benchmark without live API credentials:
MICROPUFFER_STATEFUL_BENCH_ROWS=100000 pnpm bench:statefulIt covers the same query cases as the live benchmark, excluding the live write timing.
See CONTRIBUTING.md. The project uses Conventional Commits and the MIT license.