Iceberg 129 is first a specification (format/spec.md in apache/iceberg (https://github.com/apache/iceberg 9,293 ), with the REST catalog's OpenAPI definition beside it) and only second a Java library, so any engine that follows the spec reads the same tables, as DuckDB 61,228 did in Agreeing on Current State. The spec is versioned. Version 1 defined analytic tables of immutable Parquet 129 , Avro 129 or ORC files with snapshots, manifests and hidden partitioning. Version 2 added row-level deletes through delete files, ordered by sequence numbers. Version 3 added deletion vectors, row lineage, column default values and the variant, geometry, geography and nanosecond timestamp types. Version 4, which restructures metadata, is under development.
Iceberg 1.12.0 creates version 2 tables by default (since 1.4.0) and version 3 on request ('format-version' = '3'), which every engine touching the table must then support. Four rules explain most of Iceberg's behavior: files are found through manifests, never listings; columns are tracked by field ID, so renames are safe (Safe Schema Evolution Rules); partitioning is hidden, a transform such as month(order_ts) applied to filters automatically (Hidden Partitioning); and commits swap the metadata pointer atomically.