Retrieve a file from a 10,000-file archive in 7 milliseconds.

Fast to create. Fast to query. No full archive decompression required.

View on GitHub cargo install arcx
View Benchmarks

Traditional archives force a choice.

TAR + ZSTD

Strong cross-file compression, but TAR+ZSTD typically requires reading and decompressing the archive sequentially to reach the target file.

ZIP

Fast per-file random access, but each file is compressed independently -- weak compression ratios.

ARCX does both.

Key Numbers

7ms
Selective file retrieval from a completed archive
200x
Less data read from disk vs TAR+ZSTD
~3%
Compression overhead vs TAR+ZSTD
3
I/O requests for remote selective access
footer + manifest + one block

Bytes read to extract one file

How much data does the format actually read from disk to retrieve a single file? ARCX reads the manifest plus one compressed block. TAR+ZSTD typically requires reading and decompressing the archive sequentially to reach the target file.

Dataset Target File ARCX TAR+ZSTD ZIP
Build artifacts (581 files, 181 MB) 36.4 KB .o file 713.8 KB 140.4 MB 36.5 KB
Python ML project (206 files, 64 MB) 6.9 KB .py file 326.1 KB 63.1 MB 2.1 KB
Log archive (1,008 files, 30 MB) 35.8 KB log file 365.8 KB 5.0 MB 6.1 KB
Node.js project (19,001 files, 43 MB) 1.5 KB .d.ts file 1.3 MB 17.4 MB 632 B
Source code repo (389 files, 1.9 MB) 4.5 KB .go file 373.8 KB 656.1 KB 1.9 KB
Methodology: Cold-cache medians, 3 runs, Intel i7, Windows 11. ZIP reads less because it has no cross-file compression. ARCX combines TAR+ZSTD-class compression with direct file access.

How It Works

ARCX groups files into independently decompressible blocks. A binary manifest at the end maps every file path to its block location.

1

Index Lookup

Read the 40-byte footer to locate the manifest. Decompress the manifest and look up the target file's block reference.

2

Block Seek

Seek directly to the relevant compressed block. Skip every other block in the archive entirely.

3

Decompress One Block

Decompress only the single block containing the target file. Extract the file data from the decompressed output.

ARCX stores the index at the end and data in independently decompressible blocks.

Archive Layout

+----------+-------+-------+-------+-----+----------+--------+
|  Header  | Block | Block | Block | ... | Manifest | Footer |
| (80 B)   |   0   |   1   |   2   |     |          | (40 B) |
+----------+-------+-------+-------+-----+----------+--------+

On `arcx get`:

  1. Read Footer (40 B)   -->  manifest offset
  2. Read Manifest         -->  file -> block map
  3. Seek to Block N       -->  decompress one block
                                extract file data

Total I/O: footer + manifest + one block. Everything else is untouched.

Format Comparison

Feature ZIP TAR+ZSTD ARCX
Cross-file compression No Yes Yes
Selective file access Yes No Yes
Compression ratio Weak Strong Strong
Single-file retrieval speed Fast Slow Fast
Remote range-request compatible Yes No Yes

Use Cases

CI/CD Artifacts

Store build outputs once, retrieve individual files on demand without downloading and decompressing the full archive.

Cloud Storage

Reduce egress costs by reading only the bytes you need. Combine with HTTP range requests for remote selective extraction.

Package Managers

Inspect package metadata or extract a single file without pulling the entire package.

Game Assets

Load individual textures, models, or audio files from a compressed asset bundle at runtime.

Log Archives

Query a specific day's logs from a compressed monthly archive without decompressing the other 29 days.

Monorepo Builds

Extract only the changed module's artifacts from a full build archive, cutting restore times from minutes to milliseconds.

Quick Start

# Install
cargo install arcx

# Pack a directory into an archive
arcx pack ./my-project output.arcx

# Get a single file (instant)
arcx get output.arcx src/main.rs

# List contents
arcx list output.arcx

# Extract everything
arcx extract output.arcx ./output-dir
# Build from source
git clone https://github.com/getarcx/arcx.git
cd arcx
cargo build --release