# Multiple pages, nullable strings and compression

Two native Lance 2.1 tables contain the same 2,048 IDs and nullable strings. Each has
15 ID pages and 16 string pages. The ID column deliberately uses all-valid FullZip
flat INT64; string pages use MiniBlock with either no general compression or Zstd.
The browser decoder supports only that exact ID encoding. String values are native
SDK results checked against independent source values, not browser-decoded strings.

Download this directory, extract originals.zip beside proof.json and reproduce.py,
and retain both generated *_pb2.py modules and the protos directory. Run:

```sh
uv run reproduce.py --verify --output .
```

The original protobuf schemas are Apache-2.0 licensed by the Lance authors, from
https://github.com/lance-format/lance/tree/ab6b5bbe46009ed78746b444df8db59a8bc5d842/protos . Generated readers use
grpcio-tools 1.76.0 and protobuf 6.33.5. Original hashes and all native rows are checked;
a fresh writer must reproduce the two data files byte-for-byte. Manifest UUIDs and
timestamps may differ. Whole file sizes describe these examples, not an I/O benchmark.
