Para Lib
Eight TypeScript libraries — signals, parallel, arena, simd,
csv, arrow, rtp, mcp — published as individual
@para/* npm packages. Pure JS / Wasm. Install only what you use.
Runs on Node, Bun, Deno, browsers, Cloudflare Workers — anywhere V8 or JSC runs. No native dependencies. The
optional .pts syntax compiles to JS calls into these libraries; the
Para Runtime (ParaBun) bundles them and adds GPU / hardware modules.
Install
Each module is its own npm package. Install only the ones your code uses:
Full per-bundler alias setup (Vite / esbuild / webpack) and the rest of the runtime + build instructions live in the install guide.
Libraries
Signals — reactive state
Cells, derived values, effects. Other libraries expose their state as signals, so reactive composition is uniform across the suite.
import { signal, derived, effect } from "@para/signals";
const count = signal(0);
const doubled = derived(() => count.get() * 2);
effect(() => console.log(count.get(), doubled.get())); // 0, 0
count.set(5); // logs: 5, 10
count.update(n => n + 1); // logs: 6, 12
Parallel — work over a Worker pool
pmap / preduce ship pure functions to a persistent Worker pool via
fn.toString(). Functions must be pure — no closures, no outer references.
import { pmap } from "@para/parallel";
function score(row) {
let h = 0;
for (let i = 0; i < row.length; i++) h = (h * 31 + row.charCodeAt(i)) | 0;
return h * h;
}
const scores = await pmap(score, rows, { concurrency: 8 });
SIMD — vector primitives over typed arrays
WebAssembly v128 kernels (simd.wasm) with a scalar JS fallback for hosts without v128.
import { add, dot, sum, mulScalar } from "@para/simd";
const a = new Float32Array([1, 2, 3, 4]);
const b = new Float32Array([5, 6, 7, 8]);
add(a, b); // Float32Array([6, 8, 10, 12])
mulScalar(a, 3); // Float32Array([3, 6, 9, 12])
dot(a, b); // 70
sum(a); // 10
Arrow — in-memory tables, IPC, Parquet
Columnar tables with vectorized computes, Arrow IPC streaming, Parquet read/write. Wire-compatible with apache-arrow 21.1.0.
import { fromRows, mean, toParquet } from "@para/arrow";
const t = fromRows([
{ id: 1, age: 30 },
{ id: 2, age: 25 },
]);
mean(t.column("age")); // 27.5
const buf = await toParquet(t, { compression: "snappy" });
The rest
Four more libraries with their own docs:
-
@para/arena— typed-arrayPool+ scope helper -
@para/csv— RFC 4180 streaming parser -
@para/rtp— RFC 3550 packet framing + jitter buffer -
@para/mcp— Model Context Protocol client (stdio + ws transports)
Para Lang and Para Runtime
Para Lang is an optional .pts syntax that desugars to imports from these
libraries. Use it when reactive code starts piling up parens; skip it if plain TS / JS works.
Para Runtime (ParaBun) is a Bun fork that bundles these libraries and adds native modules for GPU, camera, audio, GPIO/I²C/SPI, and on-device LLM. Reach for it when you need hardware that Node-class runtimes don't expose.