Appearance
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 Parameter | Default type |
|---|---|
T | any |
Properties
| Property | Modifier | Type | Description | Defined in |
|---|---|---|---|---|
active | readonly | boolean | Whether 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 |
sessionId | public | string | The unique session identifier. Pass to another render()'s options to share state. | packages/sdk/src/renderer/render.ts:203 |
state | public | { 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.get | public | unknown | - | packages/sdk/src/renderer/render.ts:211 |
state.onChange | public | () => void | - | packages/sdk/src/renderer/render.ts:213 |
state.set | public | void | - | 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
| Parameter | Type | Description |
|---|---|---|
event | string | Event name. |
payload? | unknown | Serializable 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
| Parameter | Type | Description |
|---|---|---|
name | string | Handler name (browser calls bridge.call(name, ...args)). |
fn | (...args: unknown[]) => unknown | The 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
| Parameter | Type | Description |
|---|---|---|
event | string | Event name. |
handler | (...args: unknown[]) => void | Called 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 Parameter | Default type |
|---|---|
TResult1 | { button: string; data: T; } |
TResult2 | never |
Parameters
| Parameter | Type |
|---|---|
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
| Parameter | Type | Description |
|---|---|---|
element | Block | The 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();