All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Note: This is the Changelog file of opengen - the Python interface of OpEn
0.11.0 - 31 March 2026
- ROS2 package generation support via
BuildConfiguration.with_ros2(...), including auto-generated ROS2 templates, launcher, messages, and package wrapper code - Dedicated ROS2 tests covering package generation, build configuration behavior, rendered custom package settings, and end-to-end execution of a generated ROS2 node
- More informative TCP solver error payloads, including clearer dimension/parameter validation failures and propagated solver-side failure messages
- Additional unit tests for
BuildConfiguration,OcpSolution,AffineSpace,RosConfiguration, andSetYCalculator, increasing Python coverage to 93%
- Extended
RosConfigurationso it can be used for both ROS and ROS2 package generation - Breaking change: the direct interface (Python bindings) now has an API which mirrors that of the TCP interface: the method
solvereturns either a solution or an error object. Website documentation is updated. New unit tests are implemented. Note thatsolver.run()does not return the solution object directly, but rather works in the same way as the TCP interface: it returns a response object (instance ofSolverResponse), on which the method.get()returns either aSolverStatusorSolverError. - Added helpful
__repr__methods to generated Python binding response/status/error objects, TCP solver response/error objects, andGeneratedOptimizerfor easier inspection and debugging - Updated generated TCP server and C interface templates to work with the richer Rust solver error model and expose better failure information to clients. Updated auto-generated
CMakeLists.txtfile. Tighter unit tests. - ROS2 generated packages now publish detailed
error_codeanderror_messagefields, plusSTATUS_INVALID_REQUEST, so invalid requests and solver failures are reported explicitly instead of being silently ignored - Extended GitHub Actions CI to run Python, OCP, and generated-code tests on Windows, and fixed multiple Windows-specific code generation, path, encoding, TCP, and C/CMake compatibility issues.
- ROS/ROS2 messages: using
uint64instead ofuint8to avoid overflow - Tighter checks of provided arguments in build configuration
- Added
pytestto the optionaldevdependencies and documented local test, benchmark, and coverage workflows for Python and Rust contributors - Restructured folder structure of entire repo: opengen moved to folder
python
- Generated ROS and ROS2 wrappers now accept any meaningful positive
initial_penaltyinstead of requiring values greater than1.0 - Generated ROS and ROS2 result messages now use wide iteration counters so
inner_iterationsandouter_iterationscannot overflow - ROS2 generated packages now use
uint16forerror_code, matching the current positive error-code range while keeping the wire format compact - MATLAB-related Python docs now reference the new
python/package layout instead of the removedopen-codegen/path - ROS2 integration tests now clean stale nested
colconbuild artifacts and preserve the active shell environment more reliably in micromamba/conda setups - Fixed issues in
__init__.py: lazy imports and discoverability - Now checking whether the constraints have the correct dimension before attempting to build an optimizer
0.10.1 - 2026-03-25
- Introduced
pyproject.tomlfor packaging the Python library; constrained the versions of dependencies therein
0.10.0 - 2026-03-19
- New high-level
opengen.ocppackage for constructing optimal control problems from dynamics, stage/terminal costs, named parameters, and OCP-oriented constraints - Support for both single-shooting and multiple-shooting formulations, including penalty- and ALM-based constraint lowering
GeneratedOptimizerwrapper withsolve(x0=..., xref=...)API and persistent optimizer metadata viaoptimizer_manifest.jsonplusrollout.casadi- Continuous-time dynamics discretization helpers in
opengen.ocp.DynamicsDiscretizer, including Euler, midpoint, Heun, RK4, and multistep discretizations - Extended
OcpSolutionwith solver diagnostics such as cost, penalty, iteration counts, infeasibility, fixed-point residual, and Lagrange multipliers - Detailed documentation available here, incl. Google Colab notebooks, and updated API docs
- Changed the default penalty weight update factor to
1.75 - Added and refined OCP documentation, docstrings, notebook examples, and automated tests
- Improved readability of printed OCP solver results
- Avoid duplicate builder log messages by disabling propagation to the root logger
- Use reliable package version lookup when recording the installed CasADi version in optimizer manifests
- Check valid version in
with_version
0.9.6 - 2026-03-14
- Clippy fixes (minor)
0.9.5 - 2026-03-10
- Removed dependence on
pkg_resources(issue #380) - Additional unit tests: increased coverage to 92%
0.9.4 - 2025-05-08
- Fixed issues with cross compilation (each sub-project has its own
.cargo/config.toml) and updated documentation
- Rename auto-generated bindings file from
.cargo/configto.cargo/config.toml(backwards compatible change) - Updated min cmake version from 2.8 to 3.5
- Updated auto-generated example C/C++ bindings
0.9.3 - 2024-12-06
- Email alias in
setup.py
0.9.2 - 2024-11-05
- In CasADi-generated C files some functions are made static to avoid clashes when creating multiple solvers
0.9.1 - 2024-10-14
- Handling kill code in TCP server interface to get rid of warning
0.9.0 - 2024-08-15
- Support for affine spaces in code generation (see
opengen.constraints.AffineSpace) - TCP solver status can be printed
0.8.1 - 2024-07-17
- Python direct interface support for ARM-based Macs
- Updated GitHub Actions to use the macos-latest runner
- Updated GitHub Actions to use Python3.12 (required for above)
0.8.0 - 2024-03-20
- Code generation support for Sphere2
0.7.1 - 2022-02-14
- Method
.buildreturns a dictionary with information that can assist debugging
- Default argument in
.with_preconditioning - Updated all docstrings to be sphinx-compatible
- New API docs
0.7.0 - 2022-10-11
- Code generation and support for preconditioning
0.6.13 - 2022-8-12
- Removing timestamps from auto-generated files
- Removing random strings from function names (no mangling)
0.6.12 - 2022-8-8
- Got rid of Rust warnings for generated code
0.6.11 - 2022-3-10
- Changed f-strings (
f"{variable}") to.formatfor python3.5 compatibility - Fixed typo in
tcp_server.rs
0.6.9 - 2022-1-24
- Forced use of clap v2 because migration required for v3
0.6.8 - 2021-12-3
- Fixed bug in python code file generation for Windows users
0.6.7 - 2021-11-1
- Support for simplices and ell1 balls via code generation
0.6.6 - 2021-10-27
- Support for
rpmallocandjemallocusingBuildConfiguration.with_allocator - Implementation/testing of projection on simplices (
simplex.py) (addresses #234) - Implementation/testing of projection on Ball-1 (
ball1.py) (addresses #238) # Safetysection in auto-generated unsafe auto-generated Rust code
- Unnecessary
#[no_mangle]s in auto-generated Rust code
- Took care of most clippy warnings in Rust and auto-generated Rust code
0.6.5 - 2021-04-16
- Include
VERSIONfile inMANIFEST.in(included in Python package) - Bump versions:
cbindgen:0.8 --> 0.20.*andlibc:0.2.0 -> 0.2.*
0.6.4 - 2020-10-21
- Accessing Rust from Python directly using PyO3
- List of authors in
Cargo.tomlis generated properly - Fixed bug when curvature is zero
enable_tcp_interfacepreviously gave aDeprecationWarning; now it raises it. In a future version, it will be removed.
0.6.3 - 2020-10-06
- Fixed bug #210: Cartesian products in code generation
- Fixed bug #211:
OptimizerTcpManagerand remote connections
0.6.2 - 2020-09-27
- Fixed issue with TCP connections in Release mode (PR #206)
0.6.1 - 2020-09-10
OptimizerTcpManager: ip and port can be set dynamically
0.6.0 - 2020-09-03
- Support for half-spaces in problem constraints
- Added checks for
segmentsinCartesianProduct
- Dropping first argument in
Cartesian(dimension) as it is unnecessary - Documented class
CartesianProduct - Dropped
dimensionfrom constructor ofCartesianProduct(breaking change)
- Issue #185: ROS config parameters are ignored
0.5.0 - 2020-05-12
- Prevent multiple log messages from printing
- Check if TCP port is available before starting server
- Auto-generation of ROS packages
- Cost value at solution is returned
- Reorganised template files into folders
0.4.1 - 2020-04-13
- Project-specific
icasadidependency - Project-specific
tcp_ifaceTCP interface - Fixed
lbfgstypo