John Henry · Open Source
Libraries and tools for AI clients, agent protocols, math, on-device ML, and animation — open source, all on npm.
The orrery
Section titled “The orrery”Orrery — every library, liveThirty-five planets, one per library, each running the real npm package in your browser: fractals from @johnhenry/math, a PBFT rollup from raijin, Jujutsu in-page, an optical QR transport, an MCP inspector, and more. Optional Node companion for the server-side ones.
Untrusted Desk — built with the familyAn Orrery planet where window-algebra runs a tiling desk, html-modules supplies every component and safe-fragment renders untrusted notes, proven again in a strict-CSP frame with Trusted Types.
The libraries
Section titled “The libraries”Every library is on npm, and some (the math family and parts of laya-js) are on JSR too. Most run in a browser straight from a CDN with no bundler: Using @johnhenry packages in the browser lists which ones and how to load them with an import map or esm.sh.
aimateyA unified client for the browser's built-in AI APIs and remote model providers, with a matching mock and test harness.
browsermeshPeer-to-peer mesh networking for browser environments: cryptographic identity, CRDTs, virtual sockets, transport, sync, discovery, and a capability-secure microkernel — ten packages, one family.
agent-queryQuery and inspect MCP, A2A, and ACP servers through one interface — plus TanStack bindings and a policy gate.
mathGeometry, intervals, tensors, signals, and units — a core package plus a wide family of focused extensions, originally ported from a 2004-era ActionScript 3 library with ~40 bugs found and fixed along the way.
laya-jsLaya typed-decision models (choice / score / yes-no) in JavaScript on native MLX, WebGPU, or a CPU reference — bit-identical to Python laya-mlx on MLX, with a browser playground.
ecmanimProgrammatic animation for the web: scenes, shapes, and transforms rendered to canvas.
wshBrowser-native remote command execution over WebTransport/WebSocket, with Ed25519 auth, session recording, and an MCP bridge.
oatSigned, capability-safe state and UI transport between devices over just a display and a camera — animated QR fountain codes, no network required.
http-fieldsHTTP Structured Field Values (RFC 8941/9651) — strict, zero-dependency parsing and serialization, plus typed header helpers.
andboxA small sandboxing helper for running untrusted JavaScript.
aimatey-middleware-andboxaimatey middleware for code-based tool execution -- lets LLMs without native tool calling use tools by writing code, run sandboxed via andbox.
apple-foundation-modelsA 1-to-1 TypeScript wrapper for Apple's on-device FoundationModels framework -- text generation, streaming, and automatic tool calling, no network, no API key, macOS 26+ only.
objectifyTurn a directory tree into a structured object — designed to be legible to agents.
fileableDeclaratively describe filesystem artifacts using JSX — plus eject, which runs it backwards: point it at a real directory and get JSX source back.
servableDeclaratively describe an HTTP server using JSX — a small closed set of primitives compiled into one Fetch-API (Request) => Response dispatcher, with optional fileable-tree mounting.
hostableDeclaratively describe an API gateway using JSX — routes across multiple domains/backends by Host header, on top of servable's single-app dispatcher, with ipfs:// upstream support.
packfileCompress a directory into a gzip(Web Bundle) archive and serve it straight back out as HTTP responses — plus client-side blob preview and Isolated Web App primitives.
leserveA simple HTTP/HTTPS server built around one API, serve() — a plain (Request) => Response handler with opt-in WebSocket upgrades, auth middleware, and a test harness.
servantA self-contained, batteries-included HTTP/HTTPS server with built-in routing, middleware, and WebSocket support, dispatched through a service-worker-style addEventListener('fetch', ...) API.
letterpressA tagged-template-string HTTP routing library — define and match request handlers with plain JavaScript syntax, no config objects or decorators.
dialbackReverse proxy HTTP requests over web sockets — an agent dials out, the server dials back through that same connection to reach it.
css-signalsLive browser state — pointer, scroll, keyboard, time, gamepad — as typed CSS custom properties under a runtime prefix. Native CSS scroll timelines where supported, batched JS where not.
circuitThe design system behind these docs and the erisera product sites.
isomorphic-jjA pure-JavaScript reimplementation of jj (Jujutsu) version control — first-class conflicts, works in Node and browsers, no shelling out.
jthA concatenative stack language that compiles to JavaScript — nine packages from types to REPL, one CLI.
raijinBrowser-native mesh rollup framework: PBFT consensus where the users are the validators — experimental research, documented honestly.
temporalsIntervals, cron, recurrence, business days, and humanized durations — with DST as an explicit policy, not an accident.
semantic-chunkerSplit documents into semantically coherent chunks using your own embedding model — full, sentence, or semantic strategies.
spintaxGenerate every variation of a template: ranges, choices, nesting, and back-references, lazily and countably.
testerBrowser-runnable TAP testing with zero dependencies — including Map/Set-aware deep equality.
domableConvert between HTML text, real DOM nodes, and React-element-shaped objects; build DOM with a createElement()-style hyperscript API; turn HTML into Custom Element classes.
hashishLocality-Sensitive Hashing (MinHash) for fast, scalable approximate nearest-neighbor / similarity search over text — zero native dependencies, pluggable storage.
http-converterA modern, browser-compatible HTTP format converter — transform between HTTP strings, HAR, cURL commands, and Fetch API calls.
signalleBeautiful, modern JavaScript signals with optional DOM integration, server-side streaming, scoped isolation, and cross-tab broadcast signals.
mportRoute JavaScript imports across any number of CDNs — deterministic version resolution, adaptive failover between mirrors, lockfiles, compiled down to a standard import map.
window-algebraA functional window manager for the browser: a pure update core, a layout algebra compiled to CSS, drag-and-drop that edits structure, docking, pop-outs, and React and custom-element bindings.
html-modulesDeclarative HTML modules — write Web Components in plain HTML files and import them into a page as namespaced native custom elements. No build step, no custom loader; an optional compiler to ES modules.
safe-fragmentWeb Components that render untrusted HTML through versioned security profiles: an allowlist of elements, attributes and URL schemes, sanitized by the native Sanitizer API or a locked-down DOMPurify. Not yet on npm; pending independent security review.
domkitCustom elements that behave like native HTML — tabs, stylable selects, autocomplete, drill-down menus, theme switches, syntax highlighting, a code editor. One script tag each, no build step, no dependencies.
canvas-fxPixel effects for images, video, canvases, and live HTML, written as HTML: mosaic, palettes with dithering, CRT, halftone, and GLSL shaders. No build step, no dependencies.
data-plotPlots written as HTML: data from a table or datalist, marks from a template, placed with CSS. Scatter, line, bars, heatmaps, Gantt charts, and glyphs. No build step, no dependencies.
webwireConvert between Node's raw http/https objects and the Web Fetch API: IncomingMessage to Request, Response to ServerResponse, Request to http.request() options, and client response to Response. Four functions, no dependencies.
dataflowAn async dataflow scheduler that never holds your values: glitch-free propagation, newest-run-wins cancellation, errors that make dependents wait instead of fail, manual cells, cycle detection, and skip values that spread.
inspectablePreview any JavaScript value (functions, cycles, Maps, errors, proxies) as a small structured-clone-safe tree, so a value living in a Worker or iframe can be shown elsewhere and expanded lazily; plus a value-inspector element.
patchbayA pannable, zoomable canvas and the wires between things on it: screen/world math, wheel, pinch, drag and keyboard gestures, fit-to-content, SVG bezier wires and drag-to-connect. Framework-free.
obfoConvert HTML forms into nested JavaScript objects and back: read a form as an object, fill a form from one, observe its object as it is edited, and generate a form for a JSON value.
These are personal open-source projects, maintained under
github.com/johnhenry and published to npm under
the @johnhenry/* scope. The family was consolidated into the scope during
2026 — each package’s docs carry a provenance note naming its prior unscoped
name, and versions restarted at 0.0.0 on import as a new-era marker, not a
maturity signal.
Commercial products live separately at erisera.com.