Install the browser SDK

Copy nxs.js from nyxis-drivers/js or serve it from your app at /sdk/nxs.js (as on this site). Node.js 18+ and modern browsers supported.

# From your app (Vite, Next, etc.)
# vendor copy or alias:
# import { NxsReader } from "./vendor/nxs.js"

# Optional: WASM compile-in-browser (for .nxs source)
# bash nyxis-drivers/js/build_compile_wasm.sh

Open, filter, render

import { NxsReader, NxsStreamReader } from "./nxs.js";

// Open — tail-index only; no full-file parse
const reader = await NxsReader.open("/data/logs.nxb");

// Filter — walk with cursor (or colSumF64 on columnar layout)
const cur = reader.cursor();
let hits = 0;
for (let i = 0; i < reader.recordCount; i++) {
  cur.seek(i);
  if (cur.getF64("score") > 80) hits++;
}

// Render — prefetch viewport for virtual scroll
await reader.prefetch_viewport(0, 49);
for (let i = 0; i < 50; i++) {
  const row = reader.record(i);
  mountRow(i, row.getStr("username"), row.getF64("score"));
}

// Stream — rows before download finishes
const sr = new NxsStreamReader({
  onRecord(obj, idx) { appendRow(idx, obj); },
});
const res = await fetch("/data/stream.nxb");
const body = res.body.getReader();
while (true) {
  const { done, value } = await body.read();
  if (done) break;
  sr.push(value);
}
const sealed = sr.finish();

Frontend patterns

  • React / Vue tablesFixed row pool + prefetch_viewport — see the log explorer.
  • Virtualized listsTail-index seeks map scroll position to record index without a million DOM nodes.
  • Web WorkersSearch and aggregate off the main thread; hand off via SharedArrayBuffer with COOP/COEP — workers demo.
  • Electron & desktop shellsSame reader in Node (readFileSync) or Chromium — mmap-friendly cold opens.
  • Streaming UIsNxsStreamReader for live reports and tailing WAL segments before seal.
  • Browser analyticsColumnar .nxb + colSumF64 for chart data without JSON reduce loops — report demo.

Next steps