
Dyad Release Highlights
Check out the rapidly developing capabilities of the most modern system simulation tool purpose built for AI and high performance computing.
Dyad 3.5: Advancing Multidomain Systems Modeling
Dyad 3.5 is now available and introduces many new advancements in dynamic modeling, control systems and embedded software delivery.
Upgrading from 3.4? This release has breaking changes. Recompile your own libraries after upgrading, and if you installed 3.5.0, update to 3.5.1 (released the same day), which fixes a bug. See Before You Upgrade.
Highlights at a Glance
Synchronous compiler: Engineers can now model digital controllers and other discrete-time logic in the same Dyad model
Control design and estimation: The new MPCComponents library, DiscreteComponents 0.6 and DyadControlSystems 2.6 are available as separate installs.
Dyad AI Agent v0.27.4: The agent now comes with Dyad CLI and Dyad Studio's own Julia, and keeps its Julia session across compiles, making the agent more capable than before.
Julia 1.13.2 and new library versions: The distribution upgrades from Julia 1.12.7 to 1.13.2, component libraries get upgrades with new components and fixes, and MultibodyComponents is now bundled in the distribution for faster startup when you use it.
Facade Editor: Design how your component looks when someone uses it in their own model. Set its icon from the parameter panel, and add connectors that snap into evenly spaced positions along the border. This is a new feature, so we'd love your feedback on it!
A more transparent startup: Loading the app has been cumbersome for many users, so we’ve improved this a bit. The status bar now tells you more. It names each startup step, says what failed and why, and offers a way out when Dyad cannot continue.
Dyad 3.5: Advancing Multidomain Systems Modeling
Dyad 3.5 is now available and introduces many new advancements in dynamic modeling, control systems and embedded software delivery.
Upgrading from 3.4? This release has breaking changes. Recompile your own libraries after upgrading, and if you installed 3.5.0, update to 3.5.1 (released the same day), which fixes a bug. See Before You Upgrade.
Highlights at a Glance
Synchronous compiler: Engineers can now model digital controllers and other discrete-time logic in the same Dyad model
Control design and estimation: The new MPCComponents library, DiscreteComponents 0.6 and DyadControlSystems 2.6 are available as separate installs.
Dyad AI Agent v0.27.4: The agent now comes with Dyad CLI and Dyad Studio's own Julia, and keeps its Julia session across compiles, making the agent more capable than before.
Julia 1.13.2 and new library versions: The distribution upgrades from Julia 1.12.7 to 1.13.2, component libraries get upgrades with new components and fixes, and MultibodyComponents is now bundled in the distribution for faster startup when you use it.
Facade Editor: Design how your component looks when someone uses it in their own model. Set its icon from the parameter panel, and add connectors that snap into evenly spaced positions along the border. This is a new feature, so we'd love your feedback on it!
A more transparent startup: Loading the app has been cumbersome for many users, so we’ve improved this a bit. The status bar now tells you more. It names each startup step, says what failed and why, and offers a way out when Dyad cannot continue.
Dyad 3.5: Advancing Multidomain Systems Modeling
Dyad 3.5 is now available and introduces many new advancements in dynamic modeling, control systems and embedded software delivery.
Upgrading from 3.4? This release has breaking changes. Recompile your own libraries after upgrading, and if you installed 3.5.0, update to 3.5.1 (released the same day), which fixes a bug. See Before You Upgrade.
Highlights at a Glance
Synchronous compiler: Engineers can now model digital controllers and other discrete-time logic in the same Dyad model
Control design and estimation: The new MPCComponents library, DiscreteComponents 0.6 and DyadControlSystems 2.6 are available as separate installs.
Dyad AI Agent v0.27.4: The agent now comes with Dyad CLI and Dyad Studio's own Julia, and keeps its Julia session across compiles, making the agent more capable than before.
Julia 1.13.2 and new library versions: The distribution upgrades from Julia 1.12.7 to 1.13.2, component libraries get upgrades with new components and fixes, and MultibodyComponents is now bundled in the distribution for faster startup when you use it.
Facade Editor: Design how your component looks when someone uses it in their own model. Set its icon from the parameter panel, and add connectors that snap into evenly spaced positions along the border. This is a new feature, so we'd love your feedback on it!
A more transparent startup: Loading the app has been cumbersome for many users, so we’ve improved this a bit. The status bar now tells you more. It names each startup step, says what failed and why, and offers a way out when Dyad cannot continue.
Synchronous Compiler for Discrete-Time Control
Dyad 3.5 adds a synchronous compiler. Engineers can now model digital controllers and other discrete-time logic in the same Dyad model as the continuous-time physics they control. They can simulate the two together and then compile the controller into C code for embedded hardware.
Discrete-time behavior in Dyad is built on clocks and follows the synchronous model of computation.
Engineering problems you can now solve in Dyad
Digital control design: Model a sampled-data controller (PID, state-space, transfer function) acting on an acausal physical plant, and check closed-loop performance before building hardware.
Multi-rate systems: Run a fast inner loop and a slow supervisory loop at independent rates in one model, or represent logic spread across several processors.
Signal processing and estimation: Design FIR, moving-average, median, and alpha-beta-gamma filters and tracking differentiators.
Realistic sensing effects: Include quantization, noise, and A/D effects so the controller is tested against realistic sensor data, not ideal signals.
C code generation: Export a validated controller as C code for deployment to embedded devices. The documented example is a swing-up and stabilizing controller for a Quanser rotary inverted pendulum.
Synchronous Compiler for Discrete-Time Control
Dyad 3.5 adds a synchronous compiler. Engineers can now model digital controllers and other discrete-time logic in the same Dyad model as the continuous-time physics they control. They can simulate the two together and then compile the controller into C code for embedded hardware.
Discrete-time behavior in Dyad is built on clocks and follows the synchronous model of computation.
Engineering problems you can now solve in Dyad
Digital control design: Model a sampled-data controller (PID, state-space, transfer function) acting on an acausal physical plant, and check closed-loop performance before building hardware.
Multi-rate systems: Run a fast inner loop and a slow supervisory loop at independent rates in one model, or represent logic spread across several processors.
Signal processing and estimation: Design FIR, moving-average, median, and alpha-beta-gamma filters and tracking differentiators.
Realistic sensing effects: Include quantization, noise, and A/D effects so the controller is tested against realistic sensor data, not ideal signals.
C code generation: Export a validated controller as C code for deployment to embedded devices. The documented example is a swing-up and stabilizing controller for a Quanser rotary inverted pendulum.
Synchronous Compiler for Discrete-Time Control
Dyad 3.5 adds a synchronous compiler. Engineers can now model digital controllers and other discrete-time logic in the same Dyad model as the continuous-time physics they control. They can simulate the two together and then compile the controller into C code for embedded hardware.
Discrete-time behavior in Dyad is built on clocks and follows the synchronous model of computation.
Engineering problems you can now solve in Dyad
Digital control design: Model a sampled-data controller (PID, state-space, transfer function) acting on an acausal physical plant, and check closed-loop performance before building hardware.
Multi-rate systems: Run a fast inner loop and a slow supervisory loop at independent rates in one model, or represent logic spread across several processors.
Signal processing and estimation: Design FIR, moving-average, median, and alpha-beta-gamma filters and tracking differentiators.
Realistic sensing effects: Include quantization, noise, and A/D effects so the controller is tested against realistic sensor data, not ideal signals.
C code generation: Export a validated controller as C code for deployment to embedded devices. The documented example is a swing-up and stabilizing controller for a Quanser rotary inverted pendulum.
Control Design and Estimation
Three control libraries ship in this release, one new and two updated. They are not part of the Dyad distribution, so you install them separately into the projects that need them.
MPCComponents is a new component library of linear and nonlinear model-predictive controllers and state estimators. Controllers can be exported as Julia or C code, and a purely discrete model built from these components can be exported as standalone C. The library's examples cover regulation, reference tracking, and offset-free disturbance rejection.
DiscreteComponents 0.6 adds DiscretePIDScheduled, a discrete-time PID controller in standard form whose gains K, Ti and Td are clocked input signals instead of parameters.
DyadControlSystems 2.6 adds discrete-time PID autotuning. Its results can be downloaded as controller parameter files that you apply directly to your Dyad model, and tuned gains go into the model without being copied into your Dyad source by hand. It also adds:
Noise-amplification constraint: Limit integrated measurement-noise amplification alongside peak gain.
Disk margins in structured tuning: Set disk-margin requirements for selected loops or simultaneous perturbations across multiple loops.

Control Design and Estimation
Three control libraries ship in this release, one new and two updated. They are not part of the Dyad distribution, so you install them separately into the projects that need them.
MPCComponents is a new component library of linear and nonlinear model-predictive controllers and state estimators. Controllers can be exported as Julia or C code, and a purely discrete model built from these components can be exported as standalone C. The library's examples cover regulation, reference tracking, and offset-free disturbance rejection.
DiscreteComponents 0.6 adds DiscretePIDScheduled, a discrete-time PID controller in standard form whose gains K, Ti and Td are clocked input signals instead of parameters.
DyadControlSystems 2.6 adds discrete-time PID autotuning. Its results can be downloaded as controller parameter files that you apply directly to your Dyad model, and tuned gains go into the model without being copied into your Dyad source by hand. It also adds:
Noise-amplification constraint: Limit integrated measurement-noise amplification alongside peak gain.
Disk margins in structured tuning: Set disk-margin requirements for selected loops or simultaneous perturbations across multiple loops.

Control Design and Estimation
Three control libraries ship in this release, one new and two updated. They are not part of the Dyad distribution, so you install them separately into the projects that need them.
MPCComponents is a new component library of linear and nonlinear model-predictive controllers and state estimators. Controllers can be exported as Julia or C code, and a purely discrete model built from these components can be exported as standalone C. The library's examples cover regulation, reference tracking, and offset-free disturbance rejection.
DiscreteComponents 0.6 adds DiscretePIDScheduled, a discrete-time PID controller in standard form whose gains K, Ti and Td are clocked input signals instead of parameters.
DyadControlSystems 2.6 adds discrete-time PID autotuning. Its results can be downloaded as controller parameter files that you apply directly to your Dyad model, and tuned gains go into the model without being copied into your Dyad source by hand. It also adds:
Noise-amplification constraint: Limit integrated measurement-noise amplification alongside peak gain.
Disk margins in structured tuning: Set disk-margin requirements for selected loops or simultaneous perturbations across multiple loops.

Facade Editor
Every component has two sides. The diagram is what you build inside it. The facade is what everyone else sees when they use it: its icon and the connectors they wire to. Dyad 3.5 gives the facade its own editor on the canvas. Switch the component from its diagram layer to its icon layer, then edit the facade directly.
Setting the icon. Point the component at an SVG in the project's assets folder from the parameter panel. The panel writes the icon as a dyad:// URL, so assets/pump.svg in a library named MyLibrary becomes dyad://MyLibrary/pump.svg. If Dyad cannot use the path you give it, the icon field itself says why. You can also right-click an .svg in the library's assets folder in the Explorer and choose Copy Dyad URI to copy the URL it loads under.
Placing connectors. Add connectors with the + button in the action bar. They snap into evenly spaced positions along the icon's border and align to the diagram grid, so the connections other people draw to your component run straight. Adding a connector to a border re-spaces the ones already there. Drop a connector on another to swap their positions, hold Shift to place one freely, or press Delete to remove it. Snapping applies when you drag a single connector; dragging a selection of several unsnaps the connectors in it.
Take a pump model you are about to share with your team. Before anyone opens its diagram, they see its icon, with the inlet on one side and the outlet on the other, lined up on the grid so their piping runs cleanly.

Facade Editor
Every component has two sides. The diagram is what you build inside it. The facade is what everyone else sees when they use it: its icon and the connectors they wire to. Dyad 3.5 gives the facade its own editor on the canvas. Switch the component from its diagram layer to its icon layer, then edit the facade directly.
Setting the icon. Point the component at an SVG in the project's assets folder from the parameter panel. The panel writes the icon as a dyad:// URL, so assets/pump.svg in a library named MyLibrary becomes dyad://MyLibrary/pump.svg. If Dyad cannot use the path you give it, the icon field itself says why. You can also right-click an .svg in the library's assets folder in the Explorer and choose Copy Dyad URI to copy the URL it loads under.
Placing connectors. Add connectors with the + button in the action bar. They snap into evenly spaced positions along the icon's border and align to the diagram grid, so the connections other people draw to your component run straight. Adding a connector to a border re-spaces the ones already there. Drop a connector on another to swap their positions, hold Shift to place one freely, or press Delete to remove it. Snapping applies when you drag a single connector; dragging a selection of several unsnaps the connectors in it.
Take a pump model you are about to share with your team. Before anyone opens its diagram, they see its icon, with the inlet on one side and the outlet on the other, lined up on the grid so their piping runs cleanly.

Facade Editor
Every component has two sides. The diagram is what you build inside it. The facade is what everyone else sees when they use it: its icon and the connectors they wire to. Dyad 3.5 gives the facade its own editor on the canvas. Switch the component from its diagram layer to its icon layer, then edit the facade directly.
Setting the icon. Point the component at an SVG in the project's assets folder from the parameter panel. The panel writes the icon as a dyad:// URL, so assets/pump.svg in a library named MyLibrary becomes dyad://MyLibrary/pump.svg. If Dyad cannot use the path you give it, the icon field itself says why. You can also right-click an .svg in the library's assets folder in the Explorer and choose Copy Dyad URI to copy the URL it loads under.
Placing connectors. Add connectors with the + button in the action bar. They snap into evenly spaced positions along the icon's border and align to the diagram grid, so the connections other people draw to your component run straight. Adding a connector to a border re-spaces the ones already there. Drop a connector on another to swap their positions, hold Shift to place one freely, or press Delete to remove it. Snapping applies when you drag a single connector; dragging a selection of several unsnaps the connectors in it.
Take a pump model you are about to share with your team. Before anyone opens its diagram, they see its icon, with the inlet on one side and the outlet on the other, lined up on the grid so their piping runs cleanly.

The Dyad AI Agent
One Julia session per agent, kept across compiles. The Dyad AI Agent now runs more Dyad tools through the new Dyad CLI, and it uses the same Julia as Dyad Studio. Compiling goes through the CLI as well, and it no longer restarts the agent's Julia. The agent keeps everything it has already loaded and picks up the new model with Revise. When you ask the agent to adjust a component and re-run an analysis several times in a row, each round starts from a session that already has your packages loaded.
Each agent and sub-agent has its own Julia session. Output streams into the chat as it is printed. When a Julia run is going to take a while, Ctrl+B sends it to the background and the conversation carries on.
Claude Opus 5.5 by default: New conversations now start with Claude Opus 5.5 as the default model
Opens with its workspace: The agent panel opens with its workspace, so the "enter library path" screen no longer appears at launch.
Clear runtime failures: If the agent's runtime fails to start or stops, Dyad Studio says why in the Dyad Agent output and starts fresh the next time.
Saved and condensed chats: Closing the agent pane or Dyad Studio saves the chat and stops its sub-agents first, and a condensed chat keeps everything before the condensing marker.
The Dyad AI Agent
One Julia session per agent, kept across compiles. The Dyad AI Agent now runs more Dyad tools through the new Dyad CLI, and it uses the same Julia as Dyad Studio. Compiling goes through the CLI as well, and it no longer restarts the agent's Julia. The agent keeps everything it has already loaded and picks up the new model with Revise. When you ask the agent to adjust a component and re-run an analysis several times in a row, each round starts from a session that already has your packages loaded.
Each agent and sub-agent has its own Julia session. Output streams into the chat as it is printed. When a Julia run is going to take a while, Ctrl+B sends it to the background and the conversation carries on.
Claude Opus 5.5 by default: New conversations now start with Claude Opus 5.5 as the default model
Opens with its workspace: The agent panel opens with its workspace, so the "enter library path" screen no longer appears at launch.
Clear runtime failures: If the agent's runtime fails to start or stops, Dyad Studio says why in the Dyad Agent output and starts fresh the next time.
Saved and condensed chats: Closing the agent pane or Dyad Studio saves the chat and stops its sub-agents first, and a condensed chat keeps everything before the condensing marker.
The Dyad AI Agent
One Julia session per agent, kept across compiles. The Dyad AI Agent now runs more Dyad tools through the new Dyad CLI, and it uses the same Julia as Dyad Studio. Compiling goes through the CLI as well, and it no longer restarts the agent's Julia. The agent keeps everything it has already loaded and picks up the new model with Revise. When you ask the agent to adjust a component and re-run an analysis several times in a row, each round starts from a session that already has your packages loaded.
Each agent and sub-agent has its own Julia session. Output streams into the chat as it is printed. When a Julia run is going to take a while, Ctrl+B sends it to the background and the conversation carries on.
Claude Opus 5.5 by default: New conversations now start with Claude Opus 5.5 as the default model
Opens with its workspace: The agent panel opens with its workspace, so the "enter library path" screen no longer appears at launch.
Clear runtime failures: If the agent's runtime fails to start or stops, Dyad Studio says why in the Dyad Agent output and starts fresh the next time.
Saved and condensed chats: Closing the agent pane or Dyad Studio saves the chat and stops its sub-agents first, and a condensed chat keeps everything before the condensing marker.
Parameter Panel Improvements
Choosing a type. When you declare a parameter, Dyad Studio now lets you choose its type from those in scope: the native types first, then the types of the Dyad library, your own library and its direct dependencies, grouped by library with their units. Choosing a type writes the declaration for you:
parameter A::Area
Checking the unit. Choosing a type also fills in its unit. A unit of the wrong dimension shows an inline error and disables Create and Save, so cm2 on an Area passes, and s (second) does not. A Final checkbox, unchecked by default, declares the parameter as final parameter.
Applying a parameter set to the open component. You can now apply a parameter set to the component definition you have open, not just to its sub-components. This works when your component extends another one: the parameters are applied to the parent. This is particularly useful when you have too many toml parameter files and don't want duplicate code for each.
component MANMotor extends Motor (apply "dyad://MyComponents/EngineMapMan5512-4cyl.toml") end component WärtsiläMotor extends Motor (apply "dyad://MyComponents/EngineMapWärtsilä-441-2cyl.toml", cylinders = 4) # you can override too end
Declare a Parameter | Apply a Parameter |
![]() | ![]() |
Parameter Panel Improvements
Choosing a type. When you declare a parameter, Dyad Studio now lets you choose its type from those in scope: the native types first, then the types of the Dyad library, your own library and its direct dependencies, grouped by library with their units. Choosing a type writes the declaration for you:
parameter A::Area
Checking the unit. Choosing a type also fills in its unit. A unit of the wrong dimension shows an inline error and disables Create and Save, so cm2 on an Area passes, and s (second) does not. A Final checkbox, unchecked by default, declares the parameter as final parameter.
Applying a parameter set to the open component. You can now apply a parameter set to the component definition you have open, not just to its sub-components. This works when your component extends another one: the parameters are applied to the parent. This is particularly useful when you have too many toml parameter files and don't want duplicate code for each.
component MANMotor extends Motor (apply "dyad://MyComponents/EngineMapMan5512-4cyl.toml") end component WärtsiläMotor extends Motor (apply "dyad://MyComponents/EngineMapWärtsilä-441-2cyl.toml", cylinders = 4) # you can override too end
Declare a Parameter | Apply a Parameter |
![]() | ![]() |
Parameter Panel Improvements
Choosing a type. When you declare a parameter, Dyad Studio now lets you choose its type from those in scope: the native types first, then the types of the Dyad library, your own library and its direct dependencies, grouped by library with their units. Choosing a type writes the declaration for you:
parameter A::Area
Checking the unit. Choosing a type also fills in its unit. A unit of the wrong dimension shows an inline error and disables Create and Save, so cm2 on an Area passes, and s (second) does not. A Final checkbox, unchecked by default, declares the parameter as final parameter.
Applying a parameter set to the open component. You can now apply a parameter set to the component definition you have open, not just to its sub-components. This works when your component extends another one: the parameters are applied to the parent. This is particularly useful when you have too many toml parameter files and don't want duplicate code for each.
component MANMotor extends Motor (apply "dyad://MyComponents/EngineMapMan5512-4cyl.toml") end component WärtsiläMotor extends Motor (apply "dyad://MyComponents/EngineMapWärtsilä-441-2cyl.toml", cylinders = 4) # you can override too end
Declare a Parameter | Apply a Parameter |
![]() | ![]() |
More Canvas Control
Connection hover: Hovering a connection shows every connector it joins, written as
connect(a.p, b.n, c.p), depending on which branch you hover over.
▶ Watch the video: Hovering a connection
Selectable connectors: Connectors placed in the diagram can now be selected and renamed, and dragging from them still draws connections.
▶ Watch the video: Selecting and renaming a placed connector
Array connectors: When you connect a single connector to an array connector drawn as one shape, a searchable list asks which element to connect, or whether to connect the whole array.
▶ Watch the video: Connecting to an array connector
Choosing a type. When you declare a parameter, Dyad Studio now lets you choose its type from those in scope: the native types first, then the types of the Dyad library, your own library and its direct dependencies, grouped by library with their units. Choosing a type writes the declaration for you:
parameter A::Area
Checking the unit. Choosing a type also fills in its unit. A unit of the wrong dimension shows an inline error and disables Create and Save, so cm2 on an Area passes, and s (second) does not. A Final checkbox, unchecked by default, declares the parameter as final parameter.
Applying a parameter set to the open component. You can now apply a parameter set to the component definition you have open, not just to its sub-components. This works when your component extends another one: the parameters are applied to the parent. This is particularly useful when you have too many toml parameter files and don't want duplicate code for each.

More Canvas Control
Connection hover: Hovering a connection shows every connector it joins, written as
connect(a.p, b.n, c.p), depending on which branch you hover over.
▶ Watch the video: Hovering a connection
Selectable connectors: Connectors placed in the diagram can now be selected and renamed, and dragging from them still draws connections.
▶ Watch the video: Selecting and renaming a placed connector
Array connectors: When you connect a single connector to an array connector drawn as one shape, a searchable list asks which element to connect, or whether to connect the whole array.
▶ Watch the video: Connecting to an array connector
Choosing a type. When you declare a parameter, Dyad Studio now lets you choose its type from those in scope: the native types first, then the types of the Dyad library, your own library and its direct dependencies, grouped by library with their units. Choosing a type writes the declaration for you:
parameter A::Area
Checking the unit. Choosing a type also fills in its unit. A unit of the wrong dimension shows an inline error and disables Create and Save, so cm2 on an Area passes, and s (second) does not. A Final checkbox, unchecked by default, declares the parameter as final parameter.
Applying a parameter set to the open component. You can now apply a parameter set to the component definition you have open, not just to its sub-components. This works when your component extends another one: the parameters are applied to the parent. This is particularly useful when you have too many toml parameter files and don't want duplicate code for each.

More Canvas Control
Connection hover: Hovering a connection shows every connector it joins, written as
connect(a.p, b.n, c.p), depending on which branch you hover over.
▶ Watch the video: Hovering a connection
Selectable connectors: Connectors placed in the diagram can now be selected and renamed, and dragging from them still draws connections.
▶ Watch the video: Selecting and renaming a placed connector
Array connectors: When you connect a single connector to an array connector drawn as one shape, a searchable list asks which element to connect, or whether to connect the whole array.
▶ Watch the video: Connecting to an array connector
Choosing a type. When you declare a parameter, Dyad Studio now lets you choose its type from those in scope: the native types first, then the types of the Dyad library, your own library and its direct dependencies, grouped by library with their units. Choosing a type writes the declaration for you:
parameter A::Area
Checking the unit. Choosing a type also fills in its unit. A unit of the wrong dimension shows an inline error and disables Create and Save, so cm2 on an Area passes, and s (second) does not. A Final checkbox, unchecked by default, declares the parameter as final parameter.
Applying a parameter set to the open component. You can now apply a parameter set to the component definition you have open, not just to its sub-components. This works when your component extends another one: the parameters are applied to the parent. This is particularly useful when you have too many toml parameter files and don't want duplicate code for each.

Enhanced Status Indicators
The Dyad Studio status bar now names each startup step as it runs: the Julia and registry checks, the language server, building the workspace and loading libraries, package installation, the first compile and the REPL warm-up. The status bar shows package installation as its own step and then the first compile, so you can tell how far along the session is.
When a step fails, the status bar tooltip says why. When Dyad cannot continue, the same status bar item offers a way forward that matches the failure: Retry, Restart Language Server or Reload Window. A failed Julia or registry check, for example, halts with Retry, while a language server that keeps crashing points you to Reload Window.
Enhanced Status Indicators
The Dyad Studio status bar now names each startup step as it runs: the Julia and registry checks, the language server, building the workspace and loading libraries, package installation, the first compile and the REPL warm-up. The status bar shows package installation as its own step and then the first compile, so you can tell how far along the session is.
When a step fails, the status bar tooltip says why. When Dyad cannot continue, the same status bar item offers a way forward that matches the failure: Retry, Restart Language Server or Reload Window. A failed Julia or registry check, for example, halts with Retry, while a language server that keeps crashing points you to Reload Window.
Enhanced Status Indicators
The Dyad Studio status bar now names each startup step as it runs: the Julia and registry checks, the language server, building the workspace and loading libraries, package installation, the first compile and the REPL warm-up. The status bar shows package installation as its own step and then the first compile, so you can tell how far along the session is.
When a step fails, the status bar tooltip says why. When Dyad cannot continue, the same status bar item offers a way forward that matches the failure: Retry, Restart Language Server or Reload Window. A failed Julia or registry check, for example, halts with Retry, while a language server that keeps crashing points you to Reload Window.
Dyad Language: a Powerful Compiler That Reports More
The compiler includes more checks in 3.5. Some connections, subscripts and clocks that compiled without a message under 3.4 are now reported. There is also a silent change: a parameter passed down from a parent, as in inner = Inner(d = pd), is now bound to the parent. instead of only taking its value as a starting point. . Before You Upgrade covers each change.
The compiler also catches and reports more mistakes in general, and shows more of them in the editor where you make them: analysis points that do not resolve, expressions of the wrong shape, nested connections that do not fit, and connector modifications whose value has the wrong type.
1. Enum doc strings in the REPL. Doc strings written on an enum and on its cases reach the generated Julia. In the REPL's help mode, ?MyEnum shows the enum's doc string and ?MyEnum.Case shows a case's doc string.
2. apply in an analysis's extends clause. Dyad 3.4 introduced apply in a component's extends clause. In 3.5, apply also works in an analysis's extends clause, in the same form:
extends Base(apply "params.toml")
A modification written after the apply overrides the value from the file, with a warning.
Dyad Language: a Powerful Compiler That Reports More
The compiler includes more checks in 3.5. Some connections, subscripts and clocks that compiled without a message under 3.4 are now reported. There is also a silent change: a parameter passed down from a parent, as in inner = Inner(d = pd), is now bound to the parent. instead of only taking its value as a starting point. . Before You Upgrade covers each change.
The compiler also catches and reports more mistakes in general, and shows more of them in the editor where you make them: analysis points that do not resolve, expressions of the wrong shape, nested connections that do not fit, and connector modifications whose value has the wrong type.
1. Enum doc strings in the REPL. Doc strings written on an enum and on its cases reach the generated Julia. In the REPL's help mode, ?MyEnum shows the enum's doc string and ?MyEnum.Case shows a case's doc string.
2. apply in an analysis's extends clause. Dyad 3.4 introduced apply in a component's extends clause. In 3.5, apply also works in an analysis's extends clause, in the same form:
extends Base(apply "params.toml")
A modification written after the apply overrides the value from the file, with a warning.
Dyad Language: a Powerful Compiler That Reports More
The compiler includes more checks in 3.5. Some connections, subscripts and clocks that compiled without a message under 3.4 are now reported. There is also a silent change: a parameter passed down from a parent, as in inner = Inner(d = pd), is now bound to the parent. instead of only taking its value as a starting point. . Before You Upgrade covers each change.
The compiler also catches and reports more mistakes in general, and shows more of them in the editor where you make them: analysis points that do not resolve, expressions of the wrong shape, nested connections that do not fit, and connector modifications whose value has the wrong type.
1. Enum doc strings in the REPL. Doc strings written on an enum and on its cases reach the generated Julia. In the REPL's help mode, ?MyEnum shows the enum's doc string and ?MyEnum.Case shows a case's doc string.
2. apply in an analysis's extends clause. Dyad 3.4 introduced apply in a component's extends clause. In 3.5, apply also works in an analysis's extends clause, in the same form:
extends Base(apply "params.toml")
A modification written after the apply overrides the value from the file, with a warning.
Before You Upgrade
Dyad 3.5 contains breaking changes. Every project with its own library needs to compile it again; the remaining changes matter only if your models or code use the features named.
Recompile your library: After upgrading, run Dyad: Compile on your own library. A library compiled with 3.5 checks its Dyad dependencies when it precompiles and names any that do not match. A library compiled with an earlier version is not checked. It either fails with a
MethodErroror, with no error at all, builds the model without its parameter overrides. In that case, the model you simulate is not the one you specified.Parameters passed down from a parent are bound: In
inner = Inner(d = pd), wherepdis a parameter of the parent,dis now bound topdinstead of only starting from its value. Models that relied on the old behavior may simulate differently.Overrides in generated constructors: If your own Julia code calls a generated component's constructor, pass overrides of variables and nested sub-components in
__overrides, keyed by their dotted Dyad path. Declared parameters stay keyword arguments.Plotting backends: The bundled Plots ships without GR, FFMPEG and Latexify. The default backend is plotly, and PNG, PDF and SVG export go through PlotlyKaleido. To keep using
gr(), encode animations, or use the pgfplotsx backend, add GR, FFMPEG or Latexify to your own environment.Statistics functions backed by Rmath: The bundled StatsFuns ships without Rmath. Functions in Distributions.jl that rely on Rmath, such as the noncentral distributions, the Skellam cdf and discrete quantiles, throw an
UnavailableFunctionError.Stricter connector checks: Connectors of different definitions connect only when they match member by member: each same-named member must agree on variable or parameter, on its qualifier (an input may meet an output), on its type and on fixed array sizes. A flow no longer connects to a potential.
Unsupported subscripts:
A[i, :],A[:, i]anda[end]are now reported. They compiled before, but asA[i]anda, which is not what was written. Name each element you mean instead.Clock checks: An equation whose two sides are on different clocks is reported as an error, or as a warning when one side is a function call. Declaring a clock name a component already inherits, or inheriting one clock name from two bases, is reported as a repeated declaration.
Agent compile setting: The
dyad-studio.agentDiskCompilesetting is removed, because the agent compiles with the Dyad CLI. Errors from a compile the agent runs no longer appear in the Problems panel; the agent still sees them in full.Code loading: Analyses now load your library as a Julia package. To return to the previous behavior, set
dyad-studio.codeLoadingStrategytoincludeand restart the Julia REPL.
If you installed 3.5.0, update to 3.5.1, released the same day. It fixes a bug in launching the Dyad CLI that made every dyad command the agent ran fail, and it ships the same distribution and libraries.
Before You Upgrade
Dyad 3.5 contains breaking changes. Every project with its own library needs to compile it again; the remaining changes matter only if your models or code use the features named.
Recompile your library: After upgrading, run Dyad: Compile on your own library. A library compiled with 3.5 checks its Dyad dependencies when it precompiles and names any that do not match. A library compiled with an earlier version is not checked. It either fails with a
MethodErroror, with no error at all, builds the model without its parameter overrides. In that case, the model you simulate is not the one you specified.Parameters passed down from a parent are bound: In
inner = Inner(d = pd), wherepdis a parameter of the parent,dis now bound topdinstead of only starting from its value. Models that relied on the old behavior may simulate differently.Overrides in generated constructors: If your own Julia code calls a generated component's constructor, pass overrides of variables and nested sub-components in
__overrides, keyed by their dotted Dyad path. Declared parameters stay keyword arguments.Plotting backends: The bundled Plots ships without GR, FFMPEG and Latexify. The default backend is plotly, and PNG, PDF and SVG export go through PlotlyKaleido. To keep using
gr(), encode animations, or use the pgfplotsx backend, add GR, FFMPEG or Latexify to your own environment.Statistics functions backed by Rmath: The bundled StatsFuns ships without Rmath. Functions in Distributions.jl that rely on Rmath, such as the noncentral distributions, the Skellam cdf and discrete quantiles, throw an
UnavailableFunctionError.Stricter connector checks: Connectors of different definitions connect only when they match member by member: each same-named member must agree on variable or parameter, on its qualifier (an input may meet an output), on its type and on fixed array sizes. A flow no longer connects to a potential.
Unsupported subscripts:
A[i, :],A[:, i]anda[end]are now reported. They compiled before, but asA[i]anda, which is not what was written. Name each element you mean instead.Clock checks: An equation whose two sides are on different clocks is reported as an error, or as a warning when one side is a function call. Declaring a clock name a component already inherits, or inheriting one clock name from two bases, is reported as a repeated declaration.
Agent compile setting: The
dyad-studio.agentDiskCompilesetting is removed, because the agent compiles with the Dyad CLI. Errors from a compile the agent runs no longer appear in the Problems panel; the agent still sees them in full.Code loading: Analyses now load your library as a Julia package. To return to the previous behavior, set
dyad-studio.codeLoadingStrategytoincludeand restart the Julia REPL.
If you installed 3.5.0, update to 3.5.1, released the same day. It fixes a bug in launching the Dyad CLI that made every dyad command the agent ran fail, and it ships the same distribution and libraries.
Before You Upgrade
Dyad 3.5 contains breaking changes. Every project with its own library needs to compile it again; the remaining changes matter only if your models or code use the features named.
Recompile your library: After upgrading, run Dyad: Compile on your own library. A library compiled with 3.5 checks its Dyad dependencies when it precompiles and names any that do not match. A library compiled with an earlier version is not checked. It either fails with a
MethodErroror, with no error at all, builds the model without its parameter overrides. In that case, the model you simulate is not the one you specified.Parameters passed down from a parent are bound: In
inner = Inner(d = pd), wherepdis a parameter of the parent,dis now bound topdinstead of only starting from its value. Models that relied on the old behavior may simulate differently.Overrides in generated constructors: If your own Julia code calls a generated component's constructor, pass overrides of variables and nested sub-components in
__overrides, keyed by their dotted Dyad path. Declared parameters stay keyword arguments.Plotting backends: The bundled Plots ships without GR, FFMPEG and Latexify. The default backend is plotly, and PNG, PDF and SVG export go through PlotlyKaleido. To keep using
gr(), encode animations, or use the pgfplotsx backend, add GR, FFMPEG or Latexify to your own environment.Statistics functions backed by Rmath: The bundled StatsFuns ships without Rmath. Functions in Distributions.jl that rely on Rmath, such as the noncentral distributions, the Skellam cdf and discrete quantiles, throw an
UnavailableFunctionError.Stricter connector checks: Connectors of different definitions connect only when they match member by member: each same-named member must agree on variable or parameter, on its qualifier (an input may meet an output), on its type and on fixed array sizes. A flow no longer connects to a potential.
Unsupported subscripts:
A[i, :],A[:, i]anda[end]are now reported. They compiled before, but asA[i]anda, which is not what was written. Name each element you mean instead.Clock checks: An equation whose two sides are on different clocks is reported as an error, or as a warning when one side is a function call. Declaring a clock name a component already inherits, or inheriting one clock name from two bases, is reported as a repeated declaration.
Agent compile setting: The
dyad-studio.agentDiskCompilesetting is removed, because the agent compiles with the Dyad CLI. Errors from a compile the agent runs no longer appear in the Problems panel; the agent still sees them in full.Code loading: Analyses now load your library as a Julia package. To return to the previous behavior, set
dyad-studio.codeLoadingStrategytoincludeand restart the Julia REPL.
If you installed 3.5.0, update to 3.5.1, released the same day. It fixes a bug in launching the Dyad CLI that made every dyad command the agent ran fail, and it ships the same distribution and libraries.

Contact Sales
Learn about Dyad, pricing, implementation, and how we can help your business
We’ll use your information to respond to your inquiry and, if applicable, classify your interest for relevant follow-up regarding our products. If you'd like to receive our newsletter and product updates, please check the box above. You can unsubscribe at any time. Learn more in our Privacy Policy.
Get a Demo
Discover how Dyad and JuliaHub can improve your modeling and simulation workflows.
Enterprise Support
Leverage our developers, engineers and data scientists to help you build new solutions.
Custom Solutions
Have a complex setup that needs a custom solution? We are here to help.

Contact Sales
Learn about Dyad, pricing, implementation, and how we can help your business
We’ll use your information to respond to your inquiry and, if applicable, classify your interest for relevant follow-up regarding our products. If you'd like to receive our newsletter and product updates, please check the box above. You can unsubscribe at any time. Learn more in our Privacy Policy.
Get a Demo
Discover how Dyad and JuliaHub can improve your modeling and simulation workflows.
Enterprise Support
Leverage our developers, engineers and data scientists to help you build new solutions.
Custom Solutions
Have a complex setup that needs a custom solution? We are here to help.
Contact Sales
Learn about Dyad, pricing, implementation, and how we can help your business
We’ll use your information to respond to your inquiry and, if applicable, classify your interest for relevant follow-up regarding our products. If you'd like to receive our newsletter and product updates, please check the box above. You can unsubscribe at any time. Learn more in our Privacy Policy.

