pure-zstd/CHANGELOG.md
Tag b221ae0e98 Add the metadata pub.dev scores a package on
description, repository, issue_tracker and topics, plus a changelog,
which between them are most of a package's discoverability. The
repository URLs are a guess at the new home and want checking before the
first publish.

publish_to stays none so an accidental publish from inside this checkout
cannot succeed. Remove it in the new repository.

Version 0.1.0 rather than 0.0.1: a published version can be retracted
but never deleted, so the first one should mean something.
2026-09-21 23:45:05 -06:00

1.3 KiB

Changelog

0.1.0

First release.

A zstd decompressor in plain Dart. Decompression only, native platforms only, one frame per call.

  • Decodes RFC 8878 frames: raw, RLE and compressed blocks; raw, RLE, compressed and treeless literals in one-stream and four-stream form; Huffman weights in both the direct nibble and FSE-coded forms; predefined, RLE, FSE and repeat sequence tables for all three symbols; repeated offsets including the no-literals shift; multi-block frames reusing an earlier block's tables.
  • Verifies the content checksum when a frame carries one, with XXH64 in lib/src/xxhash.dart.
  • Refuses dictionaries, several frames in one buffer, and any input left over after a frame.
  • Bounds what a frame header can make it allocate. ZstdDecoder takes a maxOutputSize, 64 MiB by default, and a caller passing expectedSize gets an exact check against the frame's own declared size.
  • Every failure is a ZstdException.

Correctness is measured against libzstd through pyzstd rather than against expectations written by hand: 2,615 blocks of real elevation data across 32 containers, plus a committed corpus of 24 fixtures covering the format branches that real data never reaches. 103 tests.

Roughly four times slower than native zstd. On a Pixel 10 Pro XL, profile AOT, a 128 KiB block decodes in 0.414 ms, which is 302 MB/s.