Headless by Design
Bring your own UI. JOC provides typed cores and workflow engines — not components or design systems.
Headless TypeScript libraries for real frontend infrastructure — one package, one job. Install only what you need. Docs and playgrounds stay honest with the API.

Independent @jayoncode/* libraries — same docs, playgrounds, and SemVer discipline across the ecosystem.
@jayoncode/browser-lifecycle
Observe browser state. Derive session intelligence. React with confidence.
@jayoncode/form-intelligence
Declare the workflow. Keep the markup. Submit with confidence.
@jayoncode/object-diff
Stop guessing what changed. Get paths, patches, and review-ready output.
@jayoncode/storage
Namespace it. Expire it. Upgrade it — without localStorage glue.
Arrive with a problem — not a package name. Pick an intent and we’ll point you at the right library.
@jayoncode/browser-lifecycle
Pause work when the tab is hidden, idle, or the network drops
Pause work when the tab is hidden
import { createBrowserLifecycle } from "@jayoncode/browser-lifecycle";
const lifecycle = createBrowserLifecycle({
autoStart: true,
idleTimeout: 60_000,
});
lifecycle.on("page:hidden", () => {
pausePolling();
pauseMedia();
});
lifecycle.on("page:visible", () => {
resumePolling();
});
lifecycle.on("session:idle", () => {
lockSensitiveScreen();
});
lifecycle.on("connection:reconnect", () => {
flushOfflineQueue();
});Independent TypeScript cores, optional framework adapters, and shared docs — not a monolithic SDK.
Typed · modular · SSR-aware
An ecosystem of independent, headless TypeScript libraries — framework-agnostic cores, documentation as a product, and interactive playgrounds. Install only what you need. Compose when you need more.
Explore Browser Lifecycle, Form Intelligence, Object Diff, and Storage live — hide the tab, edit a form, diff two objects, or exercise persistence in the browser.
Three live packages on npm. More libraries will be announced as they enter development.
@jayoncode/browser-lifecycle
Observe browser state. Derive session intelligence. React with confidence.
View docs@jayoncode/form-intelligence
Declare the workflow. Keep the markup. Submit with confidence.
View docs@jayoncode/object-diff
Stop guessing what changed. Get paths, patches, and review-ready output.
View docs@jayoncode/storage
Namespace it. Expire it. Upgrade it — without localStorage glue.
View docs