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.
finishcallssync_alltwice — 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::appendwrites 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 newrecover_interrupted_append(). Reusing the index space matters because the alternative — appending past the old index — strands8*(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 the0.2.line makes the library refuse files it has just written. Added acurrent_version_is_self_compatibleunit test that fails loudly the next time this is forgotten.Fix
frame_index=0inread()and remove unsafepy.evalcallsFix I/O safety: underflow, range checks, keyframe override, an O(n²) path, and async lock poisoning
Validate indices in
extract_subset; fix tensor edge casesFix integer underflow in
extract_atomsFix
taco checkexit code; preventconvert/extractfrom overwriting their own inputMake the C API writer ownership safe and avoid panics crossing the FFI boundary
Fix empty-frame handling, bounds checks and dead code
Features:
tensorandutilsare now public modulesPython: register
save_ase; addload_ase,save_trajectoryandload_trajectory
Improvements:
# Safetydocumentation on all C API functionsAdd 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