← ModulonEngine.com

Modulon Popout SDK 0.5.0

Production multi-window runtime

Build external browser windows that recover from refresh and transport loss, remain typed and observable, and work with vanilla TypeScript or React.

What 0.5.0 adds

API map

Host and popout

createModulonHost() returns adapter, bus, surfaces, optional syncState, inspect(), events, and createSupportBundle(). createModulonPopout() selects transport, starts the surface handshake, and optionally connects synced state.

Sessions and transport

surfaces.open(), get(), list(), subscribe(), and discover(); createAutoTransport(); createBroadcastChannelTransport(); TransportCapabilities.

Protocol and state

defineModulonProtocol(), typed bus.request/handle/emit/on, runtime validators, AbortSignal, strict limits, and schema-versioned createSyncedState().

React, manifests, and screens

ModulonProvider, useSurfaceSession, useSyncedState, useModulonInspect; defineWorkspaceManifest(), validateWorkspaceManifest(), registerManifestWindows(); ScreenDetailsProvider.

Browser and capability matrix

CapabilityChromiumFirefoxSafari/WebKit
Basic popouts + opener RPC/stateSupportedSupportedSupported
SharedWorker hub, locks, authoritySupportedSupportedContext-dependent
BroadcastChannel degraded fallbackSupportedSupportedSupported
Window Management / Screen DetailsProgressive enhancementOne-screen fallbackOne-screen fallback

Popup policy always applies: call surfaces.open() directly from a user gesture. Screen Details is optional; basic popouts do not depend on it.

Security

Migrate from 0.4

0.5 is additive. Existing adapter.detachWindow(), bus, synced state, and URL helpers remain available.

  1. Deploy host and popout bundles together; the handshake reports protocol or SDK mismatches.
  2. Adopt runtime.surfaces.open() where readiness/recovery matters. Keep direct adapter calls where legacy behavior is intentional.
  3. Define a protocol and add validators incrementally before enabling strict mode.
  4. React users can move integration code behind @modulonengine/sdk/react; the core remains framework-free.

Troubleshooting decision tree

Popup did not open

Check for blocked_by_popup_blocker. Call open from a click/keydown and allow popups for the site.

Session stays handshaking

Confirm the popout route calls createModulonPopout(), namespace matches, and both pages use the same SDK build.

Session is degraded

BroadcastChannel is active. RPC/events/state work; SharedWorker-only locks and authority do not. Verify the worker URL and CSP.

State stopped updating after refresh

Inspect transport capability/status, call surfaces.discover(), and export a support bundle. Run diagnoseModulon() for worker, origin, fallback, and version checks.

Architecture and product boundary

The SDK is a headless browser runtime: window lifecycle, local communication, synchronized state, transport resolution, browser metrics, and diagnostics. It intentionally does not provide docking chrome, automatic multi-monitor layouts, remote WebRTC/WebSocket sync, game-engine bindings, or autoscaling policy. Those remain separate Modulon products.

View licensing and downloads ↗