FMU Container Builder — GUI¶
The FMU Container Builder provides a visual, node-graph interface to assemble multiple FMUs into a single FMU Container — without writing JSON or CSV files manually.
Launching the Interface¶
Or from the FMU Toolbox Launcher, click FMU Container Build.

Interface Overview¶
The interface is split into three main areas:
| Area | Description |
|---|---|
| Node Graph (left) | Visual canvas where FMU nodes and wires are displayed |
| Tree View (top-right) | Hierarchical structure of containers and FMUs |
| Detail Panel (bottom-right) | Properties of the selected node, wire, or container |
| Button Bar (bottom) | Configuration, load/save, and export actions |
Node Graph¶
The node graph is the central workspace where you visually compose your FMU container.
Adding FMU Nodes¶
There are three ways to add FMUs to the canvas:
- Drag & Drop: drag
.fmufiles from your file manager directly onto the canvas. - Right-click → Add FMU…: opens a file dialog to select one or more
.fmufiles. - Tree View → Right-click → Add FMU…: adds FMUs under a specific container in the hierarchy.
Each FMU node displays its filename as a title.
Connecting FMUs with Wires¶
To create a connection between two FMUs:
- Click and drag from the body of a node (below its title bar)
- Release on another node
- A wire is created between the two nodes
Title bar vs body
- Title bar (top strip with the FMU name): click to select or drag to move the node.
- Body (area below the title bar): drag to create a wire.
The cursor changes on hover to indicate the available action: ✥ for move, ✛ for wire creation.
Wires are directional — arrowheads indicate the data-flow direction:
- Arrow on one end → data flows in that direction (from one FMU to the other)
- Arrows on both ends → bidirectional connection (each FMU feeds the other)
The direction is determined by the port mappings configured in the Wire Details panel.
Reshaping Wires with Waypoints¶
Wires are drawn as straight-line segments. You can add waypoints to create broken lines and route wires around nodes for better readability.
| Action | How |
|---|---|
| Add a waypoint | Double-click on a wire |
| Move a waypoint | Drag the blue handle (visible when the wire is selected) |
| Remove a waypoint | Double-click on a blue handle |
You can add as many waypoints as needed. The wire becomes a polyline passing through each waypoint in order.
Visibility
Waypoint handles are only visible when the wire is selected. Click on a wire to select it and reveal its handles.
Navigating the Canvas¶
| Action | How |
|---|---|
| Pan | Middle-click drag, or Alt+Left Button drag |
| Zoom | Mouse wheel |
| Fit all | Right-click → Fit View |
| Select | Left-click on a node or wire |
| Multi-select | Rubber-band selection (left-click drag on empty space) |
| Move node | Left-click drag on a node |
| Delete | Select items, then press Del or Backspace |
Context Menu (Right-click on Canvas)¶
| Action | Description |
|---|---|
| Add FMU… | Open file dialog to add FMU nodes |
| Delete Selection | Remove selected nodes and wires |
| Fit View | Zoom to fit all nodes in the viewport |
Tree View¶
The tree view shows the hierarchical structure of your container assembly.
Root Container¶
The top-level item represents the output container FMU (default name: container.fmu). All FMU nodes and sub-containers are children of this root.
Sub-Containers¶
You can create nested containers to organize complex assemblies:
- Right-click → Add Container: creates a new sub-container under the selected item.
- Rename: right-click on a container → Rename.
- Drag & Drop: reorganize nodes and sub-containers by dragging them within the tree.
After renaming a container, the Container Details panel is refreshed immediately to reflect the new name.
Context Menu (Right-click on Tree View)¶
| Action | Description |
|---|---|
| Add FMU… | Add FMU nodes under the selected container |
| Add Container | Create a new sub-container |
| Rename | Rename a container |
| Delete | Remove a node or container (and all its contents) |
Detail Panel¶
The detail panel shows the properties of the currently selected element.
Node (FMU) Details¶
When an FMU node is selected, the detail panel shows:
- FMU name, generator tool, and step size
- Start Values table: lists all input ports with their start values
Each row in the start values table shows:
| Column | Description |
|---|---|
| Input Port | Port name (read-only) |
| Start Value | User-defined start value (editable). A gray placeholder shows the FMU's default value. |
Start Values
Leave the start value empty to use the FMU's built-in default. Enter a value to override it in the container.
Wire Details¶
When a wire is selected, the detail panel shows the variable-level mappings between the two connected FMUs.
A header label identifies the two nodes: A = first FMU, B = second FMU.
The mappings are split into two tabs, one per direction:
| Tab | Description |
|---|---|
| A → B | Output ports of A connected to input ports of B |
| B → A | Output ports of B connected to input ports of A |
Each tab contains a 2-column table:
| Column | Description |
|---|---|
| Output Port | Output variable of the source FMU (combo-box) |
| Input Port | Input variable of the destination FMU (combo-box) |
Each tab has its own Add link / Remove link buttons to manage mappings for that direction.
The arrowheads on the wire update automatically to reflect the configured directions.
Below the tabs, a global button is available:
| Button | Description |
|---|---|
| Auto-Connect | Automatically map ports that share the same name — in both directions at once |
Auto-Connect
The Auto-Connect button matches output and input ports by name in both directions — it will create A → B mappings where A has an output matching a B input, and B → A mappings where B has an output matching an A input.
Container Details¶
When a container is selected in the tree view, the detail panel shows its configuration parameters:
| Parameter | Type | Description |
|---|---|---|
step_size | text | Fixed time step (in seconds) for the container's internal solver |
mt | checkbox | Enable multi-threading (each FMU runs in its own thread) |
profiling | checkbox | Enable performance profiling of embedded FMUs |
sequential | checkbox | Force sequential execution order |
auto_link | checkbox | Automatically link ports with matching names and types |
auto_input | checkbox | Automatically expose unconnected input ports |
auto_output | checkbox | Automatically expose unconnected output ports |
auto_parameter | checkbox | Automatically expose parameter ports |
auto_local | checkbox | Automatically expose local variables |
ts_multiplier | checkbox | Add a TS_MULTIPLIER input for dynamic step size control |
Button Bar¶
Configuration¶
Click Configuration to open a popup menu with:
- Generate FMI-2 / FMI-3: choose the target FMI version for the output container.
- Verbose Mode: enable detailed logging and keep intermediate build artifacts.
- Enable Datalog: include a
datalog.txtconfiguration in the generated FMU (useful for simulation trace export).
Actions¶
| Button | Description |
|---|---|
| Load FMU Container | Load an existing FMU container (splits it and reconstructs the graph) |
| Import | Import an assembly from a JSON or CSV description file |
| Export as JSON | Export the assembly as a JSON description file |
| Save as FMU Container | Build and save the container as a .fmu file |
| Exit | Close the window (prompts if there are unsaved changes) |
During Load, Import, Export, and Save operations, a progress dialog shows execution logs in real time.
Typical Workflow¶
Step 1: Add FMUs¶
Drag and drop your .fmu files onto the canvas, or use the right-click menu.
Step 2: Connect FMUs¶
Draw wires between output and input ports. Select a wire to configure the port-level mappings in the detail panel. Use Auto-connect to speed up the process.
Step 3: Configure the Container¶
Select the root container in the tree view to set the time step and other options (multi-threading, profiling, auto-linking, etc.).
Step 4: Organize Hierarchy (Optional)¶
Create sub-containers and drag FMUs into them to build nested assemblies.
Step 5: Set Start Values (Optional)¶
Select individual FMU nodes and override input port start values as needed.
Step 6: Save¶
Click Save as FMU Container to build the final .fmu file, or Export as JSON to save the assembly description for later use with the fmucontainer CLI.
Loading an Existing Container¶
Click Load FMU Container to open an existing .fmu container. The tool will:
- Split the container to extract the embedded FMUs and the JSON description
- Reconstruct the node graph with all FMUs, wires, port mappings, and start values
- Restore container parameters (step size, multi-threading, etc.)
You can then modify the assembly and re-save it.
Importing an Assembly File¶
Click Import to load an assembly from an existing description file. Two formats are supported:
- JSON — full assembly description including container parameters, FMU list, links, start values, and sub-containers.
- CSV — routing table only (FMU list, links, inputs/outputs). Container parameters use defaults.
The tool will:
- Parse the description file using the same engine as the
fmucontainerCLI - Reconstruct the node graph with all FMUs, wires, port mappings, and start values
- Restore container parameters (from JSON) or apply defaults (from CSV)
FMU location
The .fmu files referenced in the description must be located in the same directory as the JSON or CSV file.
Unsaved Changes
If you have unsaved changes when closing the window or loading a new container, you will be prompted to confirm.