KIM API Revision History

Recent Updates

=== kim-api-2.2.1 =============== 13Dec2020 ====================================

* replace usage of localtime() with more secure localtime_r()

* Enable Github code scanning

* Refactor CI to move codecov support to centos docker CI and speedup macOS CI

* Fix build support for coverage

* Improvements and fixes in collections management

* Use CMake CACHE variables so kim items can override package settings

* Added discussion of standalone portable model CMakeLists.txt files to docs

* Eliminate a compiler warning

* Updates to support new version of fprettyify

* Refactor libkim-api.pc file for more standard support for relocatable

* Update travis-ci badge to use .com url

* Implement more reliable method for bash scripts to find ORIGIN

* Fix bugs in handling of -DKIM_API_SYSTEM_*_DIR=":/dir/..." build options; Add
  CI testing for usage of these cases.

* Correct release date for 2.2.0 in this file (Dec -> Nov)

=== kim-api-2.2.0 =============== 18Nov2020 ====================================

* The kim-api now supports Windows.  Significant additions have been made to
  the code and CMakeLists.txt files to support building kim-api and items on
  Windows via Cygwin and MinGW; Build on Windows requires C++17.
  (Thanks to Alex Stukowski)

* kim-api is now "relocatable" after install.  When installed to a non-standard
  PREFIX (with the CMAKE_INSTALL_PREFIX CMake option) the entire install tree
  may be moved, after install, to a new location in the file system and
  everything should still work.  This uses the RPATH, ${ORIGIN}, and similar
  mechanisms and is functioning on Linux, macOS, and Windows.  (This is tested
  in the CI.)

* Added 'portable-model' utility which prints out an edn dictionary containing
  information about the features and properties of a portable model.  This
  includes the list of supported compute arguments and callbacks, the
  parameters that the model makes available at runtime, etc.  The utility can
  be found in the LIBEXEC install directory.

* Added Push/PopDefaultPrintFunction to KIM::Log interface to support Simulator
  specific logging behavior such as the need for MPI communication to the head
  node for I/O operations

* Portable Model parameter files are now guaranteed to all be found in a single
  subdirectory.  This provides uniform handling of parameter files for both
  Portable Models and Simulator Models.  New GetParameterFileDirectoryName()
  and GetParameterFileBasename() routines have been added and
  GetParameterFileName() has been deprecated in the KIM::ModelDriverCreate
  interface.  A new GetParameterFileBaseName() routine has been added and
  GetParameterFileName() has been deprecated in the KIM::SimulatorModel

* Update documentation to point to new discourse OpenKIM

* Switch to minimum version 3.10 for CMake

* Complete refactor of CMake build details to improve exported target support.
  This required an update to how kim-api items define their CMakeLists.txt
  files.  This version remains backward compatible with item CMakeLists.txt
  files from older versions, but support for these is deprecated and will be
  removed in v3.

* Added human readable CMake configuration summary log (also a detailed
  version) which is printed at the end of the cmake configuration step

* Added new documentation page describing CMakeLists.txt files for the various
  kim-api item types

* Added native CMake implementation of xxd processing which allows the package
  to be build on systems without the xxd executable

* The collections-management utility will now use curl if wget is not available
  on the system

* Added a user-agent string to wget/curl commands so downloads and queries may
  be identified as coming from the collections-management utility

* Improve debugging of collections-management behavior with new CM_VERBOSITY
  environment variable and added better error messages

* Full refactoring of travis-ci, docker, and testing implementation

* Added support for openSUSE, ubuntu, centos, and debian to testing via docker

* Added ubuntu_cmake310 to explicitly test build with CMake version 3.10

* Added MinGW travis-ci testing (Thanks to Alex Stukowski)

* Added unique build identifier to default name for config and user collection

* Refactor and improve handling of deprecated identifiers in configuration file

* Check for and ignore empty kim standard metadata files

* Adopted the `fprettify` Fortran code formatter and reformat all Fortran code
  to conform to the kim-api settings (now in .fprettify.rc).  Added scripts to
  support git-commit hook

* Refactor #includes to satisfy include-what-you-use linter

* Refactor initialization of pointers as best practice

* Fix a bug in C language binding for SimulatorModel Interface

* Fix a bug associated with the edn-cpp use of exceptions

* Fix issues identified by Coverity Scan

* Various fixes and improvements

* Various documentation updates

=== kim-api-2.1.3 =============== 16Aug2019 ====================================

* Adjust kim_collections_module to work around gfortran <= 4.8 bug.

* Fix minor bug in collections-management.

* Improve backward compatibility support for ~/.kim-api/config file format.

* Fix to Fortran/C mapping of KIM_LENGTH_UNIT_BOHR.

* Fixes to Fortran documentation and cross-references.

* Added information/links to the top level

=== kim-api-2.1.2 =============== 29Jul2019 ====================================

* Fixup Fortran kim_collections_module interfaces to be consistent with c/c++.

* Fixup collections-management for portabability to dash.

* Improve for more standard compliant MD, MO, SM behavior.

* Improve zsh completion install behavior.

* Fixup Fortran c_long communication and overflow behavior.

* Add missing testing of interface in examples/simulators/collections-example.

* Improve example/simulators to remove warnings.

* Fix bug in KIM::SimulatorModel::Create().

=== kim-api-2.1.1 =============== 24Jul2019 ====================================

* Refactor 'kim-api-collections-management list' code for performance.

* Update collections-management to use 'make -j2' for improved performance.

* Improve kim-api-collections-management handling of passwords for use with
  sudo.  Specifically, support reading of passwords with whitespace and other
  special characters.

* Add zsh support to activate/deactivate scripts & zsh completions.

* Fix c_long overflow (for i386 systems) bug in Fortran kim_collections_module.

* Rework 'kim-api-collections-management install xxx OpenKIM' behavior.  Now
  installs the latest official release archive found at  This also greatly reduces the
  total build and install time.

* Redefine/refactor KIM::Collections behavior for finding item names.
  Previously, a shared library file was found, opened, and checked for
  validity.  To significantly improve performance, now simply the existence of
  the shared library file is used to identify available item names.

* Redefine/refactor collections-management and collections-info to remove
  '--with-version' option.

* Fixup and improve Fortran example codes.

* Added graphic of available binaries to

=== kim-api-2.1.0 =============== 16Jul2019 ====================================

* Added new KIM::SimulatorModel interface providing programatic support to
  simulators for packaging of parameter files, input commands, and metadata
  necessary to run a simulator's native potentials.

* Added new KIM::Collections interface (and the supporting extensible
  enumerations KIM::Collection and KIM::CollectionItemTypes) providing
  programatic access to the KIM API Collections and its configuration settings.
  (This included a refactor and removal of old_KIM_API_DIRS.*.)

* Convert from old 'models' to 'portable-models' nomenclature for KIM API
  collections, including environment variables, configuration file, etc.  (For
  backward compatibility, the old configuration file format is still accepted.)

* Added support for Metadata files to (internal) KIM::SharedLibrary and
  programatic access to these files from the new KIM::Collections interface.

* Automatically add standard metadata files (kimspec.edn,
  kimprovenance.edn, and kimcite-*.bib) to an item's shared library if they

* Significant documentation updates to describe the new interfaces as well as
  changing to the the Portable Model (PM) and Simulator Model (SM) terminology.

* Added explicit documentation of Fortran interfaces for routines called by the
  KIM API (ModelCreate, ModelDestroy, GetNeighborList, etc.).

* Added mention of "Toy Models" to documentation.

* Added data-type error checking for Portable Model parameter get/set routines;
  Thanks to Daniel Schopf.

* Bug fixes and improvements to kim-api-collections-management script

* Added support for Include-What-You-Use (IWYU).

* Added (internal) copy of edn-cpp parser for use with SMs.

* Updated existing examples as necessary and added SM example.

* Added new "unit-test" examples of simulators using the Collections and SM

* Improvement to pkgconfig support; Thanks to Christoph Junghans.

* Added new tests to CI, based on INSTALL file.

* Updates create-package script and added run-cmds-from-install script.

* Added .clang-format-hook-ignore file and mechanism (specifically for edn-cpp).

* Updates to better support binary installation on various systems.

* Added CDDL headers to files that did not have them.

=== kim-api-2.0.2 =============== 28Mar2019 ====================================

* Transition from 'kim-api-v2' naming to 'kim-api' for better alignment with
  open source conventions

* Added a simulator model example

* Refactored support for simulator models: separated from models in collections.
  Updated collections-management utility appropriately

* Updated calls to scanf() for better security

* Refactored old_KIM_API_DIRS.cpp to remove calls to 'exit()'

* Added build options to set system collection directories

* Added support for colon-separated list of directories for user and system

* Added '--version' flag to utilities

* Update bash completion to work with old and new bash

* Improve robustness of creat-package script

* Updated badges to point to 'devel' branch & create-package to change to
  'master' branch for release commit

* Added coverity & codecov badges to

* Added vX.Y.Z-git tags to git repo and updated create-package script

* Added NEWS file to Doxygen documentation & updated doxygen settings

* Improved version build metadata string using "git describe"

* Updated link flags for codecov

=== kim-api-v2-2.0.1 ============ 22Feb2019 ====================================

* Fix bug in KIM::SemVer::ParseSemVer()

* Various minor fixes to address issues identified by Coverity Scan

* Fix version string in libkim-api-v2.pc to conform to RPM schema

* Added advanced CMake options for compilers used to build items after install

* Added item install prefix CMake variables to cache; helps with packaging

* Remove dead code in top level CMakeLists.txt

=== kim-api-v2-2.0.0 ============ 06Feb2019 ====================================

* Update main documentation.

* Added function level documentation with cross-references and input/output
  argument descriptions.

* Added Known() member function to extensible enumerations.

* Extensible enumeration default constructors now create uninitialized objects.

* Rename C++ *.String() routines to *.ToString.

* Added 'recursive' to all Fortran routines (for better thread safety).

* Added support files for readthedocs.

* Additions and fixes for collections-management utility.

* Travis CI configuration updates.

* Avoid some compiler warnings from clang.

* Various CMake fixes/adjustments.

* Various bug fixes in api code.

View the NEWS file for additional history.