Skip to content

v1.6.1 — Faster codec, fewer allocations

Back to all updates
v1.6.1August 20, 2026

The codec stops repeating work and allocates less on its busiest path.

Error paths are built only when an error happens

Section titled “Error paths are built only when an error happens”

Net.Any built a path string for every key of every table it wrote, only to name a value if something went wrong. Paths are now composed where an error is raised, once per container.

Replication sends its patches through Any, so this is the busiest path in the codec.

An error about a numeric key in a dictionary now names the key:

before: value[?]
after: value[7]

An array of fixed-width numbers checked the buffer’s capacity once for the whole run, then again for every element. A 2000-element array now costs 2000 fewer bounds checks in each direction. The single check still covers the whole run before any byte is touched.

  • Packing and unpacking a CFrameRot no longer allocates tables.
  • Any no longer allocates a 12-element table for every CFrame it writes.

The wire format is unchanged: v1.6.0 and v1.6.1 produce the same bytes.

Every change in this release is listed in the changelog.