{
  "status": "shipping",
  "advantages": [],
  "limitations": [],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-18",
  "slug": "lz4-frame",
  "term": "LZ4 frame",
  "aliases": [
    "LZ4 framing"
  ],
  "definition": "An LZ4 frame wraps data blocks in a descriptor and end marker, with optional length, dictionary identification and integrity checks.",
  "note": "The frame API reports frame completion separately from consumed input and produced output. A complete first frame can leave another frame unread, while a truncated end marker can follow all expected payload bytes. [frame-api]\n\nA controlled liblz4 experiment swaps two independent blocks with their checksums intact. Block-only verification accepts the reordered frame; adding the original content checksum rejects it. Declared length alone does not detect this same-length rearrangement. [hesela-lz4]",
  "related": [
    "block-independent-compression",
    "compression-dictionary",
    "checksum",
    "skippable-frame",
    "restore-test"
  ],
  "citations": [
    {
      "id": "frame-spec",
      "title": "LZ4 Frame Format 1.6.4, pinned to v1.10.0: block independence, checksums and dictionaries",
      "url": "https://github.com/lz4/lz4/blob/v1.10.0/doc/lz4_Frame_format.md",
      "accessed": "2026-10-18"
    },
    {
      "id": "frame-api",
      "title": "LZ4 v1.9.4 public frame API: preferences and LZ4F_decompress completion contract",
      "url": "https://github.com/lz4/lz4/blob/v1.9.4/lib/lz4frame.h",
      "accessed": "2026-10-18"
    },
    {
      "id": "hesela-lz4",
      "title": "Hesela: LZ4 frame checks, block order and completion",
      "url": "https://hesela.com/analyses/lz4-frame-checks-block-order/",
      "accessed": "2026-10-18"
    }
  ],
  "provenance": [
    "The synthetic experiment uses liblz4 1.9.4 and no dictionary; observations are not a corruption-rate estimate or security guarantee."
  ]
}
