YY.MM.PATCH (e.g., 25.12.0). Major releases occur roughly every two months.
Deprecation policy: breaking changes follow a deprecation window of at least one year or three releases (whichever is longer). Deprecated APIs emit a warning before removal so you have time to migrate.
Unreleased
Features
Features
- Improved the performance of processed variables by replacing
casadi.vertcatinput stacking with numpy vectors. - Preserve custom variables and events in built-in model
to_config. - Allow out-of-bounds initial state of charge to enable initialising a simulation at a voltage outside the voltage limits.
- Added
cache_esohoption toSimulationthat caches the electrode SOH computation across repeatedsolvecalls. - Eliminated the mass matrix inverse and temporary dense matrix objects when building the simulation.
- Added the
hermite_reduction_factoroption toIDAKLUSolver, which dynamically compresses solution size by removing redundant points in the Hermite interpolant. - Added support for Python 3.14.
- Added regularisation to the kinetics and OCPs for improved numerical stability.
- DiffSL export for discretised PyBaMM models.
Bug fixes
Bug fixes
- Fixed a bug in the exchange current density calculation for MSMR models.
- Fixed a bug where converting
ExpressionFunctionParameterto source code did not preserveInterpolantconstructor calls with data arrays. - Fixed a bug where bounds of the particle size distribution were always taken from the primary phase when using 2 phases with particle size distribution.
Breaking changes
Breaking changes
- The mass matrix inverse is no longer computed during discretisation; solvers now use sparse linear solves instead.
- Dropped JAX support on macOS with Intel (x86_64) processors. macOS users require Apple Silicon (M-series) for JAX features.
- Added a small regularisation term to the exchange current density, slightly modifying kinetics as stoichiometry approaches 0 or 1.
- The default OCP barrier as stoichiometry approaches 0 or 1 is now smooth instead of asymptotically approaching infinity.
- Migrated
docsanddevdependencies fromproject.optional-dependenciestodependency-groupsper PEP 735.
v25.12 — January 2026
v25.12.2 — 2026-01-22
v25.12.2 — 2026-01-22
Features
- Added experimental
CompositeSolverthat tries multiple solvers until one succeeds, and updated the ESOH solvers to use a composite algebraic solver.
v25.12.1 — 2026-01-21
v25.12.1 — 2026-01-21
Features
- Improved the robustness of the
ElectrodeSOHCompositemodel and made the calculation of equilibrium stoichiometries consistent for models with hysteresis.
- Fixed a bug where
ExpressionFunctionParameterchildren were not properly substituted after JSON deserialisation, causingElectrodeSOHSolverto fail with “Variable not implemented” errors.
v25.12.0 — 2026-01-15
v25.12.0 — 2026-01-15
Features
- Porosity and active material fractions are now
FunctionParametersof y and z, as well as x. - Added support for asymmetric loss of active material.
- Added
Solution.ypproperty to return the time derivatives of the solution. - Added
TensorFieldfor rank-1 and rank-2 tensors,TensorProductfor outer products, and tensor divergence support in 2D finite volume. - Added support for Python 3.13.
- Reduced the time to build
Simulations by creating a post-processing step for variables. - Added the ability to observe custom variables from a
Solutionobject usingSolution.observe(symbol). - Added inverse kinetics for linear kinetics.
- Fixed a bug where
fixed_input_parametersignoredInputParametervalues within expressions inParameterValues. - Fixed a bug with domain shape evaluation.
- Fixed a bug where
IDAKLUSolvererrors were not raised correctly.
- Removed default constants added to
ParameterValueson construction. Only breaking if you rely on this in custom models or parameters.
v25.10 — October–November 2025
v25.10.2 — 2025-11-27
v25.10.2 — 2025-11-27
Bug fixes
- Fixed a bug with serialising
InputParameters. - Fixed a bug with missing inputs for
initial_conditions_fromscale evaluation.
v25.10.1 — 2025-11-14
v25.10.1 — 2025-11-14
Features
- Allow setting initial conditions from
y_slicesof aSolutionobject.
- Fixed a bug where simulations whose initial conditions violated the events could continue solving.
- Fixed an issue with composite electrode and “swelling only” mechanics sub-models not creating the cell thickness variable.
v25.10.0 — 2025-10-29
v25.10.0 — 2025-10-29
Features
- Added uniform grid sizing across subdomains in the x-dimension.
- Added
electrode_phaseskwarg toplot_voltage_components()to choose between primary or secondary phase overpotentials. - Added
num_steps_no_progressandt_no_progressoptions toIDAKLUSolverfor early termination when little progress is detected. - Added helper functions to import external 3D meshes.
- Added support for algebraic and differential surface form in composite models.
- Generalised
set_initial_soctoset_initial_stateand added Thevenin initial state setting.
- Fixed
KeyError: 'min'inlatexify()for lithium plating models when certain geometry keys are missing. - Fixed a bug where no error was raised when a list of input sets was provided to the solver while using
Experiment. - Fixed a bug where simulations using
output_variablesinIDAKLUSolvercouldn’t be pickled. - Fixed a bug where time-based Heaviside or modulo discontinuities could trigger out-of-bounds errors in time arrays.
- Updated hysteresis decay rate parameters to a “true” hysteresis decay rate, changing the unit interpretation.
- Changed fundamental variable for all SEI models from thickness to concentration.
v25.8 — August 2025
v25.8.0 — 2025-08-04
v25.8.0 — 2025-08-04
Features
- Added
plot_3d_cross_sectionandplot_3d_heatmapfunctions for 3D thermal simulation plots. - Added
Basic3DThermalSPMmodel with two-way coupling. - Added
on_failureoption toBaseSolverwith choices"warn","ignore", and"raise". - Introduced entry points for models (similar to parameter sets), enabling experimental support for loading third-party models via
pybamm.Model("model_name"). - Added 3D FEM and meshes supporting rectangular and cylindrical geometries.
- Added a
Constantsymbol for named constants (subclass ofScalar) to prevent constants from being simplified away. - Added an option for multiple initial conditions in the IDAKLU solver.
- Fixed domain handling and temperature initialisation in the lumped thermal model.
- Fixed non-deterministic
ShapeErrorin the 3D FEM gradient method. - Fixed a bug that ignored the default duration of drive cycles for
CRatesteps. - Fixed inconsistency in the returned shape of
pybamm.DiscreteTimeSumdepending on whetheroutput_variableswas set.
- Changed behaviour of drive cycle steps in
pybamm.Experimentto treat each time point as a discontinuity. - Changed
A_cc = L_z * L_y * number of layers, altering the interpretation of electrode capacity variables. - Removed IREE code from the IDAKLU solver.
- Removed support for Python 3.9.
- OCP hysteresis models now require explicit equilibrium, delithiation, and lithiation OCPs.
v25.6 — May 2025
v25.6.0 — 2025-05-27
v25.6.0 — 2025-05-27
Features
- Renamed MSMR parameters from symbols to written-out names with units (non-breaking, with deprecation warning).
- Updated docs, examples, and tests to use
IDAKLUSolveras the recommended solver. - Added
on_extrapolationsolver option ("error","warn", or"ignore"). - Improved reliability of
CasadiAlgebraicSolverwith astep_toloption for the Newton iteration. - Sped up calculation of variable sensitivities in
ProcessedVariable.
- Fixed
QuickPlotreturning empty values for 1D variables at the beginning and end of a timespan. - Fixed
Exponential1DSubMeshnot being created correctly for non-zero minimum values.
- Removed sensitivity functionality from CasADi and SciPy solvers; only
pybamm.IDAKLUSolvercan calculate sensitivities.
v25.4 — April 2025
v25.4.2 — 2025-04-17
v25.4.2 — 2025-04-17
Bug fixes
- Improved reliability of
AlgebraicSolverand changedElectrodeSOHHalfCellsolver to a Trust-Region method.
v25.4.1 — 2025-04-16
v25.4.1 — 2025-04-16
Features
- Added “use lumped thermal capacity” option in the lumped thermal model.
- Removed an incorrect regularisation term in the harmonic mean.
- Changed default solver to
pybamm.IDAKLUSolver.
v25.4.0 — 2025-04-02
v25.4.0 — 2025-04-02
Features
- Added
axen_ocpmodule for OCP with hysteresis withininterface.open_circuit_potential. - Added
get_summary_variablesto return a dictionary of computed summary variables. - Added support for particle size distributions combined with particle mechanics.
- Added
InputParametersupport in PyBaMM experiments. - Added support for the
"pchip"interpolator using the CasADI backend.
- Added
skip_okoption tostepto allow infeasible steps to be skipped at initial conditions. - Deprecated
CrateTerminationand renamed it toCRateTermination.
- Fixed a bug with observing outputs of 2D FEM simulations.
- Fixed a bug in simulating FEM models with
IDAKLUSolver.
For older releases (v25.1, v24.x, and earlier), see the full CHANGELOG on GitHub.