Piecewise-linear investment costs, marginal costs and efficiencies.
Catch inconsistent inputs for better and earlier user feedback.
A new network format, faster than today's netCDF, that loads data lazily, reads only what is needed and supports streaming.
Automatic scaling to improve the model's numerical conditioning, solver stability and speed.
Define constraints and models in a text-based format, without the need for scripting.
Any network object can be saved and loaded back identically, with no state lost, including custom constraints, solver metadata and geospatial data.
Technological learning modelled endogenously via piecewise-linear constraints, so costs fall with deployment.
Schedule optimal maintenance windows for components (e.g. generators, links) with contiguous downtime blocks, partial outages, and multiple events in a year.
Separate physical components (e.g. generators, lines) from shared properties (e.g. carriers) and allow custom-defined properties.
An extended and more performant unit commitment formulation considering a wider set of operational constraints.
Mix different snapshot resolutions per bus or carrier within a single model to save computation time.
A new module for uncertainty quantification and global sensitivity analysis.
Launch a local dashboard straight from PyPSA, powered by the PyPSA App, to explore, visualise and analyse networks with statistics, plots and interactive maps.
New multi-port Process component with explicit conversion rates.
Weighted time-delays for Link and Process component outputs.
New n.cluster.temporal.* accessor to aggregate snapshots into representative periods.
Components can now be committable and capacity-extendable at the same time.
New secant-based approximation of transmission losses with configurable tolerances, alongside the existing tangent method.
Specify overnight investment cost and fixed O&M separately and let PyPSA annuitise them at solve time, with dedicated cost statistics for reporting.
PyPSA is now stable. Upgrades within 1.x won't break your code, and breaking changes wait for the next major version with deprecation warnings first.
Two-stage stochastic optimisation across weighted scenarios.
n.explore() now returns PyDeck maps supporting all static-plot options, exportable to self-contained HTML.
Optimisation model rebuilt on an xarray view that spans all dimensions at once, enabling cleaner problem formulation.
Solve modelling-to-generate-alternatives along chosen directions in user-defined coordinate space, with a parallelised multi-direction sweep.
Conditional Value-at-Risk objective for risk-averse optimisation.
Interactive equivalent of every statistics plot via plotly.
Experimental NetworkCollection holds many Network objects in one container for comparison.
New component class layer moving component data off the Network object, easing future features.
New n.optimize.expressions module builds constraint expressions with the same grouping and filtering as the statistics module.
New active attribute toggles assets in or out of optimisation, power flow and statistics as a global filter.
n.explore() opens interactive folium/geopandas network maps.
The open-source HiGHS solver is now PyPSA's default.
The old Pyomo and nomopyomo LOPF implementations were removed.
New n.merge() (also n + m) combines the components and time series of two networks into one.
New n.shapes component to attach geographic geometries to a network.
Discrete, modular (block-size) capacity expansion for components.
Solve long time series in sequential overlapping windows.
MGA explores near-optimal solution spaces beyond the single least-cost result.
Refactored clustering exposed on the network via n.cluster.* with consistent strategies and better performance.
Quadratic marginal cost terms for generators, links, stores and storage units (needs a QP-capable solver).
Statistics module gains energy balances, dispatch, time series and market values per bus.
The legacy n.lopf() is deprecated in favour of the Linopy-based n.optimize(), with a migration guide.
Piecewise-linear approximation of transmission losses in the LOPF.
Linear relaxation of unit commitment for faster large-scale solves.
New n.optimize() built on Linopy — faster model build and a cleaner extra-functionality API.
New n.statistics module for system metrics like capex, opex, capacity and curtailment.
Hierarchical agglomerative clustering (HAC) for spatial network aggregation.
Investment optimisation across multiple periods/decades.
Pyomo-free LOPF gains custom objective terms via extra_functionality and parsed shadow prices.
In-house LOPF framework (pyomo=False) cutting memory use and solve time for large networks.
Non-linear power flow can spread the slack across many generators by dispatch or custom weights instead of a single slack bus.
Links with multiple outputs at fixed ratios, e.g. CHP units producing both power and heat.
New s_max_pu caps passive-branch flow as a share of rating — usable as an n-1 contingency factor or time-varying dynamic line rating.
New n.madd() adds many components at once, far faster than repeated n.add() calls.
Export and import whole networks as single HDF5 files via n.export_to_hdf5() / n.import_from_hdf5().
New GlobalConstraint component for system-wide limits such as CO₂ emissions.
MILP unit commitment for generators: binary online status, minimum part loads, min up/down times, start-up and shut-down costs.
Ramp-up and ramp-down rate limits implemented for all generators.
Mathematically-equivalent cycle-flow LOPF formulations solving up to 20× faster than the angle-based formulation.
Built-in pandapower-based standard types — set a type and length instead of computing electrical parameters by hand.
More accurate T-model equivalent circuit with discrete tap steps and consistent phase-shift handling.
Any component attribute can be static or vary per snapshot, storing only the columns that change — the time-series foundation for the whole framework.
New fundamental Store component for energy storage, inheriting the carrier of its bus.
Link-based models for CHP, heat pumps, resistive power-to-heat, power-to-gas and battery electric vehicles.
New controllable directed Link component — the primitive behind power-to-X and sector coupling.
Generic bus carrier attribute (heat, gas, …) replacing AC/DC-only buses, enabling multi-energy networks.
N-1 security-constrained optimisation keeping the network feasible under single-element outages.
Full non-linear Newton-Raphson AC power flow and fast linear power flow over the network — the analysis core PyPSA is named for.
The first commit of Python for Power System Analysis.