VINDEX3

THE BYTES · CANDIDATE SPEC §6–7 · LYRW v2

DOWN TO THE BYTE

LYRW v2 is the expert-bank codec of VINDEX3 — a binary format simple enough to read with a ruler. This page is that ruler.

What is the LYRW layer file?

LYRW v2 is the layer-weight codec: a 24-byte header, bank and segment descriptors, one region schema per bank, and an entry table of offsets and lengths. A reader needs nothing but the bytes in front of it; unknown tags are preserved rather than fatal, and refusal waits for the operation that actually needs what a reader cannot do. Segments answer to file management, group extents to hardware — two scales, kept deliberately distinct.

A blob you cannot check is a promise you cannot keep.

WHAT THIS FIXES

Most weight files are a header you must trust, followed by bytes you cannot question. When a reader meets something it does not recognise, it guesses or it dies; when a writer changes a layout, every old reader finds out at parse time, in production. LYRW was shaped so neither ever happens: the file carries its whole description, unknown tags are preserved and reported rather than fatal, and refusal waits for the operation that actually needs the thing a reader cannot do.

LYRW v2 — THREE DEPTHS

LYRW is the layer-weight bank format. One binary file holds one layer's weights — or one segment of a very large layer — organised as banks of entries. A file describes itself completely: a reader needs nothing but the bytes in front of it to know what regions exist, in what encoding, at what offsets. Five structures, in the order they appear in the file: header, bank descriptors, segment descriptors, region schemas, entry table. Its place in the container model is stated by the Candidate: this is one segment codec — today the layout of the transitional bank shape's expert banks, under the convergence rule an encoding a graph container's representation may use. A graph container's plain tensor-table segments are the other codec, on the Container page.

A file that describes itself completely, at the depth you want it: what the five structures are, each one drawn to scale, and the header and entry-table clauses verbatim.

The binary layoutlearn: what LYRW is · inspect: five structures, to scale · spec: the clause that governs it. One concept, one URL, the depth of your choosing.

THE NUMBERED VOCABULARIES — WIRE VALUES, VERBATIM

role — u16

0  gate
1  up
2  gate_up_fused
3  down
4  bias
5  scales
6  latent_in
7  latent_out
8..255   reserved-registered
256..    vendor / experimental

format — u16

0  f32        6  q8_0
1  f16        7  fp4_larql
2  bf16       8  mxfp4
3  q4_0       9  nvfp4
4  q4_k      10  mxfp8
5  q6_k       …  extensible

New roles and formats do not bump format_version. Known kernels may require exactly gate_up_fused + down (or gate + up + down); the presence of other roles never invalidates a file, and the absence of a role a programme requires makes the file un-executable for that programme — not invalid.

THE ENCODER — LAY OUT A FILE YOURSELF

Choose a recipe. The bytes follow.

bank
regions
format

tables drawn magnified — 1.1 KiB of structure ahead of 612.0 MiB of weights

payload to scale · one tick per entry · first region offset 1.1 KiB

logical layer, one filerouted · 32 experts · gate_up_fused + down · mxfp4
per entrygate_up_fused 12.8 MiB · down 6.4 MiB
structure ahead of weights1.1 KiB, padded to 1.1 KiB
weights612.0 MiB
file612.0 MiB

Worked-example geometry: input and output 2048, intermediate 6144 — dimensions divisible by 256, so the block formats pack exactly. Change the format and only the payload changes. Change the region set and the schema count, entry table, and payload all follow. The structure never grows with the weights: parsing stays a few kilobytes, whatever the file weighs.

A routed · 32 experts bank, gate_up_fused + down, in mxfp4: 1.1 KiB of self-description, then 612.0 MiB of weights — 612.0 MiB in all, every region offset 64-byte aligned.

Unknown tags are preserved, not rejected. Refusal belongs at capability-check time — a reader reports what it does not understand, and only the operations that need it are refused.

SEGMENTATION — WHY A LAYER IS SOMETIMES SEVERAL FILES

The spec's own worked example: one routed layer of K3, at exact Q6_K, is 33,030,144 parameters per expert × 896 experts — about 22.61 GiB. That exceeds the 20 GiB shard cap. So the layer ships as two segment files of 448 experts each, about 11.3 GiB apiece. Inside a segment, experts are grouped into extents of 8, 16, or 32 — the unit of disk reads, prefetch, and grouped kernels. Two rules keep the scales honest: segment boundaries fall on group-extent boundaries, and group width divides segment width. Segment width serves file management. Group width serves the hardware.

Two scales, two measurements. The segment answers to file management — as large as the cap allows, so two files, not fourteen. The extent answers to hardware — how much one grouped dispatch reads. Boundaries always agree: segments split only on extent edges.

GREENFIELD, DELIBERATELY

LYRW v2 owes no binary compatibility to the layer files inside VINDEX2 containers — those were never a public contract. There is no adapter and no in-place upgrade. Each generation's loader reads its own format. The magic and version field exist so an old reader fails fast with a precise message, never a parse error. And the compatibility promise lives one level up: one reader supports both generations, indefinitely.

Which encoding a region is stored in — and which stored variant a profile may select — is the representation story.

PUBLISHED 29 AUG 2026 · REVISED 30 AUG 2026 · VERSION 3.0 Candidate

CITE

site build 43a1b6b · built 2026-09-02

CITE THIS

Web page · 3.0 Candidate

Hay, C. (2026). The Bytes. In VINDEX3 Specification (Version 3.0 Candidate). VINDEX3. https://vindex3.org/bytes

A chapter of the specification, citable on its own. Cite the version rather than the site — the canonical reference, and how to use it, live at /cite.

SOURCES

  • vindex3-format-spec.md §6–7 (the 3.0 Candidate)
  • reference implementation — lyrw2/region_format.rs and the format constants