# Schema 3.1.0

BigInt byte counters on outbound RTP

Version coverage: /docs/reference/versions/


A small release that touches the encoder and decoder rather than the schema records themselves.

## Changed

### Byte counters on outbound RTP are encoded and decoded as BigInt

`OutboundRtpEncoder` and `OutboundRtpDecoder` now use `NumberToBigIntEncoder` and
`BigIntToNumberDecoder` for the bytes-sent and bytes-received fields, so values above
`Number.MAX_SAFE_INTEGER` (2⁵³ − 1) survive a round trip.

{{< callout context="note" title="When this actually bites" icon="info-circle" >}}
2⁵³ bytes is about 9 petabytes, so a single session will never reach it. The failure mode this
fixes is aggregation: sums accumulated across a large fleet, or long-lived server-side counters
that roll up many sessions, lose precision silently once they cross that boundary — no error, just
wrong numbers in the last digits.
{{< /callout >}}

No record definition changed, so no field numbers moved and nothing about the sample shape is
different.

## Removed

Stale generated proto, SQL and TypeScript outputs left over from the 2.x layout. These were dead
files in the repository, not part of any published package.

{{< callout context="tip" title="Where the SQL outputs went" icon="rocket" >}}
The 2.x generator emitted `BigQuery` / `PostgreSQL` / Redshift / `ClickHouse` table definitions and CSV
headers. The 3.x generator does not — its outputs are TypeScript, flattened Avro, protobuf, the
three npm packages, and the Markdown reference.

If you need table definitions, generate them from the Avro schema in `outputs/avsc/` or from the
TypeScript types; they are a straightforward mapping and staying out of the SQL-dialect business
keeps the generator focused.
{{< /callout >}}

## Compatibility

Fully compatible with 3.0.0 samples in both directions. Upgrade the encoder and decoder together as
always.

[← Back to version history](/docs/schema/versions/) · [3.0.0 →](../v3-0-0/)

