Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


License: MIT contributions welcome

CI Bintray


FMI4j is a software package for dealing with Functional Mock-up Units (FMUs) on the Java Virtual Machine (JVM), written in Kotlin.

FMI4j supports import of both FMI 1.0 and 2.0 for Co-simulation. For Model Exchange version 2.0 is supported.

Export of FMI 2.0 for Co-simulation is also supported.

Compared to other FMI libraries targeting the JVM, FMI4j is considerably faster due to the fact that we use JNI instead of JNA. Considering FMI-import, a significant speedup (2-5x) compared to other open-source FMI implementations for the JVM should be expected. For FMI-export FMI4j is multiple orders of magnitude faster than any existing open source alternative.

Artifacts are available through Bintray.

FMI import

class Demo {
    void main(String[] args) {
        Fmu fmu = Fmu.from(new File("path/to/fmu.fmu")); //URLs are also supported
        FmuSlave slave = fmu.asCoSimulationFmu().newInstance();

        double stop = 10;
        double stepSize = 1.0/100;
        while(slave.getSimulationTime() <= stop) {
            if (!slave.doStep(stepSize)) {
        slave.terminate(); //or close, try with resources is also supported

FMI export

Write the code
        modelName = "MyJavaSlave",
        author = "John Doe"
public class JavaSlave extends Fmi2Slave {
    private int intOut = 99;
    private double realOut = 2.0;
    private double[] realsOut = {50.0, 200.0};
    private String[] string = {"Hello", "world!"};
    public JavaSlave(Map<String, Object> args) {

    protected void registerVariables() {
        register(integer("intOut", () -> intOut)
        register(real("realOut", () -> realOut)
        register(real("realsOut", realsOut)
        register(string("string", string)

    public void doStep(double currentTime, double dt) {
        realOut += dt;

Build the FMU
Usage: fmu-builder [-h] [-d=<destFile>] -f=<jarFile> -m=<mainClass>
  -d, --dest=<destFile>    Where to save the FMU.
  -f, --file=<jarFile>     Path to the Jar.
  -h, --help               Print this message and quits.
  -m, --main=<mainClass>   Fully qualified name of the main class.

Would you rather build FMUs using Python? Check out PythonFMU!
Or would you rather simulate FMUs using C++? Check out FMI4cpp!
Need to distribute your FMUs? FMU-proxy to the rescue!

You can’t perform that action at this time.