Release History

Releases follow the major.minor.micro scheme recommended by PEP440, where

  • major increments denote a change that may break API compatibility with previous major releases

  • minor increments add features but do not break API compatibility

  • micro increments represent bugfix releases or improvements in documentation

Current development

  • PR #555: More gracefully handle Packmol failures.

0.4.8 - January 30, 2024

  • PR #524: Allow Pydantic v2 at runtime.

  • PR #536: Make tests pseudo-private.

  • PR #537: Update for Python 3.12 compatibility.

  • PR #542: Remove use of pkg_resources.

  • PR #546: Remove use of ParameterHandler._OPENMMTYPE.

0.4.7 - October 16, 2023

  • PR #534: Includes virtual site and related parameters in openmm.system subset creation when calculating gradients.

  • PR #533: Considers openmm.AmoebaMultipoleForce when disabling PBC.

0.4.6 - October 12, 2023

  • PR #532: Changes BaseEnergyMinimisation.tolerance to use units of force.

0.4.5 - July 24, 2023

  • PR #517: Adds support for Foyer forcefields.

0.4.4 - July 24, 2023

This release drops support for Python 3.8, adds support for Python 3.10, and removed protocols based on Yank.

  • PR #511: Following NEP 29, removes support for Python 3.8.

  • PR #509: Add links to centralized OpenFF installation guide.

  • PR #496: Removes support for protocls based on Yank.

  • PR #497: Adds support for Python 3.10


This release adds support for OpenMM 8. Support for OpenMM 7 will be removed in a future release.


  • PR #496: Adds support for OpenMM 8.

  • PR #503: Updates FilterBySmirks to no longer ignore isotopes.


  • PR #499: Updates tutorials for upstream changes.


New Features

  • PR #479: Improves compatibility with pymbar 3 and 4.


  • PR #489: Properly creates Amber-style systems involving multiple molecules.

Behavior Changes

  • PR #490: Deprecates Yank protocols.


New Features

  • PR #475: Tests compatibility with pymbar 3 and 4.


Behavior Changes

This release is intended to be compatible with OpenFF Toolkit version 0.11.0 and newer and is not compatible with older versions. To use OpenFF Evaluator in environments with older versions of the toolkit (0.10.x and older) please use the 0.3.x release line.

The simtk namespace is no longer supported. It is recommended to use OpenMM 7.6 or newer.

Two other version constraints have been added: pymbar >=4.0.0 and mdtraj =1.9.3,1.9.4. A future release should fix compatibility with newer versions of MDTraj.

Unit-bearing quantities are now handled by openff-units instead of the openmm.units units module. See the openff-units Documentation for more information, including OpenMM interoperability.

The use of CMILES has been replaced with equivalent behavior using the OpenFF Toolkit as CMILES is no longer actively maintained.

New Features

  • PR #465: Adds support for AMD GPUs via OpenCL.


  • PR #409: Replaces some uses of Behaviour with the American spelling Behaviour.

  • PR #413: Adds a brief citation recommendation.



  • PR #445: Fix OpenMM unit utils API regression



  • PR #444: Fix labelling molecules with virtual sites



  • PR #402: Fix importing full ThermoML archive

Behavior Changes

The way that ThermoML archive files are served was changed in 2021 so that individual journal archives are no longer made available. Instead, now only the full ThermoML archive can be downloaded. Because of this, the ImportThermoMLDataSchema schema no longer allows users to select which journal to pull data from.



  • PR #390: Fix excluding v-sites from OpenMM positions



  • PR #389: Fix v-site positions not set by OpenMM



  • PR #375: Fix #374 - import from

  • PR #379: Fix #378 - ‘FilterDuplicates` unintentionally selects values without uncertainty if multiple are present

  • PR #384: Fix #382 - Default keyword arguments result in error

  • PR #387: Fix #380 - Recursion error in local file storage

New Features

  • PR #385: Support custom OpenMM nonbonded forces

  • PR #386: Migrate to new OpenMM namespace



  • PR #367: Fix #365 - to/from_pandas does not roundtrip.

  • PR #368: Fix #364 - Parsing an invalid IUPAC name raises an exception rather than a warning.

  • PR #371: Fix gradients of non-Quantity parameters.

New Features

  • PR #362: Support dask-jobqueue Slurm backend.

  • PR #366: Support gradients of handler attributes.


A patch release which adds the option (and enables it by default) to remove working files, such as simulated trajectories, when they are no longer needed.

Behavior Changes

  • PR #349: Working files are deleted by default after an estimation batch completes.


This release facilitates the migration of the openff-evaluator package from omnia to conda-forge. This mainly involves changes which update the package to use the new namespaces introduced in the openff-tookit package, rather than the old and now deprecated openforcefield namespaces.


  • PR #346: Remove the unsupported encoding json kwarg.

New Features

  • PR #341: Replace usages of dynamic Pint classes with internal static variants.

  • PR #343: Migrate to the new OpenFF Toolkit namespace.

  • PR #345: Migrate all reference from omnia to conda-forge.


This release exposes the option to disable caching of simulation data by an evaluator server. The performance of the local storage backend is currently poor when dealing with large amounts of cached data and hence it may be preferable to disable caching in such cases.

New Features

  • PR #337: Expose server option to dis/enable data caching.


This release fixes a bug introduced in version 0.3.0 of this framework, whereby the default workflows for computing excess properties could in rare cases be incorrectly merged leading to downstream protocols taking their inputs from the wrong upstream protocol outputs.

While this bug should not affect most calculations, it is recommended that any production calculations performed using version 0.3.0 of this framework be repeated using version 0.3.1.


  • PR #331: Fixes merging excess properties.


The main feature of this release is the overhauling of how the framework computes the gradients of observables with respect to force field parameters.

In particular, from this release onwards all gradients will be computed using the fluctuation formula (also referred to as the thermodynamic gradient), rather than calculation be the re-weighted finite difference approach (PR #280). In general the two methods produce gradients which are numerically indistinguishable, and so this should not markedly change any scientific output of this framework.

The change was made to, in future, enable better integration with automatic differentiation libraries such as jax, and differentiable simulation engines such as timemachine which readily and rapidly give access to \(\mathrm{d} U / \mathrm{d} \theta_i\).

Additionally, as of version 0.3.0 ‘known’ charges (i.e. those assigned to TIP3P water and ions) are no longer automatically applied when using a SMIRNOFF based force field. This feature was originally included in the framework as the OpenFF toolkit did not support defining charges on specific molecules in the force field itself. This is now fully supported through the LibraryCharges section of a SMIRNOFF force field and hence this workaround is no longer required. From now on all ion and water charges must be specified in the SMIRNOFF force field.

Finally, this release includes beta support for computing host-guest binding affinities using the attach-pull-release (APR) method through integration with the pAPRika and taproom packages. This support was largely facilitated by the efforts of the paprika authors - David R. Slochower and Jeffry Setiadi.


  • PR #285: Use merged protocols in workflow provenance.

  • PR #287: Fix merging of nested protocol inputs

New Features

  • PR #262: Initial host-guest binding affinity support via paprika and taproom.

  • PR #280: Switch to computing thermodynamic gradients.

  • PR #309: Add a date to the timestamp logging output.

  • PR #311: Initial solvation free energy gradient support.

  • PR #312: Support caching free energy data.

  • PR #324: Adds new miscellaneous DummyProtocol protocol.

Behavior Changes

  • PR #280: Migrate to thermodynamic gradients.

  • PR #310: The SMIRNOFF protocol no longer applies ‘known’ charges (i.e. water and ions).

  • PR #316: Add library charges to the TIP3P test data file.

  • PR #328: Store workflow provenance as serialized string.

Breaking Changes

  • The StatisticsArray array has been completely removed and replaced with a new set of observable (Observable, ObservableArray, ObservableFrame objects (#279, #286).

  • The following protocol inputs / outputs have been renamed:

    • SolvationYankProtocol.solvent_X_system -> SolvationYankProtocol.solution_X_system

    • SolvationYankProtocol.solvent_X_coordinates -> SolvationYankProtocol.solution_X_coordinates

    • SolvationYankProtocol.estimated_free_energy -> SolvationYankProtocol.free_energy_difference

  • The following classes have been renamed:

    • OpenMMReducedPotentials -> OpenMMEvaluateEnergies.

    • AveragePropertyProtocol -> BaseAverageObservable, ExtractAverageStatistic -> AverageObservable, ExtractUncorrelatedData -> BaseDecorrelateProtocol, ExtractUncorrelatedTrajectoryData -> DecorrelateTrajectory, ExtractUncorrelatedStatisticsData -> DecorrelateObservables

    • ConcatenateStatistics -> ConcatenateObservables, BaseReducedPotentials -> BaseEvaluateEnergies, ReweightStatistics -> ReweightObservable

  • The following classes have been removed:

    • OpenMMGradientPotentials, BaseGradientPotentials, CentralDifferenceGradient

  • The final value estimated by a workflow must now be an Observable object which contains any gradient information to return. (#296).


This release adds documentation for how physical properties are computed within the framework (both for this, and for previous releases.


  • PR #281: Initial pass at physical property documentation.


A patch release offering minor bug fixes and quality of life improvements.


  • PR #259: Adds is_file_and_not_empty and addresses OpenMM failure modes.

  • PR #275: Workaround for N substance molecules > user specified maximum.

New Features

  • PR #267: Adds workflow protocol to Boltzmann average free energies.

  • PR #269: Expose exclude exact amount from max molecule cap.


This release overhauls the frameworks data curation abilities. In particular, it adds

  • a significant amount of data filters, including to filter by state, substance composition and chemical functionalities.

and components to

  • easily import all of the ThermoML and FreeSolv archives.

  • convert between property types (currently density <-> excess molar volume).

  • select data points close to a set of target states, and substances which contain specific functionalities (i.e. select only data points measured for ketones, alcohols or alkanes).

More information about the new curation abilities can be found in the documentation here.

New Features

  • PR #260: Data set curation overhaul.

  • PR #261: Adds PhysicalPropertyDataSet.from_pandas.

Breaking Changes

  • All of the PhysicalPropertyDataSet.filter_by_XXX functions have now been removed in favor of the new curation components. See the documentation for information about the newly available filters and more.


A patch release offering minor bug fixes and quality of life improvements.


  • PR #254: Fix incompatible protocols being merged due to an id replacement bug.

  • PR #255: Fix recursive ThermodynamicState string representation.

  • PR #256: Fix incorrect version when installing from tarballs.


A patch release offering minor bug fixes and quality of life improvements.


  • PR #249: Fix replacing protocols of non-existent workflow schema.

  • PR #253: Fix antechamber truncating charge file.


  • PR #252: Use conda-forge for ambertools installation.

0.1.0 - OpenFF Evaluator

Introducing the OpenFF Evaluator! The release marks a significant milestone in the development of this project, and constitutes an almost full redesign of the framework with a focus on stability and ease of use.

Note: because of the extensive changes made throughout the entire framework, this release should almost be considered as an entirely new package. No files produced by previous versions of this will work with this new release.

Clearer Branding

First and foremost, this release marks the complete rebranding from the previously named propertyestimator to the new openff-evaluator package. This change is accompanied by the introduction of a new openff namespace for the package, signifying it’s position in the larger Open Force Field infrastructure and piplelines.

What was previously:

import propertyestimator

now becomes:

import openff.evaluator

The rebranded package is now shipped on conda under the new name of openff-evaluator:

conda install -c conda-forge -c omnia openff-evaluator

Markedly Improved Documentation

In addition, the release includes for the first time a significant amount of documentation for using the `framework and it's features`_ as well as a collection of user focused tutorials which can be ran directly in the browser.

Support for RDKit

This release almost entirely removes the dependence on OpenEye thanks to support for RDKit almost universally across the framework.

The only remaining instance where OpenEye is still required is for host-guest binding affinity calculations where it is used to perform docking.

Model Validation

Starting with this release almost all models, range from PhysicalProperty entries to ProtocolSchema objects, are now heavily validated to help catch any typos or errors early on.

Batching of Similar Properties

The EvaluatorServer now more intelligently attempts to batch properties which may be computed using the same simulations into a single batch to be estimated. While the behaviour was already supported for pure properties in previous, this has now been significantly expanded to work well with mixture properties.

0.0.9 - Multi-state Reweighting Fix

This release implements a fix for calculating the gradients of properties being estimated by reweighting data cached from multiple independant simulations.


  • PR #143: Fix for multi-state gradient calculations.

0.0.8 - ThermoML Improvements

This release is centered around cleaning up the ThermoML data set utilities. The main change is that ThermoML archive files can now be loaded even if they don’t contain measurement uncertainties.

New Features

  • PR #142: ThermoML archives without uncertainties can now be loaded.

Breaking Changes

  • PR #142: All ThermoMLXXX classes other than ThermoMLDataSet are now private.

0.0.7 - Bug Quick Fixes

This release aims to fix a number of minor bugs.


  • PR #136: Fix for comparing thermodynamic states with unset pressures.

  • PR #138: Fix for a typo in the maximum number of minimization iterations.

0.0.6 - Solvation Free Energies

This release centers around two key changes -

  1. a general refactoring of the protocol classes to be much cleaner and extensible through the removal of the old stub functions and the addition of cleaner descriptors.

  2. the addition of workflows to estimate solvation free energies via the new SolvationYankProtocol and SolvationFreeEnergy classes.

The implemented free energy workflow is still rather basic, and does not yet support calculating parameter gradients or estimation from cached simulation data through reweighting.

A new table has been added to the documentation to make clear which built-in properties support which features.

New Features

  • PR #110: Cleanup and refactor of protocol classes.

  • PR #125: Support for PBS based HPC clusters.

  • PR #127: Adds a basic workflow for estimating solvation free energies with YANK.

  • PR #130: Adds a cleaner mechanism for restarting simulations from checkpoints.

  • PR #134: Update to a more stable dask version.


  • PR #128: Removed the defunct dask backend processes kwarg.

  • PR #133: Fix for tests failing on MacOS due to travis issues.

Breaking Changes

  • PR #130: The RunOpenMMSimulation.steps input has now been split into the steps_per_iteration and total_number_of_iterations inputs.

Migration Guide

This release contained several public API breaking changes. For the most part, these can be remedied by the follow steps:

  • Replace all instances of run_openmm_simulation_protocol.steps to run_openmm_simulation_protocol.steps_per_iteration

0.0.5 - Fix For Merging of Estimation Requests

This release implements a fix for a major bug which caused incorrect results to be returned when submitting multiple estimation requests at the same time - namely, the returned results became jumbled between the different requests. As an example, if a request was made to estimate a data set using the smirnoff99frosst force field, and then straight after with the gaff 1.81 force field, the results of the smirnoff99frosst request may contain some properties estimated with gaff 1.81 and vice versa.

This issue does not affect cases where only a single request was made and completed at a time (i.e the results of the previous request completed before the next estimation request was made).


  • PR #119: Fixes gather task merging.

  • PR #121: Update to distributed 2.5.1.

0.0.4 - Initial Support for Non-SMIRNOFF FFs

This release adds initial support for estimating property data sets using force fields not based on the SMIRNOFF specification. In particular, initial AMBER force field support has been added, along with a protocol which applies said force fields using tleap.

New Features

  • PR #96: Adds a mechanism for specifying force fields not in the SMIRNOFF spec.

  • PR #99: Adds support for applying AMBER force field parameters through tleap

  • PR #111: Protocols now stream trajectories from disk, rather than pre-load the whole thing.

  • PR #112: Specific types of protocols can now be easily be replaced using WorkflowOptions.

  • PR #117: Adds support for converting PhysicalPropertyDataSet objects to pandas.DataFrame.


  • PR #115: Fixes caching data for substances whose smiles contain forward slashes.

  • PR #116: Fixes inconsistent mole fraction rounding.

Breaking Changes

  • PR #96: The PropertyEstimatorClient.request_estimate(force_field=... argument has been renamed to force_field_source.

Migration Guide

This release contained several public API breaking changes. For the most part, these can be remedied by the follow steps:

  • Change all instances of PropertyEstimatorClient.request_estimate(force_field=...) to PropertyEstimatorClient.request_estimate(force_field_source=...)

0.0.3 - ExcessMolarVolume and Typing Improvements

This release implements a number of bug fixes and adds two key new features, namely built in support for estimating excess molar volume measurements, and improved type checking for protocol inputs and outputs.

New Features

  • PR #98: Substance objects may now have components with multiple amount types.

  • PR #101: Added support for estimating ExcessMolarVolume measurements from simulations.

  • PR #104: typing.Union is now a valid type arguemt to protocol_output and protocol_input.


  • PR #94: Fixes exception when testing equality of ProtocolPath objects.

  • PR #100: Fixes precision issues when ensuring mole fractions are <= 1.0.

  • PR #102: Fixes replicated input for children of replicated protocols.

  • PR #105: Fixes excess properties weighting by the wrong mole fractions.

  • PR #107: Fixes excess properties being converged to the wrong uncertainty.

  • PR #108: Fixes calculating MBAR gradients of reweighted properties.

Breaking Changes

  • PR #98: Substance.get_amount renamed to Substance.get_amounts and now returns an immutable frozenset of Amount objects, rather than a single Amount.

  • PR #104: The DivideGradientByScalar, MultiplyGradientByScalar, AddGradients, SubtractGradients and WeightGradientByMoleFraction protocols have been removed. The WeightQuantityByMoleFraction protocol has been renamed to WeightByMoleFraction.

Migration Guide

This release contained several public API breaking changes. For the most part, these can be remedied by the follow steps:

  • Change all instances of Substance.get_amount to Substance.get_amounts and handle the newly returned frozenset of amounts, rather than the previously returned single amount.

  • Replace the now removed protocols as follows:

    • DivideGradientByScalar -> DivideValue

    • MultiplyGradientByScalar -> MultiplyValue

    • AddGradients -> AddValues

    • SubtractGradients -> SubtractValues

    • WeightGradientByMoleFraction -> WeightByMoleFraction

    • WeightQuantityByMoleFraction -> WeightByMoleFraction

0.0.2 - Replicator Quick Fixes

A minor release to fix a number of minor bugs related to replicating protocols.


  • PR #90: Fixes merging gradient protocols with the same id.

  • PR #92: Fixes replicating protocols for more than 10 template values.

  • PR #93: Fixes ConditionalGroup objects losing their conditions input.

0.0.1 - Initial Release

The initial pre-alpha release of the framework.