Skip to content

Framework adapters

Thin wrappers over the public core API. Each framework ships as a separate package so peer dependencies stay accurate.

Previous: Resilience · Next: Overview

Import path

LayerPackage
Core session@jayoncode/browser-lifecycle
React / Vue / …@jayoncode/browser-lifecycle-react (etc.)

Adapters must still dispose the underlying session on unmount. Prefer client-only creation for SSR apps.

Packages

PackageStatus
@jayoncode/browser-lifecycle-reactExperimental (workspace)
@jayoncode/browser-lifecycle-vueExperimental (workspace)
@jayoncode/browser-lifecycle-svelteExperimental (workspace)
@jayoncode/browser-lifecycle-solidExperimental (workspace)
@jayoncode/browser-lifecycle-angularExperimental (workspace)

Install core + one adapter:

bash
npm install @jayoncode/browser-lifecycle @jayoncode/browser-lifecycle-react

Shared rules

  • One session per provider / scope
  • Owned sessions use autoStart: false then client start()
  • Adopted lifecycle instances are not disposed by the adapter
  • No browser observation inside adapters

React

tsx
import {
  BrowserLifecycleProvider,
  useBrowserLifecycleSnapshot,
} from "@jayoncode/browser-lifecycle-react";

function Status() {
  const visibility = useBrowserLifecycleSnapshot((s) => s.visibility);
  return <span>{visibility}</span>;
}

export function App() {
  return (
    <BrowserLifecycleProvider>
      <Status />
    </BrowserLifecycleProvider>
  );
}

Also: useBrowserLifecycle(), useOwnedBrowserLifecycle().

Vue

ts
import { provideBrowserLifecycle, useBrowserLifecycle } from "@jayoncode/browser-lifecycle-vue";

provideBrowserLifecycle();
const { snapshot, lifecycle } = useBrowserLifecycle();

Svelte

svelte
<script>
  import { createBrowserLifecycleContext } from "@jayoncode/browser-lifecycle-svelte";
  const { snapshot } = createBrowserLifecycleContext();
</script>

<p>{$snapshot.visibility}</p>

Solid

tsx
import { BrowserLifecycleProvider, useBrowserLifecycle } from "@jayoncode/browser-lifecycle-solid";

function Status() {
  const { snapshot } = useBrowserLifecycle();
  return <span>{snapshot().visibility}</span>;
}

Angular

ts
import {
  provideBrowserLifecycle,
  injectBrowserLifecycle,
} from "@jayoncode/browser-lifecycle-angular";

@Component({
  providers: [provideBrowserLifecycle()],
})
export class AppComponent {
  private readonly handle = injectBrowserLifecycle();
}

An ecosystem of independent, headless TypeScript libraries engineered for modern web development. Every package includes interactive playgrounds and documentation that evolves alongside the code.