Skip to content

The .ant format

An open, integrity-checked, streamable container for exchanging knowledge graphs.

.ant is an open, self-contained container format for exchanging knowledge graphs. A .ant file is a single zstd-compressed stream of newline-delimited JSON records: a manifest first, then schema types, vertices, edges, observations, evidence, beliefs, embedding vectors, and deletion tombstones in any order, then a trailer whose per-kind counts and SHA-256 hash make truncation or tampering detectable in one pass. The format is openly specified under Apache-2.0, versioned MAJOR.MINOR with a same-major compatibility guarantee, and small enough that a conformant reader is about a hundred lines in any language with zstd and SHA-256.

Install the CLI and validate a file — validate enforces every container rule, info prints the manifest and per-kind counts:

Terminal window
cargo install openantares
openantares validate world.ant # exit 0 clean, 65 on a bad file
openantares info world.ant # manifest, counts, format version

Or read files as a library:

Terminal window
cargo add antares-format
use antares_format::AntReader;
let mut reader = AntReader::new(std::fs::File::open("world.ant")?)?;
while let Some(record) = reader.next_record()? {
// records stream; the trailer's SHA-256 and counts are verified as you go
}

Implementation

The canonical Rust crates: ant-types is the record vocabulary, antares-format is the streaming reader and writer that produced the golden files.

CLI

openantares validates and inspects .ant files, with a sysexits exit-code contract shared by every reference binding.

The .ant format is the interchange format of Antares, an enterprise discovery engine; the engine that produces and consumes these files is a separate, private product — see openantares.com. Everything documented on this site is open, Apache-2.0, and depends on none of it: the specification, schema, bindings, and goldens and the canonical Rust implementation stand alone.