NAME

Archive::CAR - Content Addressable Archive (CAR) reader and writer

SYNOPSIS

use Archive::CAR;

# Load a CAR file
my $car = Archive::CAR->from_file('data.car');

say 'CAR Version: ' . $car->version;

# Access roots
for my $root ($car->roots->@*) {
    # $root is an Archive::CAR::CID object
    say 'Root CID: ' . $root->to_string;
}

# Access blocks
for my $block ($car->blocks->@*) {
    my $cid = $block->{cid};
    my $data = $block->{data};
    say 'Block ' . $cid->to_string . ' is ' . length($data) . ' bytes';
}

DESCRIPTION

Archive::CAR provides support for the Content Addressable Archive format used by IPFS. A CAR file is a serialized stream of IPLD blocks (CID + data) concatenated together, usually starting with a header that identifies the "roots" of the data DAG (Directed Acyclic Graph).

This module supports both CAR v1 (simple concatenation) and CAR v2 which adds an index for fast random access.

METHODS

from_file($path)

Constructs an Archive::CAR object by parsing the file at the given path. Detects version automatically.

write($filename, $roots, $blocks, [ $version ])

Writes a new CAR file. $roots is an arrayref of CIDs, and $blocks is an arrayref of hashes containing cid and data. $version defaults to 1.

version()

Returns the version of the CAR file (1 or 2).

roots()

Returns an array reference of Archive::CAR::CID objects that are the designated entry points for this archive.

blocks()

Returns an array reference of hashes, where each hash contains cid (an Archive::CAR::CID object) and data (the raw binary block).

SEE ALSO

https://ipld.io/specs/transport/car/, Archive::CAR::CID, Archive::CAR::v1, Archive::CAR::v2

AUTHOR

Sanko Robinson sanko@cpan.org

COPYRIGHT

Copyright (C) 2026 by Sanko Robinson.

This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.