Skip to content

DevToolsSchema

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 Added in v4.0.0 Source

Other

Request

Added in v4.0.0 Source

Namespace containing helper types for devtools protocol requests.

Response

Added in v4.0.0 Source

Namespace containing helper types for devtools protocol responses.

Schemas

Counter

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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>;

ExternalSpan

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Signature

type MetricLabel = Schema.Schema.Type<typeof MetricLabel>;

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

Signature

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

MetricsRequest type

Added in v4.0.0 Source

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

Signature

type MetricsRequest = Schema.Schema.Type<typeof MetricsRequest>;

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

Added in v4.0.0 Source

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

Signature

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

ParentSpan

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Signature

type ParentSpan = Span | ExternalSpan;

Ping

Added in v4.0.0 Source

Schema for the devtools heartbeat request sent by the client.

Signature

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

Ping type

Added in v4.0.0 Source

Type of the devtools heartbeat request sent by the client.

Signature

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

Pong

Added in v4.0.0 Source

Schema for the devtools heartbeat response.

Signature

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

Pong type

Added in v4.0.0 Source

Type of the devtools heartbeat response.

Signature

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

Request

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

Schema for an Effect span telemetry payload sent to devtools.

Signature

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

Span interface

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Signature

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

SpanStatus

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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

Signature

type SpanStatus = Schema.Schema.Type<typeof SpanStatus>;

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

Added in v4.0.0 Source

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>;

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

Added in v4.0.0 Source

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

Signature

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

Summary

Added in v4.0.0 Source

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

Added in v4.0.0 Source

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>;