Changelog

This page documents all notable changes to TACO Format.

0.2.2 (2026-07-26)

Stays on the 0.2. line deliberately: the header records the package version as the format version, so a 0.3.x release would be unreadable by every existing 0.1.x/0.2.x installation even though the on-disk layout is unchanged.

Bugfixes:

  • Make append and finish crash-safe, without wasting space. finish calls sync_all twice — once after writing the new index table and once after rewriting the header that points at it — so the header never references an index that is not yet on disk. Writer::append writes new frames straight over the old frame index table, and protects that in-place overwrite with an append journal (<file>.idx-journal): it is fsynced before the first byte is overwritten and removed only once the new index and header are durable. An interrupted append is therefore rolled back automatically the next time the file is opened, via the new recover_interrupted_append(). Reusing the index space matters because the alternative — appending past the old index — strands 8*(N+1) bytes per append, which is quadratic when appending one frame at a time: 41 single-frame appends leave 6880 bytes of dead space, and 100k of them would leave about 40 GB. Appending now produces a file byte-for-byte the size of one written in a single pass.

  • Fix the format-version check rejecting the library’s own output. The compatibility list is hand-maintained while the header stores CARGO_PKG_VERSION, so a bump past the 0.2. line makes the library refuse files it has just written. Added a current_version_is_self_compatible unit test that fails loudly the next time this is forgotten.

  • Fix frame_index=0 in read() and remove unsafe py.eval calls

  • Fix I/O safety: underflow, range checks, keyframe override, an O(n²) path, and async lock poisoning

  • Validate indices in extract_subset; fix tensor edge cases

  • Fix integer underflow in extract_atoms

  • Fix taco check exit code; prevent convert/extract from overwriting their own input

  • Make the C API writer ownership safe and avoid panics crossing the FFI boundary

  • Fix empty-frame handling, bounds checks and dead code

Features:

  • tensor and utils are now public modules

  • Python: register save_ase; add load_ase, save_trajectory and load_trajectory

Improvements:

  • # Safety documentation on all C API functions

  • Add a Justfile and migrate GitLab CI to it; CI now also tests default features and runs clippy and rustfmt

  • Update dependencies, including vulnerable ones

  • Repository URLs, Python version support and paper citations synchronised

0.2.1 (2026-06-23)

  • Update dependencies

0.2.0 (2026-05-22)

Features:

  • Extra datasets spec support and f64 ExtraArray variants

  • Added set_pbc method to Writer and AsyncWriter

  • Preserve metadata and extras in extract/copy

  • Convert command now honors full_frame_interval

Bugfixes:

  • Fix stress extraction and compile error

  • Fix triclinic cell support in Python interface

  • Fix division by zero in center_of_mass for empty positions

  • Return python error when positions missing

  • Accept 1D masses in python center_of_mass

  • Remap constraint indices when extracting atom subsets

  • Fix missing extra_datasets argument in read_frame_range

  • Add forces/stress extraction warnings in Python interface

Improvements:

  • Loosen format version compatibility

  • Revert: python read now always returns a list (consistent API)

  • Respect time_step for single-frame write

  • Guard full_frame_interval zero in reader

  • Validate CLI extract step size

  • Document python full_frame_interval default

  • Remove print statements from library code

  • Update dependencies

0.1.7 (2026-05-04)

  • Move Python bindings to separate crate to allow pure rlib compilation

0.1.6 (2026-04-28)

  • Fix header writing

0.1.5 (2026-04-28)

  • Implement storing constraints

0.1.4 (2026-02-17)

  • Update dependencies

  • Fix bug where potential energy was not written if kinetic energy is not present

0.1.3 (2025-12-19)

  • Added append support

  • Updated dependencies (including ndarray 0.17)

0.1.2 (2025-11-25)

Initial release that is published to crates.io.

Features:

  • Core TACO format implementation in Rust

  • Python bindings via PyO3

  • ASE (Atomic Simulation Environment) integration

  • Delta compression for efficient trajectory storage

  • Configurable precision for positions, velocities, and forces

  • Support for periodic boundary conditions

  • Support for energies, forces, and thermodynamic data

  • Random access to frames

  • Utilities for format conversion and analysis