Skip to content

Interface: RenderSession<T>

Defined in: packages/sdk/src/renderer/render.ts:155

A render session returned by render.

The session is thenable — it can be awaited directly to get the resolved { data, button } result. It also exposes methods for ongoing communication (streaming, events) before resolution.

After resolution, all methods log a warning and become no-ops. The UI is unmounted and the bridge is cleaned up.

Type Parameters

Type ParameterDefault type
Tany

Properties

PropertyModifierTypeDescriptionDefined in
activereadonlybooleanWhether the UI is still mounted — false once the session has resolved or been cleaned up. Useful for deciding between RenderSession.update and a fresh render().packages/sdk/src/renderer/render.ts:161
sessionIdpublicstringThe unique session identifier. Pass to another render()'s options to share state.packages/sdk/src/renderer/render.ts:203
statepublic{ get: unknown; onChange: () => void; set: void; }Read/write shared state from Node.js. State is synced bidirectionally with the browser via the bridge.packages/sdk/src/renderer/render.ts:209
state.getpublicunknown-packages/sdk/src/renderer/render.ts:211
state.onChangepublic() => void-packages/sdk/src/renderer/render.ts:213
state.setpublicvoid-packages/sdk/src/renderer/render.ts:218

Methods

cleanup()

ts
cleanup(): Promise<void>;

Defined in: packages/sdk/src/renderer/render.ts:167

Clean up: unmount UI, deregister callbacks, remove Shadow DOM. Use for fire-and-forget renders that don't resolve naturally.

Returns

Promise<void>


emit()

ts
emit(event: string, payload?: unknown): void;

Defined in: packages/sdk/src/renderer/render.ts:179

Push an event to the browser component.

The browser component can listen via useBridge().on(event, handler). Events are delivered via port.evaluate() — they execute in the browser context immediately.

Parameters

ParameterTypeDescription
eventstringEvent name.
payload?unknownSerializable data to send.

Returns

void


handle()

ts
handle(name: string, fn: (...args: unknown[]) => unknown): () => void;

Defined in: packages/sdk/src/renderer/render.ts:188

Register a named handler that the browser can call via useBridge().call().

Parameters

ParameterTypeDescription
namestringHandler name (browser calls bridge.call(name, ...args)).
fn(...args: unknown[]) => unknownThe function to execute. Return value is sent back to the browser.

Returns

An unregister function.

ts
(): void;
Returns

void


on()

ts
on(event: string, handler: (...args: unknown[]) => void): () => void;

Defined in: packages/sdk/src/renderer/render.ts:200

Listen to events from the browser component.

The browser component can fire events via useBridge().emit(event, data). Events arrive via the bridge RPC mechanism.

Parameters

ParameterTypeDescription
eventstringEvent name.
handler(...args: unknown[]) => voidCalled when the event fires.

Returns

An unsubscribe function.

ts
(): void;
Returns

void


then()

ts
then<TResult1, TResult2>(onfulfilled?: 
  | (value: {
  button: string;
  data: T;
}) => TResult1 | PromiseLike<TResult1>
| null, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2> | null): Promise<TResult1 | TResult2>;

Defined in: packages/sdk/src/renderer/render.ts:225

Makes the session awaitable. Resolves when the browser component calls bridge.resolve() or when an SDK NavigationBar triggers resolution.

Type Parameters

Type ParameterDefault type
TResult1{ button: string; data: T; }
TResult2never

Parameters

ParameterType
onfulfilled?| (value: { button: string; data: T; }) => TResult1 | PromiseLike<TResult1> | null
onrejected?(reason: any) => TResult2 | PromiseLike<TResult2> | null

Returns

Promise<TResult1 | TResult2>


update()

ts
update(element: Block): void;

Defined in: packages/sdk/src/renderer/render.ts:257

Experimental

Replace the mounted tree in place.

The session keeps its id, so the browser reuses the same Shadow host and React root and the new tree reconciles with the old one. Use this instead of calling render() again for anything that updates while it is on screen — a second render() unmounts the first UI and mounts a new one, which replays the entry animation and reads as a flicker.

Fire-and-forget: injection is queued behind any in-flight mount.

Parameters

ParameterTypeDescription
elementBlockThe replacement Block tree.

Returns

void

Example

ts
const session = render(ctx, ProgressUI(0));
for (const [i, item] of items.entries()) {
  await handle(item);
  session.update(ProgressUI(i + 1)); // no flicker
}
await session.cleanup();

Matterway Assistant SDK Documentation