<!– This file is generated from CHANGELOG.md by docs/scripts/update_changelog.jl. –>
Changelog
All notable changes to MacroEnergy.jl will be documented in this file.
The format is based on Keep a Changelog, and this project follows Julia package versioning through Project.toml releases.
[Unreleased]
[0.2.5] - 2026-09-14
Fixed
StorageChargeLimitConstraintis now attached to aBattery's charge edge. Before, it was declared as a top-level key in the charge edge's default data instead of inside itsconstraintsdictionary, so it was silently dropped.
Migration guide
- Results change: no public API changed, but any case using a
Batteryasset could now produce different results. The charge limit (charge_flow[t] <= capacity - storage_level[t-1], scaled by the charge efficiency) was previously not included by default and is now enforced. To keep the old behavior, disable it explicitly on the charge edge:"charge_edge": {"constraints": {"StorageChargeLimitConstraint": false}}. - If you set
StorageChargeLimitConstraintas a top-level key on a charge edge, rather than inside that edge'sconstraintsdictionary, it was and still is ignored. Move it insideconstraintsfor it to take effect. StorageChargeLimitConstraintonly applies to an edge whose end vertex is the storage, i.e. the charge edge. Setting it on the discharge edge (or viadischarge_constraintsin the simple input format) has no effect.
[0.2.4] - 2026-09-10
Changed
- Skip Julia CI tests when changes are confined to
CHANGELOG.md,README.md, ordocs/, while retaining documentation builds and a consistentCI resultcheck that reports successful tests or an intentional skip.
Fixed
- Removed
[skip ci]from automated changelog commit messages so release tags pointing to those commits can trigger documentation deployment.
[0.2.3] - 2026-08-31
Documentation
- Switched documentation math rendering to MathJax3 and pinned Mermaid to 11.16.1 to avoid Mermaid 11.17's RequireJS compatibility regression.
[0.2.2] - 2026-08-05
Fixed
- Duplicate asset IDs within a system are now rejected during system generation, preventing ambiguous myopic capacity carry-over and late wide-output failures.
[0.2.1] - 2026-07-15
Changed
- Updated MacroEnergySolvers.jl version to 0.2.2
Fixed
- Fix wacc default preventing fallback to DiscountRate. Omitted
waccwas silently treated as0.0instead of falling back to the case-levelDiscountRate.
Migration guide
- Results change: no public API changed, but any case that omits an asset's
waccwill now produce different results. Previously the missingwaccdefaulted to0.0; it now falls back to the case'sDiscountRate. Cases relying on the old default will see different annualized investment costs after upgrading. To keep the old behavior, setwaccexplicitly to0.0for the affected asset(s).
[0.2.0] - 2026-05-22
Added
- Outputs can now be written to a JSON file using the
write_to_jsonmethod. This method writes to a compressed.json.gzbut also supports regular.jsonoutputs. It is not currently built into any of the run tools. - Improved JSON serialization coverage of commodities, storage, constraints, dual values, time data, solution algorithms, named tuples, JuMP containers, and special numeric values like Inf, -Inf, and NaN
Changed
- CSV asset input files can now have their
TypeandIdcolumns in any position in the file, instead of needing to be in the first two columns. TheTypeandIdcolumns are still required. run_casenow returns(case, solution)as opposed to(systems, solution). Thecaseobject contains thesystemsas well ascase-level settings.
Migration guide
- If you are using the
run_casefunction, update your code to handle the new return signature of(case, solution)instead of(systems, solution).
For example, if you previously had:
(system, solution) = run_case(@__DIR__;
optimizer=HiGHS.Optimizer,
optimizer_attributes=("solver" => "ipm", "run_crossover" => "off", "ipm_optimality_tolerance" => 1e-3)
);You should now use:
(case, solution) = run_case(@__DIR__;
optimizer=HiGHS.Optimizer,
optimizer_attributes=("solver" => "ipm", "run_crossover" => "off", "ipm_optimality_tolerance" => 1e-3)
);If you need to access the systems, you can retrieve them from the case object.
systems = case.systems[0.1.0] - 2026-04-14
Added
- Expanded result writing and postprocessing for non-served demand, storage level, curtailment, time weights, discounted and undiscounted cost outputs, and detailed cost breakdowns.
- Added full time-series reconstruction across Monolithic, Myopic, and Benders workflows through
WriteFullTimeseries. - Added
SyntheticAmmonia,SyntheticMethanol,ThermalAmmonia,ThermalAmmoniaCCS,ThermalMethanol,ThermalMethanolCCS, andOneWayTransmissionLinkassets. - Added
StorageChargeLimitConstraint, long-duration storage feasibility constraints for Benders, and additional storage safety checks. - Added Myopic restart support,
StopAfterPeriod, optional JuMP direct-model generation, optional string names, updated default HiGHS settings, and economic utilities for present-value and cash-flow calculations.
Changed
- Redesigned node supply inputs around named supply dictionaries with per-segment
price,min, andmaxvalues. - Split edge types into explicit unidirectional and bidirectional forms.
- Changed
TransmissionLinkto model bidirectional transfer; useOneWayTransmissionLinkfor one-way transfer. - Cleaned up user extension loading through the
user_additions/layout. - Renamed emissions-tracking assets to
UpstreamEmissionsandDownstreamEmissions, with compatibility aliases for older names. - Expanded documentation and tests for TimeData, timeseries outputs, retrofitting, run workflows, outputs, constraints, assets, transmission links, supply parsing, and user additions.
Removed
- Removed legacy unified output code in favor of the expanded
write_*output suite.
Fixed
- Improved Benders output parity and cost handling by performing a final operational solve for the selected planning solution.
- Fixed and improved transmission, storage, dual, cost, and documentation behavior across the release.
Migration guide
- Update node supply inputs to the named
supplydictionary format. Each supply segment should defineprice,min, andmaxvalues. Legacyprice_supplyandmax_supplyinputs are still handled, andupdate_node_supply_inputs(...)can help convert existing cases. - Review any cases using automatically generated supply segment names. Segment names now use
segment1,segment2, and so on. - Review transmission assets.
TransmissionLinkis now bidirectional by default; useOneWayTransmissionLinkwhen directionality matters. - Update any direct use of edge types to the explicit unidirectional and bidirectional edge forms.
- Update output-processing scripts that relied on the legacy unified output code. Use the expanded
write_*output functions instead. - Review models that assumed nodes did not include balance constraints by default. Nodes now have
BalanceConstraintenabled by default. - Prefer the renamed emissions assets
UpstreamEmissionsandDownstreamEmissions. Compatibility aliases remain for older names, includingFossilFuelsUpstreamandFuelsEndUse.
[0.0.3] - 2025-11-21
Added
- Added iron and steel sector assets and documentation.
- Added heat and steam sector commodities, assets, examples, and documentation.
- Added aluminum sector default real-world parameters.
- Added output support for dual values from
BalanceConstraintandCO2CapConstraint. - Added minimum retired capacity tracking and extended retrofit features to multi-stage models.
- Added Windows coverage to CI.
Changed
- Updated installation instructions, citation metadata, asset library docs, modeler debugging docs, and timeseries documentation.
Fixed
- Fixed several Windows-related path and user-additions issues.
- Fixed retrofit integer decisions, hydropower reservoir efficiency handling, documentation cross references, and Benders dual scaling behavior.
[0.0.2] - 2025-09-25
Added
- Added logging options.
- Added settings output in results.
- Added automatic Mermaid diagrams for assets.
- Added asset retrofits for single-stage cases.
- Added options to free model memory and write myopic outputs during iterations.
Changed
- Refactored output-writing utilities.
Fixed
- Fixed subcommodity loading.
[0.0.1] - 2025-08-20
Added
- Initial registered release of MacroEnergy.jl.
[Unreleased]: https://github.com/macroenergy/MacroEnergy.jl/compare/v0.2.1...HEAD [0.2.1]: https://github.com/macroenergy/MacroEnergy.jl/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/macroenergy/MacroEnergy.jl/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/macroenergy/MacroEnergy.jl/compare/v0.0.3...v0.1.0 [0.0.3]: https://github.com/macroenergy/MacroEnergy.jl/compare/v0.0.2...v0.0.3 [0.0.2]: https://github.com/macroenergy/MacroEnergy.jl/compare/v0.0.1...v0.0.2 [0.0.1]: https://github.com/macroenergy/MacroEnergy.jl/releases/tag/v0.0.1