Skip to content
Effect Days 2026 Get your ticket

Utils

Helps RPC protocol services buffer messages until their receive loop starts.

Client and server protocol constructors use these helpers to expose a stable service before the active receiver is installed. Writes made before run starts are buffered with their current Context, then replayed once the receiver is ready.

2 exports Added in v4.0.0 Source

Services

withRun

Added in v4.0.0 Source

Builds a service with a run method that buffers writes until run installs a writer, replays buffered writes with their original contexts, and restores the previous writer when the run ends.

Signature

declare function withRun<A extends {
readonly run: (f: (...args: Array<any>) => Effect<void>) => Effect<never>;
}>(): <EX, RX>(f: (write: Parameters<A["run"]>[0]) => Effect<Omit<A, "run">, EX, RX>) => Effect<A, EX, RX>

Builds an RPC client protocol service that tracks active client IDs and buffers server responses per client until that client's run handler is installed.

Signature

declare function withRunClient<EX, RX>(f: (write: (clientId: number, response: FromServerEncoded) => Effect<void>, clientIds: ReadonlySet<number>) => Effect<Omit<{
readonly codecFor: CodecFor;
readonly run: (clientId: number, f: (data: FromServerEncoded) => Effect<void>) => Effect<never>;
readonly send: (clientId: number, request: FromClientEncoded, transferables?: readonly Array<Transferable>) => Effect<void, RpcClientError>;
readonly supportsAck: boolean;
readonly supportsTransferables: boolean;
}, "run">, EX, RX>): Effect<{
readonly codecFor: CodecFor;
readonly run: (clientId: number, f: (data: FromServerEncoded) => Effect<void>) => Effect<never>;
readonly send: (clientId: number, request: FromClientEncoded, transferables?: readonly Array<Transferable>) => Effect<void, RpcClientError>;
readonly supportsAck: boolean;
readonly supportsTransferables: boolean;
}, EX, RX>