A curated list of Functional Mock-up Interface (FMI) libraries, tools and resources.
Functional Mock-up Interface (FMI) is a tool independent standard to support both model exchange and co-simulation of dynamic models. See the official FMI website for the official specification and more information about the FMI standard.
The latest (as of June 2024) stable release of the FMI 2 specification is 2.0.4
, released on 2022-12-1.
You can find the text of the FMI specification 2.0.4 at https://github.com/modelica/fmi-standard/releases/tag/v2.0.4 .
Unless noted otherwise, the tools and libraries listed are compatible with FMI 2.
Libraries to import, simulate and export FMUs (Functional Mock-up Units) that support FMI 2.
- FMI Library - C library for import of FMUs. [BSD]
- FMU SDK - C library for exporting FMUs. [BSD]
- FMI++ - C++ library for import and export of FMUs. [BSD]
- FMI4cpp - FMI 2.0 implementation written in modern C++. [MIT]
- FMU4cpp - CMake/Github Actions template project for building FMUs in C++. [MIT]
- PyFMI - Python package for loading and interacting with FMUs, based on the FMI Library. [LGPL]
- FMPy - Python package for loading and interacting with FMUs. It supports also the latest System Structure and Parameterization (SSP standard). [BSD]
- FMI++ Python Interface - Python interface for the FMI++ library. [BSD, BOOST]
- SimulatorToFMU - Python package that allows to export a memoryless Python-driven simulation program or script as a FMU. [BSD]
- modestpy - Python package for parameter estimation in FMUs. [BSD]
- PythonFMU - Framework for exporting Python code as FMUs. [MIT]
- qFMU - Generate standard LTI system FMUs through CLI [BSD]
- FMI4j - Java/Kotlin library for dealing with FMUs on the JVM platform. [MIT]
- javaFMI - Java library for import and export of FMUs. [LGPL3]
- Simulink FMU Importing/Export a Model as a Tool-Coupling FMU - Out-of-the-box official support for FMU import and export (tool coupling) in Simulink. [Commercial]
- FMI Toolbox for MATLAB/Simulink - Toolbox with support for Simulink FMU Import/Export and MATLAB FMU import. [Commercial]
- matlab-fmu - MATLAB Toolbox for Windows with support for import of FMUs for Model-Exchange and Co-Simulation as well as the export of MATLAB scripts as FMUs for Co-Simulation, based on the FMI++ library. [BSD]
- Simulix - A third-party Simulink tool to generate FMUs from Simulink models using the C-API. [GPL3]
- FMIKit-Simulink - Import and export Functional Mock-up Units with Simulink. [BSD]
- rust-fmi - A Rust interface to FMUs (Functional Mock-up Units) that follow the FMI Standard. [APACHE2/MIT]
- FMI.jl - Library which integrates FMI and permits load, instantiate, parameterize and simulate FMUs seamlessly inside the Julia programming language. [MIT]
- FMIFlux.jl - Library which offers the ability to setup NeuralFMUs, put FMUs inside any feed-forward NN topology and get a hybrid model trainable with a standard AD training process. [MIT]
For the official list of tools that support FMI 2, check http://fmi-standard.org/tools/ .
- λ-Sim - Tool that converts FMU simulation models into REST APIs. [MIT]
- Dymola - A modeling and simulation environment for Modelica, with full support for FMI. [Commercial]
- FMIGo! - A set of tools for dealing with the FMI and SSP standards. [MIT]
- FMITerminalBlock - Two way interface between the FMI and IEC 61499-based controllers. [BSD]
- FMU-proxy - Framework that allows Functional Mock-up Units (FMUs) to be accessed through language independent RPC calls and that permits to transform a co-simulation FMU into a proxified version of the same FMU, so that each FMU can run in a separate process. [MIT]
- Unity-FMI-Addon - FMI support for Unity, a cross-platform game engine. [BSD]
- ROS fmi_adapter - FMI support for ROS, a flexible framework for writing robot software. [APACHE2]
- fmi_adapter_ros2 - FMI support for ROS2, the new version of the Robot Operating System. [APACHE2]
- fmu-viewer - A simple FMU viewer in the browser
The latest (as of June 2024) stable release of the FMI 3 specification is 3.0.1
, released on 2023-07-10 .
You can find the text of the FMI specification 3.0.1 at https://fmi-standard.org/docs/3.0.1/ .
General information on the FMI 3.0 feature list can be found in https://fmi-standard.org/faq/ .
Some of the projects listed in the previous section also support for FMI 3 :
- Examples:
- Reference-FMUs :
3.0
examples FMUs are available, including examples for new co-simulation features such as scheduled co-simulation and early return in co-simulation. - PMSFIT/FMI30TestFMUs : Some examples FMUs based on the FMI 3.0 specification are available, including features such as binary variables.
- Reference-FMUs :
- Modelica:
- Dymola - support for FMI
3.0
is available, including arrays, terminals, icons, event mode and early return.
- Dymola - support for FMI
- Python:
- fmpy - support for FMI
3.0
is available.
- fmpy - support for FMI
- Julia:
- FMI.jl - experimental support for FMI
3.0
is work in progress
- FMI.jl - experimental support for FMI
- Simulink:
- FMIKit-Simulink - support for export of FMU
3.0
is available.
- FMIKit-Simulink - support for export of FMU
- Formal models
- FMI-VDM-Model - VDM formal models for the FMI3.0 specification.
- Stack Overflow - Questions related to FMI in Stack Overflow.
- Twitter's FMI Info and News - Unofficial news account about the FMI Standard, FMI usage and FMI tools.
- LinkedIn FMI Group - Open group to spread news and discuss topics w.r.t. FMI.
Contributions are welcome! Read the contribution guidelines first.