Skip to content

RpcSerialization

Serializes RPC protocol messages for transports.

RpcSerialization is the boundary between RpcMessage envelopes and the bytes or strings carried by a transport. This module provides built-in serializers for JSON, newline-delimited JSON, JSON-RPC 2.0, and MessagePack, including framed formats that can decode multiple messages from streaming chunks.

18 exports Added in v4.0.0 Source

Errors

Error raised when a streaming parser retains more data than its configured buffer limit.

Signature

declare class MaxBufferSizeExceeded extends YieldableError<this> & {
  readonly _tag: "MaxBufferSizeExceeded";
} & Readonly<{
  readonly maxBufferSize: number;
}> {
  constructor(args: {
    readonly maxBufferSize: number;
  });
  message: string;
}

Layers

layerJson

Added in v4.0.0 Source

RPC serialization layer that uses JSON for serialization.

When to use

Use when you have a transport protocol that already provides message framing.

See

  • layerNdjson for transports that need newline-delimited framing

Signature

declare const layerJson: Layer.Layer<RpcSerialization>;

layerJsonRpc

Added in v4.0.0 Source

RPC serialization layer that uses JSON-RPC for serialization.

Signature

declare function layerJsonRpc(options?: { readonly contentType?: string }): Layer<RpcSerialization>;

layerMsgPack

Added in v4.0.0 Source

RPC serialization layer that uses MessagePack for serialization.

Details

MessagePack has a more compact binary format compared to JSON and NDJSON. It also has better support for binary data.

Signature

declare const layerMsgPack: Layer.Layer<RpcSerialization>;

RPC serialization layer that uses MessagePack with custom options.

Signature

declare function layerMsgPackWith(options?: any): Layer<RpcSerialization>;

layerNdjson

Added in v4.0.0 Source

RPC serialization layer that uses NDJSON for serialization.

When to use

Use when you have a transport protocol that does not provide message framing.

See

  • layerJson for transports that already provide message framing

Signature

declare const layerNdjson: Layer.Layer<RpcSerialization>;

RPC serialization layer that uses newline-delimited JSON-RPC for serialization.

Signature

declare function layerNdJsonRpc(options?: {
  readonly contentType?: string;
  readonly maxBufferSize?: number | "unbounded";
}): Layer<RpcSerialization>;

RPC serialization layer that uses NDJSON with custom streaming options.

Signature

declare function layerNdjsonWith(options?: StreamOptions): Layer<RpcSerialization>;

Serialization

json

Added in v4.0.0 Source

JSON RPC serialization for whole message payloads. It does not include message framing, so it is intended for transports that frame responses themselves.

Signature

declare const json: RpcSerialization["Service"];

jsonRpc

Added in v4.0.0 Source

Creates a JSON-RPC 2.0 serialization for RPC protocol messages without additional message framing.

Signature

declare function jsonRpc(options?: { readonly contentType?: string }): {
  readonly contentType: string;
  readonly includesFraming: boolean;
  makeUnsafe(): Parser;
};

makeMsgPack

Added in v4.0.0 Source

Create a MessagePack serialization with custom msgpackr options.

Signature

declare function makeMsgPack(options?: any): {
  readonly contentType: string;
  readonly includesFraming: boolean;
  makeUnsafe(): Parser;
};

makeNdjson

Added in v4.0.0 Source

Serializes RPC protocol messages as newline-delimited JSON, framing each message with a trailing newline.

Signature

declare function makeNdjson(options?: StreamOptions): {
  readonly contentType: string;
  readonly includesFraming: boolean;
  makeUnsafe(): Parser;
};

msgPack

Added in v4.0.0 Source

Default MessagePack RPC serialization using record support and built-in message framing.

Signature

declare const msgPack: RpcSerialization["Service"];

ndjson

Added in v4.0.0 Source

Default newline-delimited JSON RPC serialization.

Signature

declare const ndjson: RpcSerialization["Service"];

ndJsonRpc

Added in v4.0.0 Source

Creates a newline-delimited JSON-RPC 2.0 serialization for RPC protocol messages.

Signature

declare function ndJsonRpc(options?: {
  readonly contentType?: string;
  readonly maxBufferSize?: number | "unbounded";
}): {
  readonly contentType: string;
  readonly includesFraming: boolean;
  makeUnsafe(): Parser;
};

Parser interface

Added in v4.0.0 Source

A stateful parser for an RPC serialization format, able to decode input chunks into protocol messages and encode messages for transport.

Signature

interface Parser {
  readonly decode: (data: string | Uint8Array<ArrayBufferLike>) => readonly Array<unknown>;
  readonly encode: (response: unknown) => string | Uint8Array<ArrayBufferLike> | undefined;
}

StreamOptions interface

Added in v4.0.0 Source

Options shared by streaming RPC serialization formats.

Signature

interface StreamOptions {
  readonly maxBufferSize?: number | "unbounded";
}

Services

Service that describes how RPC protocol messages are encoded and decoded, including the content type and whether the serialization format provides message framing.

When to use

Use to provide the serialization boundary shared by RPC clients and servers for a chosen wire format.

Signature

declare class RpcSerialization extends Shape<
  "effect/rpc/RpcSerialization",
  {
    readonly contentType: string;
    readonly includesFraming: boolean;
    makeUnsafe(): Parser;
  },
  this
> {
  constructor(_: never);
}