Release notes#

[v2.10.2] - 2026-02-22#

Fixed#

Eigen row-major storage for atom data mapping#

Eigen::Map calls that wrap raw double* atom data now specify Eigen::RowMajor explicitly, ensuring consistent [x0, y0, z0, x1, ...] layout regardless of compile-time defaults. This completes the storage-order cleanup started in v2.10.1.

Windows MSVC compatibility (conda-forge upstream absorption)#

Several fixes originally carried as conda-forge recipe patches have been absorbed into the source tree:

  • XTBPot VLA removal: replaced the C99 variable-length array in XTBPot.cpp with std::vector, since MSVC does not support VLAs.

  • INIFile empty-string guard: added a bounds check before indexing the last character of a string, preventing undefined behavior on empty lines under MSVC.

  • POSIX header guards: wrapped <unistd.h> and <sys/wait.h> includes in #ifdef guards and replaced system() shell calls in IMD with std::filesystem equivalents.

  • Meson build-system fixes: decoupled xtb from the Fortran requirement, added Windows library search paths for libtorch, metatensor, and vesin.

Changed#

Version handling harmonization#

All version consumers (C++ client, Python package, Sphinx docs) now derive from pyproject.toml as the single source of truth.

Developer#

Benchmark CI improvements#

The benchmark comparison step was moved into the commenter workflow and now uses uvx --quiet for cleaner PR comment output.