# meta/zstd architecture

> Architecture diagram of the GitHub repository meta/zstd, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/meta/zstd
- Repository: https://github.com/meta/zstd

## Overview

Zstandard is a lossless compression library and command-line tool. The main user workflow is to invoke the CLI on files, have its file-I/O layer configure and call the library to compress or decompress, then write the resulting data. The library also supports dictionary training and use, parallel compression, legacy decoding, and a zlib-compatible wrapper; seekable frames and parallel CLI compression are additional capabilities. Shared format, entropy, memory, and platform code underpin the codec. Some implementation files were not sampled, so edges are limited to README statements and indexed references.

Main entry points: [`lib/zstd.h`](https://github.com/meta/zstd/blob/dev/lib/zstd.h) (Public API), [`programs/zstdcli.c`](https://github.com/meta/zstd/blob/dev/programs/zstdcli.c) (zstd CLI), [`lib/compress/zstd_compress.c`](https://github.com/meta/zstd/blob/dev/lib/compress/zstd_compress.c) (Compression Engine), [`programs/fileio.c`](https://github.com/meta/zstd/blob/dev/programs/fileio.c) (File I/O)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["Command-line"]
  node_cli["zstd CLI<br/>[zstdcli.c]"]
  node_fileio["File I/O<br/>[fileio.c]"]
  node_cli_support["CLI Utilities<br/>[util.c]"]
end

subgraph group_codec["Compression Codec"]
  node_api["Public API<br/>[zstd.h]"]
  node_compress["Compression Engine<br/>[zstd_compress.c]"]
  node_decompress["Decompression Engine<br/>[zstd_decompress.c]"]
  node_dict["Dictionary Training<br/>[zdict.c]"]
  node_legacy["Legacy Decoders"]
  node_parallel["Parallel Compression<br/>[zstdmt_compress.c]"]
end

subgraph group_support["Codec Support"]
  node_entropy["Entropy Coding<br/>[fse.h]"]
  node_common["Common Primitives"]
  node_headers["Codec Interfaces"]
end

subgraph group_extensions["Formats And Integrations"]
  node_seekable["Seekable Frames"]
  node_seek_read["Seekable Reader"]
  node_pzstd["Parallel CLI<br/>[Pzstd.cpp]"]
  node_zlib["zlib Wrapper<br/>[zstd_zlibwrapper.c]"]
end

node_user(("File User"))

node_user -->|"invokes"| node_cli
node_cli -->|"uses"| node_fileio
node_cli -->|"uses"| node_cli_support
node_fileio -->|"calls"| node_api
node_api -.->|"compresses with"| node_compress
node_api -.->|"decompresses with"| node_decompress
node_compress -->|"uses"| node_headers
node_compress -->|"uses"| node_entropy
node_compress -->|"uses"| node_common
node_decompress -->|"uses"| node_common
node_dict -->|"supports dictionaries"| node_api
node_cli -->|"trains dictionaries"| node_dict
node_api -->|"supports parallel mode"| node_parallel
node_api -.->|"decodes older formats"| node_legacy
node_api -.->|"supports seekable frames"| node_seekable
node_seek_read -->|"reads frames"| node_api
node_pzstd -.->|"parallel CLI use"| node_cli
node_zlib -->|"calls"| node_api

click node_cli "https://github.com/meta/zstd/blob/dev/programs/zstdcli.c"
click node_fileio "https://github.com/meta/zstd/blob/dev/programs/fileio.c"
click node_cli_support "https://github.com/meta/zstd/blob/dev/programs/util.c"
click node_api "https://github.com/meta/zstd/blob/dev/lib/zstd.h"
click node_compress "https://github.com/meta/zstd/blob/dev/lib/compress/zstd_compress.c"
click node_decompress "https://github.com/meta/zstd/blob/dev/lib/decompress/zstd_decompress.c"
click node_dict "https://github.com/meta/zstd/blob/dev/lib/dictBuilder/zdict.c"
click node_legacy "https://github.com/meta/zstd/tree/dev/lib/legacy"
click node_entropy "https://github.com/meta/zstd/blob/dev/lib/common/fse.h"
click node_common "https://github.com/meta/zstd/tree/dev/lib/common"
click node_headers "https://github.com/meta/zstd/blob/dev/lib/compress/zstd_compress_internal.h"
click node_parallel "https://github.com/meta/zstd/blob/dev/lib/compress/zstdmt_compress.c"
click node_seekable "https://github.com/meta/zstd/blob/dev/contrib/seekable_format/zstdseek_compress.c"
click node_seek_read "https://github.com/meta/zstd/blob/dev/contrib/seekable_format/zstdseek_decompress.c"
click node_pzstd "https://github.com/meta/zstd/blob/dev/contrib/pzstd/Pzstd.cpp"
click node_zlib "https://github.com/meta/zstd/blob/dev/zlibWrapper/zstd_zlibwrapper.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_fileio,node_cli_support,node_user toneBlue
class node_api,node_compress,node_decompress,node_dict,node_legacy,node_parallel toneAmber
class node_entropy,node_common,node_headers toneMint
class node_seekable,node_seek_read,node_pzstd,node_zlib toneRose
```

## Components

### Command-line

- [zstd CLI](https://github.com/meta/zstd/blob/dev/programs/zstdcli.c): `programs/zstdcli.c`
- [File I/O](https://github.com/meta/zstd/blob/dev/programs/fileio.c): `programs/fileio.c`
- [CLI Utilities](https://github.com/meta/zstd/blob/dev/programs/util.c): `programs/util.c`

### Compression Codec

- [Public API](https://github.com/meta/zstd/blob/dev/lib/zstd.h): `lib/zstd.h`
- [Compression Engine](https://github.com/meta/zstd/blob/dev/lib/compress/zstd_compress.c): `lib/compress/zstd_compress.c`
- [Decompression Engine](https://github.com/meta/zstd/blob/dev/lib/decompress/zstd_decompress.c): `lib/decompress/zstd_decompress.c`
- [Dictionary Training](https://github.com/meta/zstd/blob/dev/lib/dictBuilder/zdict.c): `lib/dictBuilder/zdict.c`
- [Legacy Decoders](https://github.com/meta/zstd/tree/dev/lib/legacy): `lib/legacy`
- [Parallel Compression](https://github.com/meta/zstd/blob/dev/lib/compress/zstdmt_compress.c): `lib/compress/zstdmt_compress.c`

### Codec Support

- [Entropy Coding](https://github.com/meta/zstd/blob/dev/lib/common/fse.h): `lib/common/fse.h`
- [Common Primitives](https://github.com/meta/zstd/tree/dev/lib/common): `lib/common`
- [Codec Interfaces](https://github.com/meta/zstd/blob/dev/lib/compress/zstd_compress_internal.h): `lib/compress/zstd_compress_internal.h`

### Formats And Integrations

- [Seekable Frames](https://github.com/meta/zstd/blob/dev/contrib/seekable_format/zstdseek_compress.c): `contrib/seekable_format/zstdseek_compress.c`
- [Seekable Reader](https://github.com/meta/zstd/blob/dev/contrib/seekable_format/zstdseek_decompress.c): `contrib/seekable_format/zstdseek_decompress.c`
- [Parallel CLI](https://github.com/meta/zstd/blob/dev/contrib/pzstd/Pzstd.cpp): `contrib/pzstd/Pzstd.cpp`
- [zlib Wrapper](https://github.com/meta/zstd/blob/dev/zlibWrapper/zstd_zlibwrapper.c): `zlibWrapper/zstd_zlibwrapper.c`

### Other components

- **File User**

## Connections

- File User → zstd CLI: invokes
- zstd CLI → File I/O: uses (evidence: `programs/zstdcli.c`)
- zstd CLI → CLI Utilities: uses (evidence: `programs/zstdcli.c`)
- File I/O → Public API: calls (evidence: `programs/fileio.c`)
- Public API → Compression Engine: compresses with
- Public API → Decompression Engine: decompresses with
- Compression Engine → Codec Interfaces: uses (evidence: `lib/compress/zstd_compress.c`)
- Compression Engine → Entropy Coding: uses (evidence: `lib/compress/zstd_compress.c`)
- Compression Engine → Common Primitives: uses (evidence: `lib/compress/zstd_compress.c`)
- Decompression Engine → Common Primitives: uses
- Dictionary Training → Public API: supports dictionaries
- zstd CLI → Dictionary Training: trains dictionaries
- Public API → Parallel Compression: supports parallel mode (evidence: `lib/zstd.h`)
- Public API → Legacy Decoders: decodes older formats
- Public API → Seekable Frames: supports seekable frames
- Seekable Reader → Public API: reads frames (evidence: `contrib/seekable_format/zstdseek_decompress.c`)
- Parallel CLI → zstd CLI: parallel CLI use
- zlib Wrapper → Public API: calls (evidence: `zlibWrapper/zstd_zlibwrapper.c`)
