Skip to content
Effect 4.0 is here. One ecosystem. Zero dependencies.

DevToolsSchema unstable

Defines the experimental wire schema used by the Effect devtools protocol.

The module contains the serialized message shapes exchanged between devtools clients and servers: span snapshots, span events, metric snapshots, heartbeats, and request/response unions. Use these schemas at protocol boundaries to encode, decode, or validate custom transports that need to interoperate with the built-in unstable devtools client and server.

42 exports Since v4.0.0 Source

Other

Request

unstable
Since v4.0.0

Namespace containing helper types for devtools protocol requests.

Response

unstable
Since v4.0.0

Namespace containing helper types for devtools protocol responses.

Schemas

Counter

unstable
Since v4.0.0

Schema for a counter metric snapshot, including the count and whether updates are incremental.

Signature

declare const Counter: Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: Union<readonly [Number, BigInt]>;
readonly incremental: Boolean;
}>;
readonly type: tag<"Counter">;
}>

Counter

type unstable
Since v4.0.0

Type of a devtools counter metric snapshot.

Details

The state contains the current count and whether the counter reports incremental updates.

Signature

type Counter = Schema.Schema.Type<typeof Counter>
Since v4.0.0

Schema for an external parent span context containing span id, trace id, and sampling flag.

Signature

declare const ExternalSpan: Codec<ExternalSpan, ExternalSpan, never, never>

ExternalSpan

interface unstable
Since v4.0.0

Serialized parent span context for a span created outside the current devtools span tree.

Signature

interface ExternalSpan {
readonly _tag: "ExternalSpan";
readonly sampled: boolean;
readonly spanId: string;
readonly traceId: string;
}

Frequency

unstable
Since v4.0.0

Schema for a devtools frequency metric snapshot.

Details

The metric state records occurrence counts by string key.

Signature

declare const Frequency: Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly occurrences: $ReadonlyMap<String, Natural>;
}>;
readonly type: tag<"Frequency">;
}>

Frequency

type unstable
Since v4.0.0

Type of a devtools frequency metric snapshot.

Details

The state maps observed string values to occurrence counts.

Signature

type Frequency = Schema.Schema.Type<typeof Frequency>

Gauge

unstable
Since v4.0.0

Schema for a devtools gauge metric snapshot.

Details

The metric state contains the current numeric or bigint value.

Signature

declare const Gauge: Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly value: Union<readonly [Number, BigInt]>;
}>;
readonly type: tag<"Gauge">;
}>

Gauge

type unstable
Since v4.0.0

Type of a devtools gauge metric snapshot.

Details

The state contains the current numeric or bigint value.

Signature

type Gauge = Schema.Schema.Type<typeof Gauge>

Histogram

unstable
Since v4.0.0

Schema for a devtools histogram metric snapshot.

Details

The metric state includes bucket counts plus the total count, minimum, maximum, and sum.

Signature

declare const Histogram: Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly buckets: $Array<Tuple<readonly [Number, Natural]>>;
readonly count: Natural;
readonly max: Number;
readonly min: Number;
readonly sum: Number;
}>;
readonly type: tag<"Histogram">;
}>

Histogram

type unstable
Since v4.0.0

Type of a devtools histogram metric snapshot.

Details

The state includes bucket counts plus the total count, minimum, maximum, and sum.

Signature

type Histogram = Schema.Schema.Type<typeof Histogram>

Metric

unstable
Since v4.0.0

Schema for any devtools metric snapshot.

Details

Accepted metric kinds are counters, frequencies, gauges, histograms, and summaries.

Signature

declare const Metric: Union<readonly [Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: Union<readonly [Number, BigInt]>;
readonly incremental: Boolean;
}>;
readonly type: tag<"Counter">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly occurrences: $ReadonlyMap<String, Natural>;
}>;
readonly type: tag<"Frequency">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly value: Union<readonly [Number, BigInt]>;
}>;
readonly type: tag<"Gauge">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly buckets: $Array<Tuple<readonly [Number, Natural]>>;
readonly count: Natural;
readonly max: Number;
readonly min: Number;
readonly sum: Number;
}>;
readonly type: tag<"Histogram">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: Natural;
readonly max: Number;
readonly min: Number;
readonly quantiles: $Array<Tuple<readonly [Finite, UndefinedOr<Number>]>>;
readonly sum: Number;
}>;
readonly type: tag<"Summary">;
}>]>

Metric

type unstable
Since v4.0.0

Type of any devtools metric snapshot.

Details

The union covers counters, frequencies, gauges, histograms, and summaries.

Signature

type Metric = Schema.Schema.Type<typeof Metric>

MetricLabel

unstable
Since v4.0.0

Schema for a metric label key/value pair in a devtools metrics snapshot.

Signature

declare const MetricLabel: Struct<{
readonly key: String;
readonly value: String;
}>

MetricLabel

type unstable
Since v4.0.0

Type of a metric label key/value pair in a devtools metrics snapshot.

Signature

type MetricLabel = Schema.Schema.Type<typeof MetricLabel>
Since v4.0.0

Schema for a devtools request asking the client to send a metrics snapshot.

Signature

declare const MetricsRequest: Struct<{
readonly _tag: tag<"MetricsRequest">;
}>

MetricsRequest

type unstable
Since v4.0.0

Type of a devtools request asking the client to send a metrics snapshot.

Signature

type MetricsRequest = Schema.Schema.Type<typeof MetricsRequest>
Since v4.0.0

Schema for a devtools protocol message containing the current metric snapshots.

Signature

declare const MetricsSnapshot: Struct<{
readonly _tag: tag<"MetricsSnapshot">;
readonly metrics: $Array<Union<readonly [Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: Union<readonly [..., ...]>;
readonly incremental: Boolean;
}>;
readonly type: tag<"Counter">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly occurrences: $ReadonlyMap<String, Natural>;
}>;
readonly type: tag<"Frequency">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly value: Union<readonly [..., ...]>;
}>;
readonly type: tag<"Gauge">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly buckets: $Array<Tuple<...>>;
readonly count: Natural;
readonly max: Number;
readonly min: Number;
readonly sum: Number;
}>;
readonly type: tag<"Histogram">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: Natural;
readonly max: Number;
readonly min: Number;
readonly quantiles: $Array<Tuple<...>>;
readonly sum: Number;
}>;
readonly type: tag<"Summary">;
}>]>>;
}>

MetricsSnapshot

type unstable
Since v4.0.0

Type of a devtools protocol message containing the current metric snapshots.

Signature

type MetricsSnapshot = Schema.Schema.Type<typeof MetricsSnapshot>

ParentSpan

unstable
Since v4.0.0

Schema for a span parent, either a full devtools Span payload or an ExternalSpan context.

Signature

declare const ParentSpan: Union<readonly [Codec<Span, Span, never, never>, Codec<ExternalSpan, ExternalSpan, never, never>]>

ParentSpan

type unstable
Since v4.0.0

Type of a span parent, represented either by a devtools Span payload or an ExternalSpan context.

Signature

type ParentSpan = Span | ExternalSpan

Ping

unstable
Since v4.0.0

Schema for the devtools heartbeat request sent by the client.

Signature

declare const Ping: Struct<{
readonly _tag: tag<"Ping">;
}>

Ping

type unstable
Since v4.0.0

Type of the devtools heartbeat request sent by the client.

Signature

type Ping = Schema.Schema.Type<typeof Ping>

Pong

unstable
Since v4.0.0

Schema for the devtools heartbeat response.

Signature

declare const Pong: Struct<{
readonly _tag: tag<"Pong">;
}>

Pong

type unstable
Since v4.0.0

Type of the devtools heartbeat response.

Signature

type Pong = Schema.Schema.Type<typeof Pong>

Request

unstable
Since v4.0.0

Schema for devtools protocol requests accepted by the server.

Details

Requests include heartbeat pings, spans, span events, and metric snapshots.

Signature

declare const Request: Union<readonly [Struct<{
readonly _tag: tag<"Ping">;
}>, Codec<Span, Span, never, never>, Struct<{
readonly _tag: tag<"SpanEvent">;
readonly attributes: UndefinedOr<$Record<String, Any>>;
readonly name: String;
readonly spanId: String;
readonly startTime: BigInt;
readonly traceId: String;
}>, Struct<{
readonly _tag: tag<"MetricsSnapshot">;
readonly metrics: $Array<Union<readonly [Struct<{
readonly attributes: UndefinedOr<$Record<..., ...>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: ...;
readonly incremental: ...;
}>;
readonly type: tag<"Counter">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<..., ...>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly occurrences: ...;
}>;
readonly type: tag<"Frequency">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<..., ...>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly value: ...;
}>;
readonly type: tag<"Gauge">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<..., ...>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly buckets: ...;
readonly count: ...;
readonly max: ...;
readonly min: ...;
readonly sum: ...;
}>;
readonly type: tag<"Histogram">;
}>, Struct<{
readonly attributes: UndefinedOr<$Record<..., ...>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: ...;
readonly max: ...;
readonly min: ...;
readonly quantiles: ...;
readonly sum: ...;
}>;
readonly type: tag<"Summary">;
}>]>>;
}>]>

Request

type unstable
Since v4.0.0

Type of devtools protocol requests accepted by the server.

Details

Requests include heartbeat pings, spans, span events, and metric snapshots.

Signature

type Request = Schema.Schema.Type<typeof Request>

Response

unstable
Since v4.0.0

Schema for devtools protocol responses sent by the server.

Details

Responses include heartbeat pongs and requests for metric snapshots.

Signature

declare const Response: Union<readonly [Struct<{
readonly _tag: tag<"Pong">;
}>, Struct<{
readonly _tag: tag<"MetricsRequest">;
}>]>

Response

type unstable
Since v4.0.0

Type of devtools protocol responses sent by the server.

Details

Responses include heartbeat pongs and requests for metric snapshots.

Signature

type Response = Schema.Schema.Type<typeof Response>

Span

unstable
Since v4.0.0

Schema for an Effect span telemetry payload sent to devtools.

Signature

declare const Span: Codec<Span, Span, never, never>

Span

interface unstable
Since v4.0.0

Telemetry payload for an Effect span sent to devtools, including identity, attributes, status, sampling flag, and optional parent span.

Signature

interface Span {
readonly _tag: "Span";
readonly attributes: ReadonlyMap<string, unknown>;
readonly name: string;
readonly parent: Option<ParentSpan>;
readonly sampled: boolean;
readonly spanId: string;
readonly status: {
readonly _tag: "Started";
readonly startTime: bigint;
} | {
readonly _tag: "Ended";
readonly endTime: bigint;
readonly exit: Exit<unknown, unknown>;
readonly startTime: bigint;
};
readonly traceId: string;
}

SpanEvent

unstable
Since v4.0.0

Schema for a named event emitted by a span, including trace id, span id, start time, and optional attributes.

Signature

declare const SpanEvent: Struct<{
readonly _tag: tag<"SpanEvent">;
readonly attributes: UndefinedOr<$Record<String, Any>>;
readonly name: String;
readonly spanId: String;
readonly startTime: BigInt;
readonly traceId: String;
}>

SpanEvent

type unstable
Since v4.0.0

Type of a named event emitted by a span and sent to devtools.

Signature

type SpanEvent = Schema.Schema.Type<typeof SpanEvent>

SpanStatus

unstable
Since v4.0.0

Schema for devtools span status, either started or ended.

Signature

declare const SpanStatus: Union<readonly [Struct<{
readonly _tag: tag<"Started">;
readonly startTime: BigInt;
}>, Struct<{
readonly _tag: tag<"Ended">;
readonly endTime: BigInt;
readonly exit: decodeTo<Exit<Unknown, Unknown, Unknown>, Exit<Void, Defect, Defect>, never, never>;
readonly startTime: BigInt;
}>]>

SpanStatus

type unstable
Since v4.0.0

Type of a devtools span status, either started or ended.

Signature

type SpanStatus = Schema.Schema.Type<typeof SpanStatus>
Since v4.0.0

Schema for a span status representing an ended span, including start time, end time, and encoded exit status. Encoding drops success values with Exit.asVoid.

Signature

declare const SpanStatusEnded: Struct<{
readonly _tag: tag<"Ended">;
readonly endTime: BigInt;
readonly exit: decodeTo<Exit<Unknown, Unknown, Unknown>, Exit<Void, Defect, Defect>, never, never>;
readonly startTime: BigInt;
}>

SpanStatusEnded

type unstable
Since v4.0.0

Type of a span status representing an ended span with start time, end time, and exit status.

Signature

type SpanStatusEnded = Schema.Schema.Type<typeof SpanStatusEnded>
Since v4.0.0

Schema for a span status representing a span that has started but not yet ended.

Signature

declare const SpanStatusStarted: Struct<{
readonly _tag: tag<"Started">;
readonly startTime: BigInt;
}>

SpanStatusStarted

type unstable
Since v4.0.0

Type of a span status representing a span that has started but not yet ended.

Signature

type SpanStatusStarted = Schema.Schema.Type<typeof SpanStatusStarted>

Summary

unstable
Since v4.0.0

Schema for a devtools summary metric snapshot.

Details

The metric state contains quantile values plus the total count, minimum, maximum, and sum.

Signature

declare const Summary: Struct<{
readonly attributes: UndefinedOr<$Record<String, String>>;
readonly description: UndefinedOr<String>;
readonly id: String;
state: Struct<{
readonly count: Natural;
readonly max: Number;
readonly min: Number;
readonly quantiles: $Array<Tuple<readonly [Finite, UndefinedOr<Number>]>>;
readonly sum: Number;
}>;
readonly type: tag<"Summary">;
}>

Summary

type unstable
Since v4.0.0

Type of a devtools summary metric snapshot.

Details

The state contains quantile values plus the total count, minimum, maximum, and sum.

Signature

type Summary = Schema.Schema.Type<typeof Summary>