R2026a

New Features, Bug Fixes, Compatibility Considerations

 New Simulink context menus prioritize frequently used functionality

In R2026a, the context menus that appear when you right-click the Simulink® model canvas or model elements such as blocks, signal lines, and annotations are changing. This image shows the differences between the context menu that opens when you right-click a Constant block in R2025b and the context menu that opens when you right-click the same block in R2026a.

On the left is the context menu that opens when you right-click a Constant block in R2025b, and on the right is the same menu in R2026a. The R2026a context menu is more compact than the R2025b context menu and contains buttons, clickable text options, and a text box.

In addition to conventional menu items, the R2026a context menu design includes interactive elements such as buttons, text boxes, radio buttons, check boxes, and drop-down lists. To view a tooltip that describes the action you can take by pressing a button, pause your pointer on the button icon.

The Constant block context menu is open, and a pointer is paused on the Properties button. A tooltip displays Properties.

This table lists some of the common buttons in the context menus of blocks.

ButtonTooltip
Model Data Editor buttonModel Data Editor
Referenced Variables buttonReferenced Variables
Open in Model Explorer buttonOpen in Model Explorer
Explain with Simulink Copilot buttonExplain with Simulink Copilot
Block Parameters buttonBlock Parameters
Properties buttonProperties
Comment Out buttonComment out the block.
Comment Through buttonComment through the block.
Uncomment buttonUncomment the block.
Cut buttonCut
Copy buttonCopy
Paste buttonPaste

For a tooltip showing a list of all the actions that you can take by pressing the buttons in a button row, click the name of the button row. For each button, the tooltip shows the button icon followed by a description of the button action. When there is only one button in a button row, clicking the name of the button row presses the button instead of opening a tooltip.

The Constant block context menu is open, and a pointer is paused on the Explore button row. A tooltip displays "Available actions in this row: Model Data Editor, Referenced Variables, Open in Model Explorer". Each option the tooltip displays is preceded by the corresponding button icon.

To open the help documentation, in the upper right corner of the context menu, click the Open help documentation button .

You can find formatting options in the format bar, for example, options to change fonts and colors, show or hide block names, show or hide the content preview of a subsystem, and auto-arrange the model. You can also find clipboard options such as copy and paste there. To expand or collapse the format bar, click the arrow button at the top of the context menu.

The Constant block context menu is open and the format bar is expanded.

You can set the values of certain parameters and properties directly in the context menu using text boxes, radio buttons, check boxes, and drop-down lists. For example, to set the value of a Constant block, right-click the block, and in the Value box, enter the new value.

The Constant block context menu is open, and in the text box labeled Value, the value 2.5 is entered.

To add information overlays such as units or execution order to a model, right-click the model canvas and pause your pointer on Information Overlays. Then, select an overlay option.

Top Model context menu with Information Overlays gallery expanded

In R2025b, you could access options that belong to an app such as the HDL Coder™ app or the Polyspace® Code Verifier app through menu items such as HDL Code or Polyspace. In R2026a, app-specific options are located in app sections. App sections are not shown by default. To access app-specific options, you must add the relevant app section to the context menu.

For example, this image highlights the options in the R2025b Constant block context menu that you can access in R2026a by adding app sections.

The context menu that opens when you right-click a Constant block in R2025b (left) and R2026a (right), with the options belonging to apps highlighted in the R2025b version of the menu, and the Select Apps row highlighted in the R2026a version of the menu

To add an app section to the context menu, pause your pointer on Select Apps, and then select the app. When you add an app section, the same app windows and toolstrip tabs open as when you click the app icon on the Apps tab in the Simulink Toolstrip. Alternatively, open the app from the Simulink Toolstrip. When you open an app, the corresponding app section appears in the context menu.

A pointer right-clicks the model canvas. The Top Model context menu appears. The pointer pauses on Select Apps, then on HDL Coder. In the context menu, a new section containing options specific to HDL Coder appears. The section outline flashes yellow three times.

If you are unsure whether a menu option you use is part of an app, or you know the option is part of an app but are unsure of which app, check this table. The table lists the apps associated with some of the most common R2025b context menu items.

R2025b Context Menu ItemApp
C/C++ CodeEmbedded Coder button Embedded Coder
Flip Simulink Coder button Simulink Coder
CoverageCoverage Analyzer button Coverage Analyzer
Design VerifierDesign Verifier button Design Verifier
Fixed-Point ToolFixed-Point Tool button Fixed-Point Tool
HDL Code

HDL Coder button HDL Coder

Identify Modeling ClonesClone Detector button Clone Detector
Linear Analysis PointsLinearization Manager button Linearization Manager
Metrics DashboardThe options for this app are no longer available in the context menu.
Model AdvisorModel Advisor button Model Advisor
Model SlicerModel Slicer button Model Slicer
Model TransformerThe options for this app are no longer available in the context menu.
ObserversSimulink Test button Simulink Test
PLC CodePLC Coder button PLC Coder
Polyspace

Polyspace Code Verifier button Polyspace Code Verifier

Requirements or Requirements at This LevelRequirements Manager button Requirements Manager
Requirements Viewer button Requirements Viewer
Test Harness

Simulink Test button Simulink Test™

You can add multiple app sections. To add another app section, pause your pointer on Select Apps again, and select a different app.

In the model in which you add an app section, the app section appears in all context menus and persists across Simulink sessions. For example, if you right-click a block and add an app section, and then right-click a signal line in the same model, the signal line context menu also shows the app section you added. However, if you open a context menu in a different model, the context menu does not show the app section. If you open a context menu when none of the actions of an app section are available, the context menu might not show the app section.

To collapse an app section, click the down arrow button in the upper left of the app section. To expand the app menu section, click the arrow again.

To remove an app section from the context menu, pause your pointer on the app icon at the left edge of the app-specific section and click Close App. Alternatively, pause your pointer on Select Apps, and then cancel the app selection. You can also collapse the app section and then click the X on the right.

In addition to adding and removing app sections, you can also customize the context menus with the new design by adding widgets or disabling widget actions. For information, see Customize Simulink Context Menu Using Extension Points.

For lookup tables showing how you can access R2025b context menu options in R2026a, see Find Simulink Context Menu Options. The tables cover the options in the context menus of Constant blocks, top level models, signal lines, and text annotations. For a list of options that are no longer available in the Simulink context menus going forward, see Options that have been removed from Simulink context menus.

Move blocks in and out of subsystems using Simulink Toolstrip

Starting in R2026a, when you select multiple blocks on the Simulink canvas, you can use the Move In and Move Out buttons on the Simulink Toolstrip to move the blocks into or out of a subsystem. If the selected blocks are connected to a subsystem, use the Move In button to move the blocks into the subsystem. If the selected blocks are inside a subsystem, use the Move Out button to move the blocks up one level from the subsystem. This allows you to reorganize the model while preserving signal connections and block properties after refactoring. This feature eliminates the need to manually move blocks in or out of the subsystem when required.

The Move In and Move Out buttons appear in the Move section of the Multiple tab of the Simulink Toolstrip. Alternatively, you can use the context menu for move operations. Right-click the selected blocks and select Move > Move In to move blocks into a subsystem, or Move > Move Out to move blocks up one level. You can undo (Ctrl+Z) and redo (Ctrl+Y) the move operation to reverse or restore any changes.

For more information, see Move Blocks Into and Out of Subsystems.

Animated image. In the image, there is a subsystem called CSTR. A Constant block named FeedTemp0 and a masked subsystem named FeedCon0 are connected to this subsystem. The pointer selects both the Constant block and the masked subsystem. The Multiple tab appears in the toolstrip. In the Multiple tab, the pointer clicks the Move In button, moving the two blocks into the CSTR subsystem. Next, the pointer selects the Constant block and masked subsystem again. In the Multiple tab, the pointer clicks the Move Out button, moving the two blocks out of the CSTR subsystem.

The Simulink Environment: Self-paced, interactive course available as part of Online Training Suite subscription

The Simulink Environment is a new course that teaches you to:

  • Use block diagrams and MATLAB® code to model and simulate algorithms.

  • Configure how models run using callbacks.

  • Visualize simulation outcomes.

  • Manage simulation data and exchange data with Simulink.

For more information, see The Simulink Environment.

Model Dynamic Systems: Self-paced, interactive course available as part of Online Training Suite subscription

Model Dynamic Systems is a new course that teaches you to:

  • Model continuous and discrete dynamic systems from mathematical models using differential and difference equations, transfer functions, and state-space representations.

  • Represent physical boundaries and multiple sample rates.

For more information, see Model Dynamic Systems.

Access course readings, videos, and quizzes without product licenses

You can now open a course even if you do not have licenses for all products used by the course. Learning activities such as readings, videos, and quizzes no longer require a product license. To open a Simulink exercise, you must have licenses for all products used by the exercise.

For more information, see Simulink Online Courses.

Save copy of model from the Simulink Editor

You can now save a copy of your model from the Simulink Editor. On the Simulation tab, select Save > Save Copy As. When you use this option, Simulink saves the copy of the file in the specified folder, but it does not replace the model in your current session.

Simulink Preferences has been renamed Simulink Settings

Simulink Preferences has been renamed Simulink Settings. Use Simulink Settings to specify Simulink editing environment options and default behaviors. To open Simulink Settings, in the Simulink Toolstrip, on the Modeling tab, in the Evaluate and Manage section, select Environment > Simulink Settings.

Simulink Editor is open on the Modeling tab with the Environment list expanded to show the Simulink Settings option

Model Finder: Added support to share and reuse model databases for team collaboration

Previously, to share a Model Finder database, you had to share the database file with team members, who would then manually import it in their settings folder using the Model Finder user interface (UI). Starting in R2026a, you can directly share and reuse model databases by using a shared repository and customizing the Model Finder UI with the MATLAB sl_customization function. By registering the customizations programmatically, you only need to do a one-time setup to access shared databases.

To set up a shared database, use Model Finder to create a database containing information of project related Simulink models. Store this database in a shared repository, such as a file server, cloud storage, or source code management (SCM) system.

To access the shared database, team members have to specify a customization to import the database to their Model Finder in the sl_customization.m file. After importing, the shared database appears in the Model Finder UI, and team members can search for models in the database.

To import the shared database wireless_systems.db from a shared repository and assign it the alias Shared Database, specify this customization in the customization file. Use the ModelFinderCustomizer class function on the customization manager object cm to specify the customization.

function sl_customization(cm)
dbPath = fullfile("simulink","modelfinderdatabases","wireless_systems.db");
cm.ModelFinderCustomizer.importDatabase(dbPath,“Shared Database”);
end

Workflow to create, share, and reuse Model Finder databases.

For more information, see Configure, Share, and Search Databases.

Change to default equation font

Starting in R2026a, equations on the Simulink canvas might display a modified default font due to an upgraded equation rendering engine. Additionally, on the Windows® operating system, user interface elements such as the Property Inspector now use the Windows system font, by default.

 Functionality being removed or changed

Simulink Fundamentals course will be discontinued

Warns

The Simulink Fundamentals course will be discontinued. You will be unable to start or continue this course after it is discontinued. Course progress and certificates will still be available.

To develop a broad skill set across core Simulink functionality, take these new courses instead:

These new courses provide the same material and more.

Options that have been removed from Simulink context menus

In R2026a, the context menus that appear when you right-click the Simulink model canvas or model elements such as blocks, signal lines, and annotations are changing. To maximize the compactness of the new context menus and the convenience of accessing frequently used options, some options have been removed from the context menus. The tables list some of these options and alternative ways to take the associated actions.

Block Context Menu

R2025b Context Menu ActionAction in R2026a
Right-click the block and select Find Referenced Variables.

Navigate into the model or component whose referenced variables you want to find. Right-click the canvas, and then click the Referenced Variables button .

Right-click the block and select Format > Flip Block Name.Select the block. In the Simulink Toolstrip, on the Format tab, click Flip Name.
Right-click the block and select Format > Fit to Content.Select the block. In the Simulink Toolstrip, on the Format tab, click Fit to Content.

Right-click any type of block representing a subsystem, for example an If Action Subsystem block, and select one of these options:

  • Format > Port Labels > None

  • Format > Port Labels > From Port Icon

  • Format > Port Labels > From Port Block Name

  • Format > Port Labels > From Signal Name

Select any type of block representing a subsystem, for example an If Action Subsystem block. In the Simulink Toolstrip, on the Format tab, in the Ports section, click the Port Labels button and select one of these options:

  • None

  • From Port Icon

  • From Block Name

  • From Signal Name

Right-click the block and select Format > Bring to Front.Select the block. In the Simulink Toolstrip, on the Format tab, click the Bring to front button .
Right-click the block and select Format > Send to Back.Select the block. In the Simulink Toolstrip, on the Format tab, click the Send to back button .

Top Model Canvas Context Menu

R2025b Context Menu ActionAction in R2026a
Right-click the model canvas and select Sample Time > All.Right-click the model canvas and select Information Overlays. Then, select all overlays under Sample Time.
Right-click the model canvas and select Sample Time > Off.Right-click the model canvas and select Information Overlays. Then, clear all overlays under Sample Time
Right-click the model canvas and set Animation Speed to Fast, Medium, Slow, or None.In the Simulink Toolstrip, on the Debug tab, set Animation speed to Fast, Medium, Slow, or None.

Annotation Context Menu

R2025b Context Menu ActionAction in R2026a
Right-click the annotation and select Format > Bring to Front.Select the annotation. In the Simulink Toolstrip, on the Format tab, click the Bring to front button .
Right-click the annotation and select Format > Send to Back.Select the annotation. In the Simulink Toolstrip, on the Format tab, click the Send to back button .

Right-click the annotation and select one of these options:

  • Text Alignment > Left

  • Text Alignment > Center

  • Text Alignment > Right

Right-click the annotation, and then click the Properties button . In the Annotation Properties dialog box, from Alignment, select one of these options:

  • Left

  • Center

  • Right

Right-click the annotation and select Enable Tex Commands.

Right-click the annotation, and then click the Properties button . In the Annotation Properties dialog box, select Enable TeX commands.

Right-click the annotation and select Show in Library Browser.Select the annotation. In the Simulink Toolstrip, on the Library tab, click Show Annotations in Library Browser.

Get extension point, action, and icon names of Simulink Context Menu widgets and Simulink Toolstrip widgets using slUIDeveloperMode function

Still runs

You can customize the Simulink Context Menu and the Simulink Toolstrip. For example, you can add your own custom toolstrip tabs and context menu items. The context menu and toolstrip are comprised of widgets. To reuse the action or icon of an existing widget for a custom widget, you need to know the name of that action or icon. To add context menu widgets, you need to know the names of extension points — predefined locations at which you can add widgets.

You can get the names of actions, icons, and extension points by entering developer mode, pausing your pointer on a widget, and pressing Ctrl (command ⌘ on macOS). The MATLAB Command Window outputs the action, icon, and extension point names for the widget.

In previous releases, you could only enter developer mode using the slToolstripDeveloperMode function. Starting in R2026a, you can also enter developer mode using the slUIDeveloperMode function.

slUIDeveloperMode("on")

The slToolstripDeveloperMode function will be removed in a future release.

For information about customizing the Simulink Context Menu, see Customize Simulink Context Menu Using Extension Points. For information about customizing the Simulink Toolstrip, see Create Custom Simulink Toolstrip Tabs.

Model Finder function updates

These Model Finder functions have been renamed:

Simulation Analysis and Performance

 Run Multiple Simulations in Parallel: Self-paced, interactive course available as part of Online Training Suite subscription

Run Multiple Simulations in Parallel is a new course that teaches you to:

  • Run multiple simulations of a Simulink model in parallel using the parsim function.

  • Perform post-simulation computations on simulation data.

  • Monitor simulations and visualize simulation data in the Simulation Manager.

For more information, see Run Multiple Simulations in Parallel.

 Configure Simulink Solvers to Improve Performance: Self-paced, interactive course available as part of Online Training Suite subscription

Configure Simulink Solvers to Improve Performance is a new course that teaches you to:

  • Configure the Simulink solver settings to gain finer control of simulation accuracy and optimize simulation speed.

  • Troubleshoot common simulation performance issues such as model stiffness and algebraic loops.

For more information, see Configure Simulink Solvers to Improve Performance.

Faster rapid accelerator simulations

Starting in R2026a, rapid accelerator mode introduces a persistent server that keeps libraries loaded between simulation runs. Keeping libraries in memory reduces the total simulation time by about 1.1 seconds for subsequent simulations. The improvement is most noticeable for smaller models with shorter simulation times, where library loading represents a larger portion of the total simulation time.

To measure this improvement, the following code was used in both R2025b and R2026a. The first simulation builds the rapid accelerator simulation target and loads the necessary libraries. In R2026a, when the simulation ends, the libraries remain in memory. The second simulation can then run without the overhead of loading these libraries. To compare total simulation times across releases, check the total elapsed wall time reported for the second simulation, which is in the simulation metadata.

mdl = "vdp";
openExample("simulink_general/VanDerPolOscillatorExample",SupportingFile=mdl)

out1 = sim(mdl,SimulationMode="rapid-accelerator");

out2 = sim(mdl,SimulationMode="rapid-accelerator",RapidAcceleratorUpToDateCheck="off");

t = out2.SimulationMetadata.TimingInfo.TotalElapsedWallTime;

The approximate times for the second simulation are

  • R2025b: 2.3s

  • R2026a: 1.2s

The code was timed on a Windows 10, AMD Ryzen 5 PRO 5650U @ 2.30 GHz test system.

Simulate models with algebraic loops faster by using rapid accelerator mode

You can now simulate models that contain algebraic loops using rapid accelerator mode and in applications deployed using Simulink Compiler™. In previous releases, you could use only normal or accelerator mode to simulate models that contain algebraic loops. Rapid accelerator mode provides the fastest execution time by generating a simulation target that runs in a separate process. For more information, see How Acceleration Modes Work.

Apply time tolerance to external input data

When you load external input data for simulations, many input data formats require that you specify both time and data values to define the input. At each time step in the simulation, the block that loads the data determines the output value to provide to the simulation by comparing the current simulation time with the timestamps in the external input data. To control whether the software applies a tolerance when performing this comparison, use the new Input time tolerance model configuration parameter.

With this parameter enabled, the software considers the timestamp in the external input data and the simulation time equal if the timestamp is within 128*eps(t) of the simulation time t. You cannot modify the value of the time tolerance. The time tolerance applies to all external input data loaded using any of these blocks:

The Input time tolerance parameter is supported in all simulation modes, simulations deployed using Simulink Compiler, and production code generation.

Load external input data that contains Inf or NaN values

You can now load external input data that contains Inf and NaN data values using any of these blocks:

For example, to evaluate the system response to unexpected values, you can load external input data that contains one or more Inf or NaN values.

In previous releases, the software issued an error if external input data loaded using these blocks contained any Inf or NaN values.

Configure nontunable parameter values for fast restart simulations using the Simulation object

You can now use the Simulation object to configure nontunable parameter values for fast restart simulations.

  • You must specify the nontunable parameter values on the Simulation object before initializing or running the first fast restart simulation.

  • Once initialized in fast restart, you cannot modify nontunable parameter values.

  • Nontunable parameter values are not reverted in the model until you terminate the simulation or disable fast restart.

Previously, you could not specify nontunable parameter values on Simulation objects used to run fast restart simulations. To specify a nontunable parameter value, you had to modify the parameter value in the model before running the first fast restart simulation.

Analyze distribution of compilation time using the Simulink Profiler

The Simulink Profiler now provides information about how compilation time is distributed among compilation phases and among referenced models that simulate in normal mode. To view the compilation information, use one of these approaches:

  • In the Simulink Profiler, in the Profiler Report pane, click Show Execution Stack View . Then, expand the simulate and compilePhase nodes.

  • Inspect the rootExecNode property of the Simulink.profiler.Data object returned with the results of the profiling simulation.

In previous releases, the Simulink Profiler provided only the total time required to compile the model.

Compilation timing information in the Simulink Profiler.

Debug models using Model Slicer at breakpoints

Starting in R2026a, you can launch Model Slicer directly from the Breakpoints List when your Simulink model pauses at a breakpoint. This integration allows you to trace the signal values back to their sources so you can isolate the root cause of unexpected behavior in large models. A Simulink Check™ license is required to launch Model Slicer from the Breakpoints List.

In the Breakpoints List, Model Slicer:

  • Sets the starting point to the signal associated with the current breakpoint.

  • Updates the slice criteria to match the selected breakpoint when you add a new breakpoint or switch between existing breakpoints.

When model simulation hits a breakpoint, perform these steps to use Model Slicer from the Breakpoints List:

  1. On the Debug tab, click Breakpoints List. The Breakpoints List opens at the bottom of the Simulink Editor.

  2. In the Breakpoints List, click the Debug using Slicer button to debug the signal. You can also:

    • Add a starting point by clicking the Add Starting Point button .

    • View the upstream and downstream flow of the signals in the model using button.

  3. Click the Close Model Slicer button to close the Model Slicer.

For more information, see Breakpoints List and Trace Faulty Signal Paths Using Model Slicer at Signal Breakpoints (Simulink Check).

Improved support for breakpoints in accelerator mode

The Pause within time step option in the Breakpoints List now affects the behavior of breakpoints only in normal mode simulations. Supported breakpoints pause between time steps in accelerator mode simulations even if Pause within time step is selected. Previously, breakpoints were not supported in accelerator mode simulations if Pause within time step was selected.

Accelerator mode still does not support some breakpoints that normal mode supports. For example, breakpoints inside model references are not supported in accelerator mode.

The software now indicates which breakpoints are supported in accelerator mode by dimming unsupported breakpoints in the block diagram and the Breakpoints List. Previously, unsupported breakpoints appeared active during accelerator mode simulations but did not pause the simulation.

Selectively load signal data from an MLDATX file to the workspace

Starting in R2026a, you can inspect, filter, and load a subset of signals from an MLDATX file to the workspace by creating an mldatx.io.File object that references data in the MLDATX file. These operations do not require Simulink.

To access data in an MLDATX file, use mldatxfile to create an mldatx.io.File object. This object references signal data and metadata for runs saved in the file. Use the object to selectively load signals into the workspace.

  • Filter and export data with these functions:

    • getSignals — Filter signals based on criteria such as signal name, logging domain, or run index.

    • load — Export a subset of data from the MLDATX file to the workspace.

  • Inspect signal and run information with these functions:

    • getRunCount — Get the number of runs saved in the MLDATX file.

    • getRunInfoByIndex — Get detailed metadata for a run saved in the MLDATX file.

    • listRuns — Return a summary table of runs saved in the MLDATX file with columns for the run index, run name, creation date, and the name of the model that generated the run.

    • listSignals — Return a summary table of signals saved in the MLDATX file with columns for the signal name, run index, logging domain, block path, block sub-path, and port index.

To access data for an individual signal in an MLDATX file, use getSignals to create an mldatx.io.Signal object. This object references signal data and metadata for a signal saved in the MLDATX file and referenced by the mldatx.io.File object. Use the object to selectively inspect signal metadata and load data for a specific signal to the workspace using the load function.

When data is too large to fit into memory, use the getAsDatastore function to create a matlab.io.datastore.MLDATXSignalDatastore object to load the data into the workspace incrementally.

Live stream data to XY visualizations

Live streaming of data to XY visualizations in the Simulation Data Inspector, Record block, and XY Graph block is supported again. Such live streaming was supported in R2024b and earlier, but was not supported in R2025a. To live stream data to an XY visualization, data must be plotted as a scatter plot. To change the line style to only data markers, click Visualization Settings and in the Axes section, select Markers and clear Line. Trend lines are not supported while live streaming XY data.

Export data from the Simulation Data Inspector to a Parquet file

You can now export scalar and multidimensional signals from the Simulation Data Inspector to a Parquet file. The Simulation Data Inspector can export real and complex data of any built-in data type, as well as enumerations, strings, fixed-point data, buses, and arrays of buses. The Simulation Data Inspector can also export messages to a Parquet file as double values. When exporting to a Parquet file, you can configure shared or individual time columns, set row groups by height or size, and choose the compression used when saving the file.

Get and set data access for MATLAB callback functions programmatically

Programmatically configure and retrieve data access settings that enable streaming of signal data to a MATLAB callback function during simulation using the new Simulink.sdi.setDataAccess and Simulink.sdi.getDataAccess functions.

Get storage size of signals logged to the Simulation Data Inspector

You can now view the approximate storage size of data logged to the Simulation Data Inspector when a simulation is paused or stopped.

To interactively access storage size information, you can:

  • Add the Size column to the signal table in either the Inspect or Compare pane to display a specific property for all logged signals in the table.

  • View metadata for a signal, run, or comparison in the new Size row of the Properties pane.

For more information, see Inspect Signal, Run, and Comparison Metadata.

To programmatically access storage size information, you can:

In the signal table of the Simulation Data Inspector, the new Size column is highlighted. In the Preferences pane, the new Size row is highlighted.

Get descriptive statistics for signals in the Simulation Data Inspector

Starting in R2026a, get descriptive statistics for signals in the Simulation Data Inspector. Calculate statistics for the entire signal, or focus your analysis on a smaller time interval. The Simulation Data Inspector stores signals as Simulink.sdi.Signal objects. Use the signal ID of a Signal object to calculate these descriptive statistics:

  • max — Maximum signal value

  • min — Minimum signal value

  • bounds — Minimum and maximum signal value

  • mean — Mean of signal values

  • median — Median of signal values

  • std — Standard deviation

  • rms — Root mean square value

To get a set of descriptive statistics for a signal, use the Simulink.analytics.getMetrics function.

sigStats = Simulink.analytics.getMetrics(sigId)
sigStats = 

  struct with fields:

           min: 0
           max: 10
    peakToPeak: 10
          mean: 4.9038
        median: 4.9000
           std: 3.0245
           rms: 5.7462

Log data stores containing nonvirtual buses

Logging is now supported for data stores that output nonvirtual buses, nested nonvirtual buses, and arrays of buses.

Generate comparison reports with interactive plots using Simulation Data Inspector

Comparison reports in the Simulation Data Inspector let you share comparison data without MATLAB dependency. When you generate comparison reports from the Simulation Data Inspector, the plots are now interactive. You can zoom, pan and use data cursors in the plots. Prior to R2026a, plots were static images that did not have any interactive functionality.

For more information about generating comparison reports, see Create Interactive Comparison Reports.

A generated comparison report. Data cursors, zooming and panning is displayed in the interactive plots on the right.

Accelerate JIT simulation with additional SIMD support

In R2026a, if your hardware supports the AVX2 or AVX512F SIMD instruction sets, you can use Hardware acceleration to speed up the simulation of just-in-time (JIT) models.

Run large-scale, system-level studies using parsim and Amazon Web Services (AWS)

The new example Scaling Virtual Calibration and System Design with parsim and AWS shows how to run large-scale, system-level studies using parsim and AWS.

 Functionality being removed or changed

The Simulation Data Inspector no longer exports data to the workspace by default when you create a new session or delete signals or runs

Behavior change

When you create a new session or delete runs or signals, the Simulation Data Inspector no longer exports data to the workspace before deleting signals or runs from the repository.

Component-Based Modeling

 Componentization Techniques for Simulink Models: Self-paced, interactive course available as part of Online Training Suite subscription

Componentization Techniques for Simulink Models is a new course that teaches you to:

  • Manage large Simulink models by organizing them into reusable components.

  • Select componentization strategies to enhance collaboration.

  • Build scalable model architectures.

  • Protect your models to help safeguard your intellectual property.

For more information, see Componentization Techniques for Simulink Models.

 Check for optimal model reference rebuild setting to avoid unnecessary compilations

To check that you are using the optimal model reference rebuild setting, in the Upgrade Advisor, run the Check if the model reference rebuild setting is optimal check.

Setting the Rebuild configuration parameter of the top model in a model hierarchy to If changes in known dependencies detected reduces the time required for change detection. The software automatically identifies most dependencies. However, in rare cases, to prevent invalid simulation and code generation results, you must explicitly specify dependencies on files that contain code executed by callbacks. For more information about known and specified dependencies, see Model dependencies.

For information about running checks in the Upgrade Advisor, see Upgrade Models Using Upgrade Advisor.

Create Model Hierarchy with Subsystems: Self-paced, interactive course available as part of Online Training Suite subscription

Create Model Hierarchy with Subsystems is a new course that teaches you to:

  • Reduce complexity and improve readability of Simulink models by grouping related blocks into subsystems.

  • Create and customize parameter dialog boxes for subsystems using masks.

  • Control the execution of your model by creating subsystems that execute in response to a control signal.

For more information, see Create Model Hierarchy with Subsystems.

Model System Components: Self-paced, interactive course available as part of Online Training Suite subscription

Model System Components is a new course that teaches you to:

  • Build larger projects for complex systems with multiple components.

  • Create and reference components as subsystems, separate models, or reusable libraries.

For more information, see Model System Components.

Check model componentization for faster model compilation

To speed up model compilation by converting subsystems to referenced models, in the Performance Advisor, run the Check model componentization check.

This check finds identical subsystems that have the same block diagram and interface. The check determines whether the subsystems satisfy at least one threshold criteria and converts the subsystems to referenced models where beneficial. The threshold criteria are the specified minimum number of copies and minimum number of constituent blocks.

This check is not run by default because it compiles the model hierarchy multiple times, which can be time consuming.

For more information about running checks in the Performance Advisor, see Improve Simulation Performance Using Performance Advisor.

Faster loading of model containing many instances of same referenced model

Loading a model that contains many instances of the same referenced model is faster in R2026a than in R2025b. The more times you reference the same model, the larger the performance improvement you experience.

For a simple example, suppose you create a model that references the vdp model many times. Open an example that uses the vdp model. Check that the vdp model is closed.

openExample("simulink_general/VanDerPolOscillatorExample")
close_system("vdp")

The following function creates a model that references the vdp model the number of times specified by num_instances. The function saves and closes the new model hierarchy and times how long it takes to load the top model.

function t = timingTest(num_instances)

% Create top model
topModel = "top";
new_system(topModel);
open_system(topModel);

% Add num_instances of vdp to top
refModel = "vdp";
for i = 1:num_instances
    add_block("simulink/Ports & Subsystems/Model", ...
        topModel+"/Model",MakeNameUnique="on", ...
        ModelName=refModel);
end

% Save and close top model
close_system(topModel,1);

% Measure performance of load_system function
tic;
load_system(topModel);
t = toc;

% Close and delete top model
close_system(topModel);
topFile = topModel+".slx";
delete(topFile);

end

Loading a model that contains 10 to 100 instances of a referenced model like vdp is about 1.9–2.8x faster than in the previous release.

This table provides the approximate execution times.

Number of InstancesR2025bR2026a
100.34 s0.18 s
200.43 s0.23 s
500.80 s0.40 s
1001.6 s0.57 s

This evaluation was performed on a Windows 11, AMD EPYC™ 74F3 @ 3.19 GHz test system.

For more information about model references, see Model Reference Behavior and Capabilities.

Faster saving for large model reference hierarchies

Saving a model hierarchy that contains many modified referenced models is faster in R2026a and R2025b than in R2025a. The more modified referenced models and levels of model hierarchy, the larger the performance improvements you experience.

The following function creates a vertical model reference hierarchy composed of the number of models specified by num_models. The function modifies each model in the hierarchy and times how long it takes to save the models. The function uses a temporary directory. After timing, the function closes the models and removes the temporary directory.

function t = timingTest(num_models)

% Navigate into temporary directory
currDir = pwd;
tempDir = tempname;
mkdir(tempDir)
cd(tempDir)

% Track created models
createdModels = cell(1,num_models);
topModel = "Model1";

% Create the hierarchy: Model1 -> Model2 -> ... -> ModelN
for i = num_models:-1:1
    mdl = sprintf("Model%d",i);
    createdModels{i} = mdl;
    new_system(mdl);
    open_system(mdl);
    if i < num_models
        refName = sprintf("Model%d", i+1);
        add_block("simulink/Ports & Subsystems/Model", ...
            mdl+"/Model",ModelName=refName);
    end
    save_system(mdl);
end

% Make all models in hierarchy dirty
cellfun(@(x) set_param(x,Description="Dirty"),createdModels);

% Measure performance of save_system function
tic;
save_system(topModel,SaveDirtyReferencedModels="on");
t = toc;

% Close created models
cellfun(@(x) close_system(x), createdModels);

% Remove temporary directory and created models
cd(currDir)
rmdir(tempDir,"s")

end

The performance improvement increases with the number of modified referenced models and levels of model hierarchy:

  • For a vertical model reference hierarchy that contains 10 modified models, saving the models is about 2x faster than in R2025a.

  • For a vertical model reference hierarchy that contains 50 modified models, saving the models is about 4x faster than in R2025a.

This table provides the approximate execution times.

Number of ModelsR2025aR2025bR2026a
101.5 s0.82 s0.86 s
203.6 s1.7 s1.6 s
306.4 s2.9 s2.4 s
5017 s4.6 s4.2 s

This evaluation was performed on a Windows 11, AMD EPYC 74F3 @ 3.19 GHz test system.

For more information about model references, see Model Reference Behavior and Capabilities.

Linearly interpolate outputs of model references configured to use local solvers

When a parent solver takes a step that does not correspond to a communication step for a local solver, Model blocks that reference models configured to use a local solver provide an interpolated output value to the parent solver. You can now configure Model blocks that produce real, double, continuous output signals to linearly interpolate these output values.

To configure a model reference to linearly interpolate output values, set the Output signal handling parameter of the Model block to Linear. For parent solver time steps that do not correspond to communication steps, the Model block provides outputs by linearly interpolating the output value from the last communication step and the value the local solver computed for the next communication step.

When you set Output signal handling to Auto, the software now selects linear interpolation in some cases. For details, see Auto output signal handling selects linear interpolation in some cases.

Linear output signal handling has these advantages over zero-order hold output signal handling:

  • Simulation results are closer to the results of a simulation that uses a single solver.

  • Output signal sample times do not change across the model reference boundary.

  • Retaining continuous sample time across the model reference boundary can result in fewer parent solver resets.

In previous releases, only zero-order hold output signal handling was supported for variable-step local solvers and for fixed-step solvers that have a smaller step size than the parent solver.

For more information, see Use Local Solvers in Referenced Models.

Use local solvers for models that reference hybrid models

Local solvers are now supported for referenced models that directly or indirectly reference another model that has both continuous and discrete sample times.

In previous releases, local solvers are not supported for such model references, with a couple exceptions.

For more information, see Use Local Solvers in Referenced Models.

Reference hybrid, fixed-step model from variable-step parent

A variable-step model can now reference a fixed-step, single-tasking model that has both continuous and discrete sample times.

For more information, see Specify Compatible Solver Settings.

Assign new bus objects and identify mismatches at bus element ports more easily

When a bus element port does not specify a Simulink.Bus object, you can now create and assign Simulink.Bus objects from the Property Inspector or port dialog box by clicking Create and assign bus objects for this bus hierarchy, compiling the model when needed. The software compiles the model and then creates and assigns the Simulink.Bus objects. In previous releases, creating and assigning Simulink.Bus objects to bus element ports requires multiple steps.

When you create Simulink.Bus objects after opening the Property Inspector or port dialog box, to update the Data type list, select Refresh data types from the list. In previous releases, clicking Refresh updates the entire dialog box, including the Data type list.

When a bus element port specifies a Simulink.Bus object and the incoming bus hierarchy does not match the specified bus object, the Property Inspector and port dialog box now display only the mismatched elements in red. Mismatched elements include:

  • Elements that are accessed by blocks but are missing from the bus object

  • Elements that are specified by bus objects but do not match incoming elements

  • Parents of mismatched elements

In previous releases, when an element does not match, the entire bus hierarchy is red, not just the mismatched elements.

For more information, see In Bus Element and Out Bus Element.

Propagate names between bus element ports and components more intuitively

When you connect an In Bus Element or Out Bus Element block to a port on a Subsystem block, a custom port or element name replaces a default port or element name. Previously, the software ignored element names when renaming.

For a custom name from a port on a Model block to replace a default port or element name at an In Bus Element or Out Bus Element block, the referenced model must be loaded. The names of the ports on a Model block are determined by the referenced model and are not changed.

For more information, see Connect Port Blocks to Subsystems.

Successively add bus elements to bus element ports

When you add an element to a bus in a bus element port, the selection remains on the parent instead of changing to the new element. You can now add multiple elements to a bus without reselecting the parent before adding each element.

For an example, see Specify Multiple Input Signals at One Port.

Initialize Model blocks by specifying initial operating points

You can now load a partial operating point for simulation by specifying the initial operating point of one or more Model blocks in the model hierarchy. When you specify an initial state or operating point for the top model, you can specify a Model block operating point to override the state or operating point information for the block.

In previous releases, you had to specify a complete operating point for the top model. The operating point of the top model initializes the entire model hierarchy.

You can configure multiple Model blocks in the same model hierarchy to save the final operating point or simulate from an initial operating point. By default, each Model block operating point is saved as a Simulink.op.ModelBlockOperatingPoint object in a property of the Simulink.SimulationOutput object returned by the simulation.

Saving and loading Model block operating points is not supported for Model blocks that:

  • Simulate in a mode other than normal mode

  • Reference a model that is referenced by another Model block in the hierarchy

  • Are part of a variant subsystem or variant assembly subsystem

Count all blocks used in system and its references using sldiagnostics

Using sldiagnostics, you can now count all blocks used in a system and its references by setting the CountBlocksInRefs option.

Merge Simulink cache file contents

When you generate multiple Simulink cache files for the same model, you can now merge the contents of those files in one Simulink cache file. To support the merge, platform-specific artifacts, such as simulation and code generation targets, must be unique. For example, the cached model reference simulation targets must have different releases or platforms than each other.

To merge Simulink cache file contents in a new file, use the slxcmerge function. For more information, see slxcmerge.

Easily copy subsystem content to new model after failed conversion

When the Model Reference Conversion Advisor fails to convert a subsystem to a model, the advisor now provides an option to copy the subsystem block diagram to a new model. The new model uses the configuration set from the original parent model. If you want to force the conversion and resolve errors manually after the conversion, use this option.

For more information about the conversion process, see Convert Subsystems to Referenced Models.

Models created from subsystems can retain Polyspace comments

When you convert a subsystem to a model, you can now retain Polyspace comments specified by the PolySpaceStartComment and PolySpaceEndComment block property tokens. To copy the Polyspace comments from the subsystem to the new model, use the Simulink.SubSystem.convertToModelReference function with CopyPolyspaceComments set to true.

For information about block property tokens, see Specify Block Properties.

Simulink Units: Ordinal units specifications now supported

Simulink now supports ordinal unit specifications, such as beaufort_wind_scale. Blocks now support units that provide relative ranking, but the intervals between the values are not evenly distributed.

Highlight bounded regions of Variant Start and Variant End blocks for enhanced visual representation

You can now highlight the blocks within a bounded region created by Variant Start and Variant End blocks to distinguish them visually from other components. This feature enables you to trace data flow and logic specific to each variant implementation in large and complex models.

Consider the slexVariantStartAndEnd model, which contains the Variant Start and Variant End blocks that define the bounded regions.

To identify the blocks within the bounded region created at Port 2 of the Variant Start block:

  1. In the Simulink Toolstrip, on the Debug tab, select Information Overlays > Start End Bounded Regions.

  2. On the Variant Start End Bounded Regions tab, expand slexVariantStartAndEnd/Variant Start and choose Port 2. Alternatively, click the output signal connected to Port 2 of the Variant Start block to highlight the blocks within its bounded region.

Block highlighting applies only to the model in which it is enabled and does not extend to the bounded regions in the referenced models. To highlight blocks within a bounded region of a referenced model, open the referenced model and select the Start End Bounded Regions option within that model. For more information, see Control Variant Condition Propagation using Variant Start and Variant End Blocks.

Highlighted blocks within the bounded region of port 2 of the Variant Start block in the slexVariantStartAndEnd model

Variant Manager for Simulink: Use instance-specific values for variant control variables

Starting in R2026a, Variant Manager supports instance-specific values for variant control variables when you define these variables in the model workspace and configure them as model arguments.

When you configure a variant control variable as a model argument and reference the model using multiple Model blocks, you can assign either the same value or different values to each instance of the variable in the model hierarchy. The instance-specific value for this variable can come from the model workspace of the referenced model, the parent model reference hierarchy, or a system mask applied to the referenced model. Variant Manager identifies this instance-specific definition and uses it when importing control variables, finding control variable usage, and activating the model.

For more information on the use of instance-specific values, see Configure Instance-Specific Values for Block Parameters in a Referenced Model.

Variant Manager for Simulink: Use variant control variables with the same name defined in multiple sources when generating configurations

When you automatically generate variant configurations by using Variant Manager or the Simulink.VariantManager.generateConfigurations function, you can use variant control variables with the same name defined in multiple sources, except in the preconditions to be applied when generating configurations.

In the Generate Configurations tab of the Variant Manager window, the Configure Control Variables table has a new Source column that shows the source of the control variables used by the model hierarchy. The generated configurations also identify variables with multiple definitions by their source.

Generate Configurations tab of Variant Manager window shows the Source column in the Configure Control Variables table. The results pane shows the control variable name with the source name in the header column.

Variant Manager for Simulink: Open Variant Manager using Simulink.VariantManager.open function

You can now use the Simulink.VariantManager.open function to open Variant Manager from the MATLAB command line. You can provide a block diagram name, a block path, or a Simulink.BlockPath object as input to this function. You can also use this function to open the Simulink.VariantConfigurationData object dialog box to define and edit variant configurations and constraints without a Simulink model.

Variant Manager for Simulink: Analyze variant models using Simulink.VariantManager.analyzeModel function

You can use the Simulink.VariantManager.analyzeModel function to programmatically analyze variant configurations for a model. Specify either named variant configurations or variable groups as input to the function.

The function analyzes the model using the specified configurations and opens the variant analysis report. This is the default behavior if you do not specify an output argument in the function call. The function can also return a Simulink.VariantConfigurationAnalysis object as an output argument. You can call functions of this object to perform further operations on the analysis results.

For more information on Variant Analyzer, see Analyze Variant Configurations in Models Containing Variant Blocks.

Variant Manager for Simulink: Simulation support for models with variant configuration data without installing support package

Starting in R2026a, you can simulate models that have variant configurations defined and stored in an associated Simulink.VariantConfigurationData object without installing the Variant Manager for Simulink support package.

You can view the variant configurations and constraints saved in the Simulink.VariantConfigurationData object. If the object is defined in the base workspace, double-click the object or use the open function at the MATLAB command line. If the object is in a data dictionary, select the object in the Model Explorer. Selecting the object opens the Simulink.VariantConfigurationData dialog box in a read-only mode. For more information, see Manage Variant Configurations Without Simulink Model.

Simulink.VariantConfigurationData dialog box shows a read-only view of the configurations.

You can run single or multiple parallel simulations on the model programmatically without specifying a named variant configuration. For example, these commands run successfully without the support package installed:

openExample("slexVariantManagement.slx");
sim("slexVariantManagement.slx")
However, running a simulation using the Simulink.SimulationInput object by specifying a named variant configuration, as shown below, results in an error if the support package is not installed.
simInp = Simulink.SimulationInput("slexVariantManagement.slx")
simInp = setVariantConfiguration(simInp,'LinInterExpWithNoise')
sim(simInp,"ShowProgress","on");

Previously, since R2022b, you could not simulate models containing variant configurations unless you installed the Variant Manager for Simulink support package.

Variant Manager for Simulink: Reduce models containing Function Element and Function Element Call blocks

Variant Reducer now supports reducing models that contain Function Element and Function Element Call blocks.

Variant Manager for Simulink: Specify arguments of Simulink.VariantConfigurationData object functions using Name=Value syntax

Starting in R2026a, functions of the Simulink.VariantConfigurationData object support specifying input arguments using the Name=Value syntax. This enhancement improves usability and aligns the syntax with other functions provided by Variant Manager for Simulink. Functions of the Simulink.VariantConfigurationData object continue to support positional arguments, but it is recommended to use the Name=Value syntax instead.

For example, the following table compares the positional argument syntax and the newly supported Name=Value syntax for the addConfiguration function. Here, varconfigdata is a Simulink.VariantConfigurationData object.

Before R2026aFrom R2026a

addConfiguration(varConfigData, ...
 "InternalPlantConfig", ...
 "Internal Plant Controller", ...
 ctrlVarStruct);

addConfiguration(varConfigData, ...
 ConfigurationName="InternalPlantConfig", ...
 Description="Internal Plant Controller", ...
 ControlVariables=ctrlVarStruct);

Variant Manager for Simulink: Improved performance when activating named variant configurations

In R2026a, when you activate a named variant configuration in Variant Manager for Simulink, the operation completes sooner for large models that contain many referenced models compared to R2025b.

Variant Manger window highlights a named configuration and the Activate button.

Optimize block activation by propagating variant conditions through signal loops

In previous releases, variant conditions specified in variant blocks did not propagate to the blocks that form signal loops. The blocks forming these loops remained active during simulation and code generation. Starting in R2026a, variant conditions propagate through signal loops. The blocks inside and outside the loop along the signal path activate or deactivate based on their associated variant conditions. As a result, only blocks required for the active variant are simulated and included in the generated code, eliminating the unnecessary inclusion of inactive blocks.

For example, in this model, the variant condition V == 1 from the Variant Source block propagates to the Sum, Integrator, Gain, and Unit Delay blocks that form the signal loop and to the Constant block outside the loop. These blocks activate only when V == 1 evaluates to true.

Blocks in signal loop and a connected Constant block are highlighted to show they are active only when the variant condition V == 1 evaluates to true.

Convert referenced subsystem to a regular subsystem from the Simulink Editor

You can now convert a Subsystem Reference block to a Subsystem block directly from the Simulink Editor by using either of these ways:

  • Right-click the Subsystem Reference block and select Convert to > Subsystem.

  • Select the Subsystem Reference block, go to the Subsystem Block tab, and select Convert > Convert to Subsystem.

Previously, you could convert a Subsystem Reference block to a Subsystem block only from the MATLAB Command Window.

For more information, see Convert Subsystem Reference Block to Subsystem Block in Convert Between Subsystems and Referenced Subsystems.

Change active variant during run time using Simulation object

Starting in R2026a, you can switch the active variant during simulation by using the setVariable or setBlockParameter function of a Simulation object to write to a variant control variable while simulation is paused. Previously, you could switch the active variant choice of a Variant Subsystem block during simulation or execution of the generated code only by using a Parameter Writer block to write to a variant control variable.

This code pauses a simulation, then demonstrates how to switch the active variant choice for different locations of the variant control variable.

% start simulation
mdl = "runtimeVariant";
open_system(mdl);
s = simulation(mdl)
 
% update variant control variable stored in a global workspace
s = setVariable(s,"V",0);
step(s,PauseTime=5);
s = setVariable(s,"V",1);

% update variant control variable that is a Simulink.Parameter object stored in a model workspace
s = setVariable(s,"M.Value",int32(1),"Workspace","runtimeVariant");
step(s,PauseTime=5);
s = setVariable(s,"M.Value",int32(2), "Workspace","runtimeVariant");

% update variant control variable stored in a mask workspace
s = setBlockParameter(s,"runtimeVariant/MaskSubsystem","V","1");
step(s,PauseTime=5);
s = setBlockParameter(s,"runtimeVariant/MaskSubsystem","V","2");

% update a variant control variable as a model argument
s = setBlockParameter(s,"runtimeVariant/Model", "ParameterArgumentValues", struct("V","1"));
step(s,PauseTime=5);
s = setBlockParameter(s,"runtimeVariant/Model", "ParameterArgumentValues", struct("V","2"));
 
% resume simulation
step(s,PauseTime=10);
out = stop(s);

For more information, see Control Active Choice of Variant Subsystem During Simulation or Execution of Generated Code.

Visualize connection between Parameter Writer block and base workspace or model workspace variables

Starting in R2026a, you can visualize the connection from a Parameter Writer block to a base workspace or model workspace variable in the Connectors tool. For example, you can now visualize the connection between a Parameter Writer block writing to a variant control variable in the base workspace and a Variant Subsystem block as the parameter owner block. Previously, when you selected Parameter Connectors, the Connectors tool displayed the connection from a Parameter Writer block only when the destination was a block parameter.

To display the connection to workspace variables, in the Connectors tool, select Parameter Connectors. Then, compile the model.

The Connectors tool is available in the Information Overlays menu on the Debug tab of the Simulink Editor.

For more information on using the Connectors tool, see Use Connectors Tool to Visualize Relation Between Blocks.

Generate code for Parameter Writer block with inlined parameters

Starting in R2026a, you can generate code for a Parameter Writer block, writing to a variable with non-auto storage class attributes, with inlined parameters by setting the model parameter to Inlined. Previously, you could only generate code for a Parameter Writer block when the model configuration parameter Default parameter behavior (Simulink Coder) was set to Tunable.

For example, you can now generate code for a Parameter Writer block that writes to the run-time variant control variable for a Variant Subsystem block regardless of the Default parameter behavior setting.

Use Parameter Writer block to initialize variant control value of variant parameter bank

In R2025a, you could use Parameter Writer blocks within an Initialize Function block to initialize Simulink.VariantControl objects associated with variant parameters (Simulink.VariantVariable) that have a startup activation time. Starting in R2026a, you can use variant parameter banks (Simulink.VariantBank) to group such variant parameters.

With this enhancement, the Parameter Writer block can initialize the variant control used by the variant parameter bank, enabling you to select the active choice of the bank at the start of simulation or during the initialization of generated code. You must define both the variant parameters and the variant parameter bank in the base workspace or in a data dictionary associated with the model. In the code generated by Embedded Coder®, the Parameter Writer block initializes the Simulink.VariantControl object, which in turn selects the active value set from the variant parameter bank structure array. For an example, see Initialize Variant Control Value of Variant Parameter Bank Using Parameter Writer Block.

For information on code generation using variant parameter banks, see Group Variant Parameter Values and Conditionally Switch Active Value Sets in Generated Code (Embedded Coder).

Generate code for model that references protected model containing variant parameters with code compile activation time

In R2026a, you can generate code for a model that includes a protected model when the protected model contains variant parameters with code compile variant activation time. The generated code for the parent model does not contain preprocessor conditional statements for the declarations and definitions of these variant parameters. This code is similar to code generated for such a model when you set the variant parameter activation time to update diagram analyze all choices.

In this example, the parent model refers to a protected model that uses two variant parameters K and Kv, that use a variant control V, with code compile activation time.

Parent model uses a protected model that contains two variant parameters.

When you generate code for this model using Embedded Coder, the code for the parent model defines the variant parameters without conditionally compiling them based on variant control V, and the code contains only the active choice of the variant parameters.

 /* File: varparam_top_model.h */

/* Model block global parameters (default storage) */
extern real_T rtP_K;                   /* Variable: K
                                        * Referenced by: '<Root>/model_block_top'
                                        */
extern real_T rtP_Kv;                  /* Variable: Kv
                                        * Referenced by: '<Root>/model_block_top'
                                        */
/* File: varparam_top_model_data.c */

/* Model block global parameters (default storage) */
real_T rtP_K = 2.0;                    /* Variable: K
                                        * Referenced by: '<Root>/model_block_top'
                                        */
real_T rtP_Kv = 3.0;                   /* Variable: Kv
                                        * Referenced by: '<Root>/model_block_top'
                                        */
Protected model code generation does not support preprocessor conditional statements, so the generated code for the protected model also considers only the active choice of the variant parameter.
/* File: varparam_ref_model.c */
/* Output and update for referenced model: 'varparam_ref_model' */
void varparam_ref_model(real_T *rty_Out1)
{
  /* Gain: '<Root>/Gain' incorporates:
   *  Constant: '<Root>/Constant'
   */
  *rty_Out1 = rtCP_Gain_Kv * rtCP_Constant_K;
}

If the parent model uses the same variant parameter as the protected model with code compile activation time, then the generated code for the parent model guards that variant parameter using the preprocessor conditionals #if and #elif.

In this example, the parent model also uses the variant parameter K.

Parent model uses the variant parameter K that is also used by the protected model.

The code generator uses the macro V to emit #if and #elif guards that conditionally compile K.

/* File: varparam_top_model_has_vparam_types.h */

#ifndef V
#define V                              1
#endif
/* File: varparam_top_model_has_vparam.h */
/* Model block global parameters (default storage) */
#if V == 1 || V == 2

extern real_T rtP_K;                   /* Variable: K
                                        * Referenced by: '<Root>/model_block_top'
                                        */

#endif

extern real_T rtP_Kv;                  /* Variable: Kv
                                        * Referenced by: '<Root>/model_block_top'
                                        */
/* File: varparam_top_model_has_vparam_data.c */
/* Model block global parameters (default storage) */
real_T rtP_Kv = 3.0;                   /* Variable: Kv
                                        * Referenced by: '<Root>/model_block_top'
                                        */

#if V == 1

real_T rtP_K = 2.0;                    /* Variable: K
                                        * Referenced by: '<Root>/model_block_top'
                                        */

#elif V == 2

real_T rtP_K = 4.0;                    /* Variable: K
                                        * Referenced by: '<Root>/model_block_top'
                                        */

#endif

Improved error handling for models with variants and buses

Simulink no longer reports bus propagation errors for inactive variant paths or blocks with Variant activation time set to update diagram.

For more information on using Variant Subsystem blocks, see Implement Variations in Separate Hierarchy Using Variant Subsystems.

Specify value of Simulink.VariantControl as Boolean value

Starting in R2026a, you can specify the value of Simulink.VariantControl objects as Boolean values. You can also set the value of a variant control object to a Simulink.Parameter object with a Boolean value. This enhancement is supported for simulation and code generation workflows, including code generation targets such as AUTOSAR. For example,

vCtrl = Simulink.VariantControl(Value=true,ActivationTime="startup");
vCtrlSP = Simulink.VariantControl(Value=Simulink.Parameter(Value=true));

Variant control dialog box shows the type as logical and value as true.

This model uses a Simulink.VariantControl object vCtrl with a Boolean value to switch between the choices of a Variant Source block.

Model that contains a Variant Source block with two constant blocks as input is shown. The block parameter dialog box of the Variant Source block is shown.

This code snippet shows the definition of the variant control vCtrl and its usage in the model step function in the code generated using Simulink Coder™.

/* Exported block parameters */
boolean_T vCtrl = true;                /* Variable: vCtrl
                                        * Referenced by:
                                        *   '<Root>/Constant'
                                        *   '<Root>/Constant1'
                                        *   '<Root>/vCtrl'
                                        */
/* Model step function */
void modelVCwithBool_step(void)
{
  /* SignalConversion generated from: '<Root>/Variant Source' */
  if (vCtrl) {
    /* Outport: '<Root>/Out1' incorporates:
     *  Constant: '<Root>/Constant'
     */
    modelVCwithBool_Y.Out1 = modelVCwithBool_P.Constant_Value;
  } else {
    /* Outport: '<Root>/Out1' incorporates:
     *  Constant: '<Root>/Constant1'
     */
    modelVCwithBool_Y.Out1 = modelVCwithBool_P.Constant1_Value;
  }
}

Group member definitions of integer-based enumerated types using Members argument

When defining integer-based enumerated types using the Simulink.defineIntEnumType function, you can use the new argument Members to group each member’s name, value, and description into a single cell array. The member description is a new and optional property.

Consider the enumeration named Colors with three members, Red, Yellow, and Green. Each member has an associated integer value and description.

NameValueDescription
Red0Stop!
Yellow1Prepare to stop!
Green2Go!

Use the Members argument to define the name, value, and description for each member of the enumerated type Colors in a single array.

Simulink.defineIntEnumType("Colors", ...
         "Members",{{"Red",0,"Description","Stop!"}, ...
               {"Yellow",1,"Description","Prepare to stop!"}, ...
               {"Green",2,"Description","Go!"}}, ...
         "Description"="Traffic light colors", ...
         "DefaultValue"="Red", ...
         "StorageType"="int16");

The generated code includes the description for each member as a comment next to the corresponding enumeration member.

typedef enum {
 Red= 0, /* Stop! (default value) */
 Yellow  /* Prepare to stop! */
 Green   /* Go! */} Colors;

Specify Callback Functions for Multiversion Co-Simulation Components in Block Dialog

You can now specify callback functions for Multiversion Co-simulation components in the Multiversion Co-simulation block dialog. These are the supported block callbacks and their corresponding model callbacks in Simulink.

  • CosimPreLoadFcn - PreLoadFcn

  • CosimPostLoadFcn - PostLoadFcn

  • CosimInitFcn - InitFcn

  • CosimStartFcn - StartFcn

  • CosimStopFcn - StopFcn

Before R2026a, only PreLoadFcn and PostLoadFcn were supported and had to be defined in a separate script. You can now manage component callbacks directly on the block dialog.

Multiversion Co-simulation block dialog callbacks

Simulink.importExternalCTypes: Enhanced Support For Custom Type Import and Compiler Flags

Starting in R2026a, the Simulink.importExternalCTypes function allows you to:

  • Generate a header file containing the type alias corresponding to the type signatures from an external header file using the SimulinkTypeAliasHeader argument.

  • Import types with type names that contain the original type signatures from an external header file using the UseFullyQualifiedName argument.

  • Add additional flags to the compiler command line using the CompilerFlags argument.

Access compiled port attributes without model recompilation

Starting in R2026a, you can access compiled port attributes — such as complexity, data type, units and width of data and state ports — in a previously compiled model without requiring the model to be in an active compilation state. This change saves time in cases where model compilation is time-consuming.

For a model that has been successfully compiled once before in the current MATLAB session, this enhancement makes accessing complexity, data type, units and width attributes simpler. The feval based compiled attribute access continues to work as before.

For example, this table compares the access pattern for complexity in a previously compiled model for versions R2025b and earlier with the versions R2026a and later.

R2025b and earlierR2026a and later

feval(gcs,[],[],[],"compile");
cs = get_param(gcb,"CompiledPortComplexSignals")
feval(gcs,[],[],[],"term");

cs = get_param(gcb,"CompiledPortComplexSignals")

Use Simulink Units with FMU block

Starting in 2026a, the input and output ports of the FMU Import block can read and propagate units. You can use signals with built-in and user-defined units at the block interface.

Simulink Support Package for Rust Code (April 2026)

Starting in R2026a, you can use the Simulink Support Package for Rust® Code to interface Rust code with Simulink. To use this support package, you must install this support package as an add-on. For more information, see Install Simulink Support Package for Rust Code.

Using the support package, you can:

 Functionality being removed or changed

Rebuild configuration parameter default value is now If changes in known dependencies detected

Behavior change

By default, new models set Rebuild to If changes in known dependencies detected instead of If changes detected. The new default value reduces the time required for change detection.

The software automatically identifies most dependencies. However, in rare cases, to prevent invalid simulation and code generation results, you must explicitly specify dependencies on files that contain code executed by callbacks. For more information about known and specified dependencies, see Model dependencies.

Rebuild and Never rebuild diagnostic configuration parameters will be removed

Warns

The Rebuild and Never rebuild diagnostic configuration parameters will be removed in a future release.

In the Configuration Parameters dialog box, these parameters have been moved under Advanced parameters at the bottom of the Model Referencing pane.

The software now issues warnings when:

  • You update, simulate, or build a model with Rebuild set to a value other than If changes in known dependencies detected.

  • In the MATLAB Command Window, you specify an UpdateModelReferenceTargets value other than "IfOutOfDate".

  • In the MATLAB Command Window, you specify a CheckModelReferenceTargetMessage value.

The future behavior will match the If changes in known dependencies detected setting of the Rebuild configuration parameter.

  • To rebuild model reference targets conditionally, set Rebuild to If changes in known dependencies detected. To check for changes in files that contain code executed by callbacks, use the Model dependencies configuration parameter. For more information, see Model dependencies.

  • To rebuild model reference targets unconditionally, remove the related Simulink cache files and model reference targets. For more information, see Manage Simulation Targets for Referenced Models and Manage Build Process Folders (Simulink Coder).

  • To avoid rebuilding model reference targets, convert the referenced models to protected models. For more information, see Protect Models to Conceal Contents (Simulink Coder).

UpdateThisModelReferenceTarget argument of slbuild function will be removed

Warns

The UpdateThisModelReferenceTarget name-value argument of the slbuild function will be removed in a future release. This argument lets you build the model reference simulation or coder target for only the specified model and not its referenced models.

To avoid rebuilding model reference targets for referenced models, convert the referenced models to protected models instead. For more information, see Protect Models to Conceal Contents (Simulink Coder).

To control what model reference targets build during simulation or code generation, use the strategies in this table instead.

UpdateThisModelReferenceTarget ValueRecommended Replacement
"IfOutOfDate" or "IfOutOfDateOrStructuralChange"

To rebuild model reference targets conditionally, set the UpdateModelReferenceTargets configuration parameter to "IfOutOfDate". To check for changes in files that contain code executed by callbacks, use the ModelDependencies configuration parameter. For more information, see Model dependencies.

"Force"

To rebuild model reference targets unconditionally, remove the related Simulink cache files and model reference targets. For more information, see Manage Simulation Targets for Referenced Models and Manage Build Process Folders (Simulink Coder).

Enable parallel model reference builds configuration parameter no longer has dependencies

Behavior change

The Enable parallel model reference builds configuration parameter no longer depends on the Rebuild and Never rebuild diagnostic configuration parameters. When Rebuild is set to Never, the software does not rebuild model reference targets, and the Enable parallel model reference builds configuration parameter does not start a parallel pool of workers.

Previously, the Enable parallel model reference builds configuration parameter was disabled when Rebuild was set to Never and Never rebuild diagnostic was set to None.

For more information, see Enable parallel model reference builds.

Port and parameter mismatch and Model block version mismatch configuration parameters will be removed

Still runs

The Port and parameter mismatch and Model block version mismatch diagnostic configuration parameters will be removed in a future release. After removal, Model blocks will refresh without diagnostics for port, parameter, or version mismatches. This behavior is the current default behavior.

To update your code, remove commands that interact with the ModelReferenceIOMismatchMessage and ModelReferenceVersionMismatchMessage configuration parameters.

For more information about Model block refreshes, see Refresh Model Blocks.

Models created from subsystems use referenced configuration sets with overridden parameter values

Behavior change

When you convert a subsystem to a model, and the parent model references a freestanding configuration set, the new model is more likely to reference the configuration set. Suppose the configuration set has parameter values that prevent the new model from being used as a referenced model. To support using the new model as a referenced model, the new model overrides the incompatible parameter values. The Model Reference Conversion Advisor lists the overridden parameters.

In previous releases, to support using the new model as a referenced model, the conversion copies a modified version of the configuration set to the new model.

For information about configuration references, see Share a Configuration with Multiple Models.

For information about the conversion process, see Convert Subsystems to Referenced Models.

Models created from subsystems retain initial conditions of bus element ports

Behavior change

When you convert a subsystem to a model, and the subsystem includes Out Bus Element blocks that specify initial conditions, the new model now retains these initial condition values.

In previous releases, the Initial output and Output when disabled block parameters are reset during the conversion process.

For information about initial conditions at bus element ports, see Specify Initial Conditions for Bus Elements.

For information about the conversion process, see Convert Subsystems to Referenced Models.

Model reference conversion detects unsupported device driver blocks

Behavior change

When you convert a subsystem to a model, the conversion now checks for device driver blocks, which are not supported in referenced models. When a subsystem contains a device driver block, the conversion now detects the issue and fails.

In previous releases, the conversion succeeds, but compiling or simulating the new model hierarchy results in an error.

For information about device driver blocks, see Structure of Device Driver System Object.

For information about the conversion process, see Convert Subsystems to Referenced Models.

Auto output signal handling selects linear interpolation in some cases

Behavior change

When you set the Output signal handling parameter of a Model block to Auto, the software selects the output signal handling based on the configuration of the local solver and the characteristics of the Model block outputs. The software now selects the new linear output signal handling option in some cases. With linear output signal handling:

  • Simulation results are closer to the results of a simulation that uses a single solver.

  • Model block output signals retain continuous sample time across the model reference boundary.

The table summarizes the output signal handling selection for Model blocks that set Output signal handling to Auto before R2026a and in R2026a.

Model Block OutputsLocal Solver ConfigurationAuto Selection Before R2026aAuto Selection in R2026a
Any continuous double outputsVariable-stepZero-order holdLinear
Fixed-step with smaller step size than parent solver

All outputs have one or both of these characteristics:

  • Sample time other than continuous

  • Data type other than double

Variable-stepZero-order hold
Fixed-step with smaller step size than parent solver
Any output supported by local solversFixed-step with larger step size than parent solverUse solver interpolant

find_system arguments and Simulink.FindOptions properties have been renamed

Behavior change

Several find_system arguments and Simulink.FindOptions properties have been renamed:

  • LookUnderModelBlocks has been renamed to SearchInsideModelReferences.

  • LookInsideSubsystemReference has been renamed to SearchInsideSubsystemReferences.

  • LookUnderMasks has been renamed to SearchUnderMasks.

  • FollowLinks has been renamed to SearchInsideLibraryLinks.

The previous names continue to work.

Variant Manager for Simulink: Consistent removal of test harnesses during model reduction

Behavior change

Starting in R2026a, when you reduce a model that has an associated internal or external test harness, Variant Reducer removes the harness and its association from the reduced model. The Variant Reducer summary report and the variant_reducer.log file provide information about the removed harnesses. Additionally, you can no longer use Variant Reducer or the Simulink.VariantManager.reduceModel function to reduce a test harness model. In previous releases, Variant Reducer handled models with external and internal test harnesses differently. The user interface and programmatic function did not clearly report how they processed test harnesses.

For more information on Variant Reducer, see Reduce Variant Models Using Variant Reducer.

Variant Manager for Simulink: Change in default reduction mode for models without variant configurations

Behavior change

For models without predefined variant configurations, Variant Reducer now sets Reduction mode to Current variant control values by default. This mode allows you to reduce the model based on the variant control variable values defined in the base workspace or data dictionary used by the model. Previously, the default reduction mode for such models was Specify variant control values.

For more information on Variant Reducer, see Reduce Variant Models Using Variant Reducer.

Enable simulation-time tuning of variant parameters in a protected model by specifying associated variant controls as tunable parameters

Behavior change

When you protect a Simulink model that uses variant parameters (Simulink.VariantVariable objects) with startup variant activation time, make the variant parameters tunable during simulation by specifying only the associated variant controls (Simulink.VariantControl objects) as tunable parameters. In previous releases, you also had to specify the variant parameters as tunable.

Variant parameters with a variant activation time other than startup are not tunable in protected models, so you cannot select their variant controls as tunable parameters.

For example, this image shows the two variant parameters K and Kv that use the Simulink.VariantControl object V.

Simulink.VariantVariable dialog box shows the variant conditions and values for the variant parameters K and Kv.

When you protect the model that uses these variant parameters by using Protected Model Creator (Simulink Coder), select V as a tunable parameter for simulation to configure K and Kv as tunable.

Simulation Options tab in the Protected Model Creator window shows the variant control V selected.

When you protect the model using the Simulink.ModelReference.protect (Simulink Coder) function, specify the Simulink.VariantControl objects by using the TunableParameters (Simulink Coder) name-value argument.

Simulink.ModelReference.protect(modelName,TunableParameters=["V"]);

When you get the list of tunable parameters for such a protected model using the Simulink.ProtectedModel.getTunableParameters (Simulink Coder) function, the function returns only the Simulink.VariantControl objects that you specified as tunable parameters.

The Simulink.ModelReference.protect function reports a warning if the specified variant control has a variant activation time other than startup.

Project and File Management

Comparison Tool: Save comparison reports as PDF/A file

Starting in R2026a, you can save comparison reports as a PDF/A file interactively and programmatically. PDF/A comparison reports are not supported on Linux®. For more information, see Export, Print, and Save Model Comparison Results and visdiff (MATLAB).

Determine if file contains System Composer block diagram, Simulink test harness, or Subsystem block without loading file

The Simulink.MDLInfo has new properties to determine which type of model file a file without loading the file.

  • Use the SimulinkSubdomain property to find if the file contains a Simulink model or a System Composer™ block diagram without loading the file.

  • Use the IsTestHarness property to determine if the model file contains a Simulink test harness.

  • Use the IsSubsystem property to determine if the model file contains a Subsystem block.

Compare template to blank model template

You can now compare your model templates to the blank model template directly from the Simulink Start Page. For more information, see Compare Template to Blank Model Template.

Simulink Editor prompts when model is created using non-default built-in blank template

When you create a new model from the Simulink Stat Page using a built-in blank template that is different than the default Blank Model template, the Simulink Editor now informs you about the differences and provides a hyperlink to inspect differences. Clicking on the hyperlink launches an SLTX comparison to view the configuration settings differences between the templates.

Data Management

 Improved comparison and merge for Simulink data dictionaries

Starting in R2026a, Simulink provides improved side by side comparison and merging of data dictionaries using the Comparison Tool and adds support for resolving conflicts in data dictionaries using the Three-Way Merge Tool.

By using these tools, you can:

  • Clearly highlight changes, conflicts, and merge choices for Design Data and Architectural Data sections of data dictionaries.

  • More easily visualize differences between dictionaries and merge choices in the context of other, unchanged elements.

  • Using the Three-Way Merge Tool, manually select which version of each change you want in the target file.

To programmatically publish comparison reports for data dictionaries and to automate report generation for continuous integration (CI) workflows, use the visdiff function:

comparison = visdiff(slddFile1,slddFile2);
file = publish(comparison);
web(file)

For more information on data dictionary file comparison, see View and Revert Changes to Dictionary Data.

Signal Editor: Block and tool synchronization

The Open Signal Editor button in the Signal Editor block now opens a version of the Signal Editor tool that is synchronized with the Signal Editor block. In releases prior to R2026a, all instances of the Signal Editor tool had the same characteristics. For more information, see Differences Between the Signal Editors.

Signal Editor block default

The block version of the Signal Editor tool has these changes:

  • When you click Open Signal Editor, the Signal Editor tool now opens populated with the active scenario. The active plot shows the last signal in the scenario.

  • A new Active column in the hierarchy shows the active scenario for the block. To change the active scenario, click the associated button.

  • New input properties support the corresponding block parameters.

    Signal Editor BlockSignal Editor Interface

    Output as bus object

    Output a bus signal

    Bus object

    Select bus object

    Enable zero-crossing detection

    Enable zero-crossing detection

    Form output after final data value by

    Form output after final data value by

    Sample time

    Sample time

    Note

    The Interpolate data and Unit parameters of the Signal Editor tool are only reflected in the Signal Editor block when the block parameter Use properties from is set to Signal data in MAT file.

  • To change the active scenario in the Signal Editor tool, click the associated button in the hierarchy Active column, and then click Save. Closing the tool updates the Signal Editor block.

  • Block parameters become read-only when you open the Signal Editor tool. To change control from the Signal Editor tool to the Signal Editor block, close the Signal Editor tool.

  • To see parameter changes for an active signal from the Signal Editor block in the associated Signal Editor tool, click the active signal in the signal hierarchy.

Signal Editor: Updates

The Signal Editor has these updates:

  • The tool now supports multisignal and multiscenario selections in the Inputs signal hierarchy pane:

    • Select all signals with same name under all scenarios

    • Select all signals under same scenario

    • Select all scenario children

    • Select all scenarios

  • The tool has smoother selection and move point actions. You can now click and drag a point on the canvas. Prior to R2026a, to select and move a point, you clicked and released the point, and then clicked and dragged it.

  • The Supported File Types table has a new column, File Extension, that lists the file extensions supported by the respective import file type.

Programmatically compare model configuration sets

With R2026a, you can programmatically compare the parameter values in two model configuration sets by using the new isequal function for their two Simulink.ConfigSet objects. The function indicates whether the configurations are equal and, if they are not, returns a list of parameters that differ between the configurations. For more information, see Compare Simulink Model Configuration Parameter Values.

Type Editor enhancements to align with Interface Editor

To aid the transition between the docked Type Editor and Interface Editor as you navigate between Simulink models and architecture models, the Type Editor supports new functionality and has updated button icons.

  • When you create a type, you can enter a new name right away. In previous releases, you must double-click the default name to enter a new name.

  • To sort types, you can now click individual column headers. In previous releases, the Type Editor does not support sorting.

  • When you specify a bus object in the Type column, the Type Editor displays the bus hierarchy regardless of whether you include the Bus: prefix. In previous releases, the bus hierarchy displays only when you include the Bus: prefix.

  • When you rename a bus object, the Type Editor updates any references to the bus object in other bus objects. The Type Editor does not update references to the bus object in value types.

  • The Link external sources button has a new icon . The former Link external sources icon is now used by the Open standalone Type Editor button . This change aligns the button icons used by the Type Editor and the Interface Editor for similar actions. In previous releases, the Open standalone Type Editor button has a different icon .

For more information, see Type Editor and Interface Editor (System Composer).

 Functionality being removed or changed

Avoid overwriting data dictionary files that have changed since last load

Behavior change

Starting in R2026a, when you save a data dictionary file (.sldd) in Model Explorer that changed on disk since it was last loaded, Simulink provides these options:

  • Keep both — Simulink creates a copy of the data dictionary file on the disk, appending the filename of the copy with a suffix that you provide. Simulink then overwrites the original with your changes.

  • Overwrite — Simulink saves your changes and overwrites the data dictionary file on the disk with your changes.

  • Reload — Simulink discards your changes and reloads that data dictionary from the file on the disk. If the data dictionary is in a hierarchy of other data dictionaries, those dictionaries are also reloaded from the disk.

  • Cancel — Simulink does not save your changes.

You can also specify these options when saving a data dictionary from the command line by using the saveChanges function.

Previously, if the data dictionary file had changed on disk since the data dictionary was last loaded, your changes would overwrite the data dictionary file without notification.

For more information on Simulink data dictionaries, see What Is a Data Dictionary?

Model configuration set in data dictionary not allowed access to data in dictionaries not referenced by the dictionary containing the configuration set

Behavior change

In a Simulink data dictionary hierarchy, a model configuration set contained in a dictionary can no longer access data stored in another dictionary that is it not directly or indirectly referenced by the dictionary containing the configuration.

Regular expression support removed from Configuration Parameters dialog box search

The search box in the Configuration Parameters dialog box no longer supports regular expressions.

Block behavior depends on frame status of signal parameter removed from Configuration Parameters dialog box

Errors

The Block behavior depends on frame status of signal parameter inside the Diagnostics > Compatibility category of the Configuration Parameters dialog box has been removed.

Block Enhancements

 Enhanced C++ language support for C Function block

Starting in R2026a, the C Function block addresses the limitations mentioned in C and C++ Language Limitations and Limitations which were previously applicable to locally specified C and C++ custom code. To specify custom code locally, the Configure custom code settings Gear icon. parameter must be set to Use Block Custom Code.

Blockset Designer updates

In Blockset Designer, you can now change the implementation block name directly in the Implementation Block Name text box. In releases prior to R2026a, you had to click the Edit button to edit the implementation block name. For more information, see Change Implementation Block Name.

Model time variant linear implicit systems using Descriptor State-Space blocks

You can now model time variance in linear implicit systems using the Descriptor State-Space block by tuning the E, A, B, C, and D parameters during simulation.

The pattern of the mass matrix must remain fixed. When you tune the E parameter during simulation, only elements that have nonzero values in the initial matrix are tunable.

The values you can specify when you tune the A, B, C, and D parameters depend on whether you specify the initial value as a sparse or full matrix and the value of the new Parameter tunability parameter.

To tune these parameters using the Parameter Writer block, specify the parameters as full matrices.

Tune Data parameter of From Workspace blocks without rebuilding rapid accelerator simulation target

Tuning the Data parameter of From Workspace blocks no longer requires rebuilding the rapid accelerator simulation target. As a result, you can tune the parameter in rapid accelerator simulations that disable the up-to-date check and in applications deployed using Simulink Compiler.

To tune the Data parameter of a From Workspace block without rebuilding the rapid accelerator simulation target:

  1. Define the parameter value as a variable.

  2. Create a Simulink.SimulationInput or Simulation object to configure the simulation.

  3. Tune the parameter value using the setVariable function.

These requirements and limitations apply:

  • Tuned values must have the same format, numeric data type, complexity, and dimensions as the value of the parameter used to build the simulation target.

  • The variable used to define the Data parameter must not define any other parameters in the model.

  • Tuning input data for a bus or an array of buses is not supported.

  • Tuning the Data parameter is not supported for From Workspace blocks inside referenced models.

Change bus element port or function port associated with block

Editing the port name in an In Bus Element, Out Bus Element, Function Element Call, or Function Element block label can now assign the block and its element to a different port. Suppose your model has an input port named MyPort. You add an In Bus Element block, which corresponds with the default port, InBus. To associate the new block with MyPort instead of InBus, in the block label, double-click InBus and enter MyPort.

For more information, see In Bus Element, Out Bus Element, Function Element Call, or Function Element.

Bus Creator and Bus Selector block dialog boxes open and refresh faster

Both opening and refreshing a Bus Creator or Bus Selector block dialog box are faster in R2026a than in R2025b.

In R2025b, opening these dialog boxes for a large bus hierarchy might seem to make Simulink hang. In R2026a, these dialog boxes open faster, displaying a busy overlay while the bus hierarchy loads.

For example, create a bus hierarchy with 500 levels of hierarchy and 501 leaf elements.

% Open new model
mdl = "BusBlockPerformance";
new_system(mdl)
open_system(mdl)

% Create first bus
add_block("simulink/Sources/Constant",mdl+"/Constant");
add_block("simulink/Sources/Constant",mdl+"/Constant1");
add_block("simulink/Signal Routing/Bus Creator",mdl+"/Bus Creator");
add_line(mdl,"Constant/1","Bus Creator/1");
add_line(mdl,"Constant1/1","Bus Creator/2");

% Create bus hierarchy
prev_bus_blk = "Bus Creator";
for i = 1:499
    constant_blk = "Constant"+num2str(i+1);
    bc_blk = "Bus Creator"+num2str(i);
    add_block("simulink/Sources/Constant",mdl+"/"+constant_blk);
    add_block("simulink/Signal Routing/Bus Creator",mdl+"/"+bc_blk);
    add_line(mdl,constant_blk+"/1",bc_blk+"/1");
    add_line(mdl,prev_bus_blk+"/1",bc_blk+"/2");
    prev_bus_blk = bc_blk;
end

% Create and connect Bus Selector block
add_block("simulink/Signal Routing/Bus Selector",mdl+"/Bus Selector");
add_line(mdl,prev_bus_blk+"/1","Bus Selector/1");

The code to open and close the Bus Creator block dialog box for the top-level bus is about 2.2x faster than in the previous release.

function timingTestBusCreator
open_system("BusBlockPerformance/Bus Creator499");
close_system("BusBlockPerformance/Bus Creator499");
end

The approximate execution times are:

  • R2025b: 1.7 s

  • R2026a: 0.78 s

The code to open and close the Bus Selector block dialog box for the top-level bus is about 2.3x faster than in the previous release.

function timingTestBusSelector
open_system("BusBlockPerformance/Bus Selector");
close_system("BusBlockPerformance/Bus Selector");
end

The approximate execution times are:

  • R2025b: 1.8 s

  • R2026a: 0.79 s

The code was timed on a Windows 11, AMD EPYC 74F3 @ 3.19 GHz test system using the timeit function:

timeit(@timingTestBusCreator)
timeit(@timingTestBusSelector)

Scale magnitude of Complex to Magnitude-Angle block

To scale the magnitude of the Complex to Magnitude-Angle block by a factor of (1/CORDIC gain), select the Scale output by reciprocal of gain factor parameter.

Multiport Switch, Index Vector, Switch, and MinMax block select efficient output data type

The Multiport Switch (Simulink), Index Vector (Simulink), Switch (Simulink), and MinMax (Simulink) blocks have new Output data type inherit options to help select efficient output data types.

For more predictable output data type selection and control over selection priority, consider using the new Inherit: Keep MSB and Inherit: Keep LSB options instead of Inherit: Inherit via internal rule. For an algorithm that heuristically balances range and precision, consider using Inherit: Inherit via internal rule, which can cause undesired results.

Trigonometric Function block update

Starting in R2026a, the Trigonometric Function block algorithm has changed when the block has these settings.

Block ParameterSetting

Function

One of:

  • sin

  • cos

  • sincos

  • cos+jsin

Approximation method

Lookup

Angle unit

radian

For floating- and fixed-point data types in both simulation and code generation, the block now replaces calculations of u/(2*pi) with u*(1/(2*pi)).

  • In releases prior to R2026a, some intermediate results were stored in fixed-point data types equivalent to fixdt(0,WL,WL-3), where WL is the word length.

  • Starting in R2026a, some intermediate results are now stored in fixed-point data types equivalent to fixdt(0,WL,WL+2), where WL is the word length.

Existing models might experience a small output difference on the order of 10-16.

Neighborhood Processing Subsystem block supports custom output size

Before R2026a, the Neighborhood control block for the Neighborhood Processing Subsystem supported only these settings for the Output size parameter:

  • Same: The output matrix has the same dimensions as the input matrix.

  • Full: The output matrix is larger than the input matrix and contains an element for each neighborhood that includes at least one unpadded value from the input matrix.

  • Valid: The output matrix is smaller than the input matrix and contains elements for only the input matrix elements whose neighborhoods did not contain padded values outside the input matrix.

Starting in R2026a, you can generate other output sizes from the Neighborhood Processing Subsystem block. The Neighborhood block parameter Output size supports a new value, Custom, which enables a new Neighborhood block parameter, Padding size.

The Padding size parameter accepts a vector of nonnegative scalars that define the amount of padding for the start and end, respectively, of each dimension of the input matrix. For example, for a 2-dimensional input matrix, provide a vector of the form [a b c d] where each element is a nonnegative scalar. a defines the amount of padding at the start of the first dimension, b defines the amount of padding at the end of the first dimension, c defines the amount of padding at the end of the second dimension, and d defines the amount of padding at the end of the second dimension.

The following screenshot demonstrates the parameter behavior by passing a 5-by-5 matrix through Neighborhood Processing Subsystem blocks that have different padding sizes. Each subsystem uses a 1-by-1 neighborhood and returns the input value without modifying it. For the padded values, each subsystem uses the constant value 0.

Model that passes a 5-by-5 matrix through three Neighborhood Processing Subsystem blocks. Each element of the input matrix contains the value 1. The first subsystem has a padding size of "[0 0 0 0]" and produces a copy of the input matrix. The second subsystem has a padding size of "[1 0 2 0]" and returns a matrix that contains a row of zeros and two columns of zeros above and to the left of the input matrix. The third subsystem has a padding size of "[0 1 0 2]" and returns a matrix that contains a row of zeros and two columns of zeroes below and to the right of the input matrix.

Use custom padding sizes to configure the dimensions of the output data in image processing tasks.

Step block programmatic name updates

These Step block programmatic names have changed.

Previous NameNew Name
BeforeInitialValue
AfterFinalValue

Existing applications continue to work.

 Adding Signal Builder block to model warns

The Signal Builder block is no longer recommended. Use the Signal Editor block instead.

 Compatibility Considerations

For more information about the warning, see Adding Signal Builder block warns.

C Caller Block: Observe custom code global variables wirelessly using observers

Starting in R2026a, you can observe exported global variables used by a C Caller block using the Observer Port (Simulink Test) and the Observer Reference (Simulink Test) blocks. You can verify and validate those global variable values used in your external custom code without exposing these variables as C Caller block output in the main model. To use the observers, you must have a Simulink Test license. For more information, see Access Model Data Wirelessly by Using Observers (Simulink Test).

C Caller Block: Use dialog box buttons to add or delete global variables

Starting in R2026a, you can use the C Caller block dialog box buttons Add and Remove to add global variables from custom code or delete global arguments from the block, respectively. To automatically infer global variables from the custom code using the block dialog box, use the Magic wand button.

If block enhancements

Starting in R2026a, the If block uses a new parser that allows you to:

  • Modify the If block input port labels to meet your modeling requirements. This change allows you to tailor the logical expressions within the block using custom names. Previously, you could only use the default names such as, u1, u2, and so on for inputs.

    The default port label u1 of the If block is changed to a new label sig1.

  • Use a range of logical expressions that were not previously supported, including expressions that use:

    • Tunable parameters.

    • General MATLAB expressions, such as x1 > x2 + 5.

    • Data objects such as Simulink.Parameter, Simulink.Signal with custom storage classes. For more information, see Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).

    • Fixed-point data type.

    • Enumerated data type.

    • MATLAB structure arrays.

    • Expressions with:

      • Arithmetic functions — ceil, floor, abs, and sign.

      • Trigonometric functions — sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, and tanh.

      • Exponential, logarithmic and root functions — log, log10, exp, and sqrt.

These capabilities are not supported for the Model Slicer tool in Simulink Check.

Discrete FIR Filter Block: Generate SIMD code for direct form transposed filter structure

Generate SIMD code for the Discrete FIR Filter block when you set the filter structure to Direct form transposed by using the model configuration parameter Leverage target hardware instruction set extensions. For more information, see Code Generation.

To generate SIMD code from the Discrete FIR Filter block, you must have an Embedded Coder license.

Discrete FIR Filter Block: Improved simulation speed for direct form transposed filter structure

The simulation speed of the Discrete FIR Filter block has improved when you set the Filter structure to Direct form transposed. You can see the improvement in simulation speed when the block:

  • Simulates in Normal mode

  • Simulates in Accelerator mode

  • Simulates in Rapid Accelerator mode

  • Belongs to a model reference and operates in Normal mode

  • Belongs to a model reference and operates in Accelerator mode

Discrete FIR Filter Block: Generate memory-efficient code

Generate memory-efficient code from the Discrete FIR Filter block when you set these parameters:

  • Filter Structure to Direct form

  • Input processing to Columns as Channels (frame based)

For more information, see Generate memory-efficient code in the Discrete FIR Filter block reference page.

Programmatically control cursors and get descriptive statistics for signals in the Record block and Playback block

Starting in R2026a, you can programmatically add and position cursors on plots in the Record block and Playback block. For example, add two cursors to the Playback block and position the cursors at 3 and 7 seconds.

set_param("MyModel/Playback","ShowCursor",2)
set_param("myModel/Playback","CursorPositions",[3,7])

You can also get descriptive statistics for signals in the Record and Playback blocks using the new signal ID parameter. To get a set of descriptive statistics for a signal using the signal ID, use Simulink.analytics.getMetrics. To get a single descriptive statistic, use Simulink.sdi.Signal object functions such as max and min.

pbSigIDs = get_param("myModel/Playback","SignalIDs");
>> sigStats = Simulink.analytics.getMetrics(pbSigIDs(1))
sigStats = 

  struct with fields:

           min: -0.9962
           max: 0.9996
    peakToPeak: 1.9957
          mean: 0.1744
        median: 0.3115
           std: 0.6704
           rms: 0.6863

To focus your analysis on a specific time range, combine cursor placement and signal statistics. Define the time span with cursors set either programmatically or interactively. To analyze signal statistics within this time span, use get_param to retrieve the cursor positions. Then use the positions as the start and end times in Simulink.analytics.getMetrics.

sigBounds = get_param("myModel/Playback","CursorPositions");
sigStats = Simulink.analytics.getMetrics(pbSigIDs(1),sigBounds(1),sigBounds(2))
sigStats = 

  struct with fields:

           min: -0.9962
           max: 0.6570
    peakToPeak: 1.6532
          mean: -0.3948
        median: -0.4646
           std: 0.5189
           rms: 0.6421
Playback block showing a sine wave with cursors at 3 and 7 seconds.

Add blocks to dashboard panels using quick insert menu

Dashboard panels are virtual dashboards to which you can add blocks from the Dashboard library (including the Customizable blocks library) or the Aerospace Blockset™ library. The panels float above the model canvas and follow you through the model hierarchy. Starting in R2026a, you can add blocks to dashboard panels using the quick insert menu.

To do so, enter edit mode. First, select the panel. Then, in the Simulink Toolstrip, on the Panels tab, click Edit Panels. If needed, resize the panel to make the panel big enough to hold the block you want to add by dragging the panel edges outward. Adding blocks that are bigger than the panel is not supported.

To add the block, double-click where you want to add the block. You must click a blank space on the panel. The quick insert menu appears. Start entering the name of the block you want to add. Select the block you want to add in the list of search results. The new block appears in the panel.

For more information about dashboard panels, see Getting Started with Dashboard Panels.

A model contains a blank dashboard panel. An Edit block from the Customizable Blocks library is added to the panel using the quick insert menu.

Use the customizable Edit block to change parameter or variable values

The Edit block connects to a parameter or variable value in your model. You can change the connected value before or during simulation by entering a new value in the edit box. When you use the version of the Edit block in the Customizable Blocks library, you can customize the appearance of the block to look like an edit box in an existing digital interface.

  • Choose from a list of WYSIWYG (what you see is what you get) fonts that look the same on all platforms.

  • Change the font size.

  • Change the text color.

  • Make the text bold, italic, or underlined.

  • Change the text position within the block.

  • Add a background image or choose a background color.

  • Add a foreground image.

Use the Edit block with other dashboard blocks to build an interactive dashboard of controls and indicators for your model.

Edit block with the number 42 entered in the edit box

Programmatically switch dashboard panel tabs

Dashboard panels can have multiple tabs. You can now programmatically switch which tab a panel displays using the simulink.dashboard.switchPanelTab function. For example, you can use this capability to create a dashboard that switches tabs when you click a button by entering the simulink.dashbaord.switchPanelTab function in the callback function that runs when you click the button.

simulink.dashboard.switchPanelTab(model,tab)

model is the handle or name of the top-level model containing the tab to which you want to switch. Specify the handle as a scalar, and the name as a string or character array. For information about how to get a model handle, see Get Handles and Paths. tab is the name of the tab to which you want to switch, specified as a string or character array. To use the simulink.dashbaord.switchPanelTab function, the model you specify in the input arguments must be open. Loading the model is not sufficient.

The model named myModel contains a dashboard panel with two tabs, respectively named A and B. The panel displays tab A. The command simulink.dashboard.switchPanelTab("myModel","B") is entered in the command window. The panel displays tab B.

Programmatically check whether a block is a dashboard block

Dashboard blocks are blocks from these libraries:

  • Dashboard library (including the Customizable Blocks sublibrary)

  • Aerospace Blockset library

You can now programmatically check whether a block is a dashboard block using the simulink.dashboard.isDashboardBlock function.

tf = simulink.dashboard.isDashboardBlock(block)

block is the block handle or block path. For information about how to get a block handle or path, see Get Handles and Paths.

If the block is a dashboard block, the function outputs 1. If not, the function outputs 0.

Use bulk clipboard operations on mask parameters

Starting in R2026a, you can select multiple parameters from Mask Editor and use keyboard shortcuts or mouse pointers for clipboard operations. You can use bulk clipboard operations within the same mask or across multiple masks, which is helpful when you deal with large scale mask definitions. Bulk clipboard operations preserve the properties of the mask parameters, such as constraints and default values. Simulink retains callbacks associated with the mask parameter, if you save them within the mask. However, Simulink does not retain callbacks when you save them in a separate callback file.

Mask Editor: Enhanced constraint manager user interface to manage constraints

Starting in R2026a, you can define and manage all types of parameter and port constraints by using the enhanced Constraints tab in Mask Editor.

Enhancements to the Constraints tab include:

  • Add all types of parameter and port constraints from the Constraint Gallery panel on the left side of the Constraints tab instead of selecting the constraint type from the toolstrip.

  • Simulink displays predefined constraints, called as Commonly Used Constraints, in the Constraint Browser panel. You can associate these constraints with mask parameters without creating them manually.

  • To avoid unintended changes, shared constraint files are locked. To modify a shared constraint file, click Edit File on the toolstrip.

  • Associate parameters and ports to their respective constraints by using the Associations section of the Constraints tab. Previously, you associated constraints to parameters from the Parameters and Dialog tab.

Constraint manager displays a parameter constraint associated to a parameter temperature

For more information, see Author Parameter and Port Constraints Using Standalone Constraint Manager.

MATLAB System properties are validated in the mask dialog box when focus moved to another control

MATLAB System properties with validation functions such as mustBeNonpositive and mustBeMember are validated in the mask dialog box of a MATLAB System block when focus is moved to another control.

Mask dialog box of a MATLAB System block. An error is displayed when the parameter IC3_base is set to a negative value.

Use fully qualified name to invoke custom functions in a mask callback file

When you save a mask callback file with a model, use the fully qualified names to invoke custom functions. If the callback file resides in a folder within the model, to avoid path-related errors, reference the function with its full path. For example, if the name of the model is engine.slx, the mask callback is vehicles.m, and the custom function name is calculateForce, then invoke the function as engine.vehicles.calculateForce() in the mask callback file.

Code tab of the Mask Editor displaying callback saved in a callback file.

Enhancements to Graphical Icon Editor

Graphical Icon Editor has these enhancements:

  • Default authoring mode for block icons — Graphical Icon Editor is now the default authoring mode to design masked block icons. To switch to mask drawing commands, in the Authoring Mode section of the toolstrip, click Graphical and then select Drawing Commands.

  • Customize shape of block frame — To customize the shape of the block frame, in the Icon Properties pane go to the Transform section, and select a shape from the Frame list. Click edit icon to modify the frame as desired and then click close button. Preview the icon in Simulink to view the modified block frame.

  • Quick insert element shapes — Search for and insert shapes on the canvas. Double-click the icon canvas and type the name of a shape. A drop-down list of available shapes appears in the drop-down list. Select a shape from the list to insert it into the canvas. Alternatively, in the Tools pane, select Shape Finder to search and insert shapes.

  • Add port labels to block icons — To specify a port label, in Tools pane, select Port Label.

  • Properties pane enhancements — Updates to the Icon Properties, Element Properties and Text Properties panes make it easier to navigate and set various properties. You can also automatically generate port labels and associate parameters and expressions with text elements.

For more information, see Graphical Icon Editor Overview.

View of Graphical Icon Editor

Define block mask type in a MATLAB System class

Starting in R2026a, you can use the Type property of matlab.system.display.Header class to specify the type of block mask in a MATLAB System class. The type property helps you to identify blocks having a specific mask type within a model.

For example, you can set the mask type of a block to Aero and filter blocks having mask type set as Aero. For more information, see matlab.system.display.Header.

Display mask parameters in a nested structure using the Parameter Tree container

Use the Parameter Tree container in the Mask Editor to display mask parameters in a nested structure. The Parameter Tree container supports Group Box containers and Edit, Check Box, Popup, and Combo Box parameters.

Parameter tree displaying parameters in a nested structure.

For more information, see Use Mask Containers to Group Parameters on Mask Dialog Box. To programmatically create and group mask parameters in a parameter tree container, use methods of Simulink.dialog.ParameterTree class.

Associate predefined constraints with mask parameters

Starting in 2026a, Simulink displays predefined constraints in the Constraints tab of the Mask Editor. You can associate these constraints with mask parameters without creating them manually. These constraints are available only for the Parameter Constraint type. The available constraints include:

  • Numeric

  • NumericScalar

  • NumericScalarPositive

  • NumericScalarPositiveInteger

  • NumericScalarPositiveZero

Constraints tab of the Mask Editor. The predefined constraint NumericScalarPositive is applied to a mask parameter.

The predefined constraints are read-only, and you cannot modify their rules. To associate a constraint with a mask parameter, select the parameter from the Associations section.

For more information, see Use Port Constraints to Validate Input and Output Signals.

Customize custom table parameter in MATLAB System block

To customize a custom table parameter within a MATLAB System block, use the matlab.system.display.Table class in the System object™ class definition file. You can specify the column type as Edit, Popup, or Check Box. For Popup column type, use the TypeOptions property to list the Popup options. Additionally, you can set the Evaluate option for the column to evaluate any MATLAB expression present in the cell.

For more information, see Create Table Parameter for MATLAB System Block.

Banner notification to synchronize System object mask definition XML file

When you modify a MATLAB System class associated with a MATLAB System block, the corresponding mask definition XML file can become outdated. Starting in R2026a, when you modify a MATLAB System class, a notification banner prompts you to open the Mask Editor and perform Save Mask. This action updates the mask definition in the XML file.

Notification on a stale mask customization

 Functionality being removed or changed

Adding Signal Builder block warns

Warns

The Signal Builder block is no longer recommended. Adding the Signal Builder block to a model now returns a warning:

Warning: Signal Builder block will be removed in a future release.

Old lookup table blocks being removed

The obsolete versions of these blocks will be removed in a future release. Use the listed replacement blocks instead.

Obsolete BlockReplacement Block

PreLookup Index Search

Prelookup

Interpolation (n-D) Using PreLookup

Interpolation Using Prelookup

Lookup Table

1-D Lookup Table

Lookup Table (2-D)

2-D Lookup Table

Existing models will continue to run until removal.

S-Function blocks will no longer support non-contiguous inputs

Still runs

Starting in R2026a, S-Function blocks support only contiguous inputs. Contiguous input functions provide faster access and improved performance by removing the need for a double pointer to access signals. It is recommended to use the ssSetInputPortRequiredContiguous function to specify input signal type and then access input signals by using the contiguous input functions ssGetInputPortSignal and ssGetInputPortRealSignal instead of ssGetInputPortSignalPtrs and ssGetInputPortRealSignalPtrs, respectively.

Three Dashboard library blocks will be replaced with equivalents from Customizable Blocks library

Behavior change in future release

The Rocker Switch, Slider Switch, and Toggle Switch blocks in the Dashboard library will be replaced with their more customizable equivalents from the Customizable Blocks library in a future release. The new blocks will look the same as the blocks they replace and behave the same in the model. The options for configuring and customizing the blocks will change. The block types will also change.

Block Parameters dialog box table for connecting dashboard blocks will be removed

Still runs

In a future release, connecting blocks from the Dashboard library or the Customizable Blocks library using the table in the Block Parameters dialog box will no longer be supported. Use connect mode instead. For information about connect mode, see Connect Dashboard Blocks to Simulink Model.

Imported and exported type handling in C Function block

Behavior change

  • Imported type handling — Starting in R2026a, if you do not have a header file available with simulation-compatible type definitions for imported enumerated, bus, or alias types, the block cannot resolve these types and issues an error. To resolve this error, select the Imported type headers are not available for simulation parameter in the C Function block dialog box.

    Previously, if the C Function block could not find type definitions for enumerated, bus, or alias types, the block would automatically generate the type definitions for simulation purposes.

  • Exported type handling — Starting in R2026a, if you specify header files containing type definitions for enumerated, bus, alias types for simulation while that type is exported, you might receive a parser error indicating that the types are already defined. To resolve this error, select the Exported types are defined in simulation custom code headers parameter in the C Function block dialog box.

    Previously, if the C Function block was able to find the type definition for enumerated, bus, or alias types, the block did not regenerate type definitions for simulation.

Connection to Hardware

Support model referencing for driver blocks on Arduino hardware

Starting R2026a, you can use all the driver blocks from Simulink Support Package for Arduino® Hardware library inside a model reference. A model reference is a reference to another model using a Model block. These references create model hierarchy and each referenced model has a defined interface that specifies the properties of its inputs and outputs.

For more information on how to use model referencing with Arduino driver blocks in Simulink, see Model Reference Support for Arduino Driver Blocks in Simulink.

Detect state of touch pins on Arduino-compatible ESP32 hardware

This release introduces the ESP32 Touch Sense block for Simulink Support Package for Arduino Hardware. You can use the built-in 10-channel capacitive touch sensor module on the ESP32 board to sense the state of capacitive touch pins on Arduino-compatible ESP32 WROOM and WROVER boards. The block also provides a raw sensor value that represents the capacitance value at the pin you touch.

For more information on capturing images using the ArduCam OV2640 camera module with Arduino-compatible ESP32 hardware, see Capture Images with Touch Sense Using ArduCam OV2640 Camera Module and Arduino Compatible ESP32 Hardware.

Support for handling serial interrupt on Arduino SAMD hardware

Starting R2026a, Simulink Support Package for Arduino Hardware supports handling serial interrupts for the SAMD family of Arduino hardware. The support package introduces Serial Receive and Serial Transmit blocks that supports serial communication interface (SERCOM) interrupt handler. You can access these new blocks from the Advanced > SAMD library.

For more information on configuring SERCOM properties, see Sercom properties. For more information on implementing motor speed control using IMU data and SERCOM serial interrupts on Arduino, see IMU-Based Motor Speed Control on Arduino Using SERCOM Serial Interrupts.

Support added for ThingSpeak and MQTT on Arduino UNO R4 Wi-Fi hardware

Starting R2026a, Simulink Support Package for Arduino Hardware supports deploying a Simulink model containing these blocks on Arduino UNO R4 Wi-Fi® board:

Support added for built-in LED Matrix on Arduino UNO R4 Wi-Fi hardware

Starting R2026a, Simulink Support Package for Arduino Hardware introduces the 12x8 LED Matrix block to configure and control the 12x8 built-in LED matrix on Arduino UNO R4 Wi-Fi board. You can use this block to display graphics. To create a frame to illuminate a target pixel on the built-in LED, use the 12x8 Matrix block and check individual check boxes.

Support added for BLE on Arduino UNO R4 Wi-Fi and Nano RP2040 Connect hardware

Starting R2026a, Simulink Support Package for Arduino Hardware supports deploying a Simulink model containing BLE Send and BLE Receive blocks on Arduino UNO R4 Wi-Fi and Nano RP2040 Connect boards. You can now send and receive data using the Bluetooth® low energy (BLE) protocol on your Arduino UNO R4 Wi-Fi and Nano RP2040 Connect boards.

For more information on configuring BLE properties, see BLE properties.

Support for on-board CAN on Arduino UNO R4 hardware

Starting R2026a, Simulink Support Package for Arduino Hardware supports deploying a Simulink model containing On-board CAN Receive and On-board CAN Transmit blocks on Arduino UNO R4 Wi-Fi and Minima boards.

Support for secure MQTT data communication on Arduino-compatible ESP32 and Raspberry Pi Pico W hardware

Starting R2026a, Simulink Support Package for Arduino Hardware supports establishing a secure MQTT connection between the server and a client using certificate-based authentication. You can now configure MQTT parameters such as specifying an SSL certificate and add a broker client key to authenticate the connection to the server.

For more information on configuring MQTT properties, see MQTT properties.

For more information on securely publishing and subscribing to messages on a Mosquitto™ broker using MQTT blocks on Arduino, see Securely Publish and Subscribe to Messages on Mosquitto Broker Using Arduino Hardware and Generate SSL/TLS Credentials for Mosquitto MQTT Broker.

MATLAB Function Blocks

Identify assumed doubles in MATLAB function report

When you do not specify a size for the output of a MATLAB Function block, Simulink assumes that input variables have type double during size propagation. Starting in R2026a, the MATLAB function report identifies these variables by using the indicator double (assumed). See MATLAB Function Reports. Use this indicator to help you to debug downstream issues in your code. For example, this indicator can help you to identify if a function passes an assumed double to a function that does not expect a double. To prevent assumed doubles, explicitly specify the sizes of all output variables.

Input Argument Validation: Use multiple repeating input arguments in non-entry-point functions

Starting in R2026a, you can use arguments (MATLAB) blocks in non-entry-point functions that contain multiple repeating input arguments. See Generate Code for arguments Block That Validates Input and Output Arguments.

In previous releases, MATLAB Function blocks supported only a single repeating input argument to a non-entry-point function.

Use handle classes that have custom copy functionality

Starting in R2026a, MATLAB Function blocks can contain MATLAB functions that use subclasses of the matlab.mixin.Copyable (MATLAB) abstract class. These subclasses inherit:

  • A public copy (MATLAB) method that makes a shallow copy of a subclass instance

  • A protected copyElement (MATLAB) method that you can override to control the copy behavior of your subclass

MATLAB Function blocks support both the copy and copyElement methods. MATLAB Function blocks also support the NonCopyable property attribute, which you can use to indicate that you do not want to copy a particular property value. See Implement Copy for Handle Classes (MATLAB).

Code generation for more toolbox functions

In R2026a, you can generate code for additional toolbox functions and objects. For a list of all functions and objects that are supported for code generation, see:

These are links to the release notes of some toolboxes that added code generation support in R2026a:

Simulink

Starting in R2026a, you can use the new coder.findOrError function to find the indices and values of nonzero elements in an array. Unlike the find function that always returns variable-length vectors in code generation, the coder.findOrError(X,n) function call returns vectors of fixed length n if n is a constant during code generation. If the array X contains fewer than n nonzero elements, coder.findOrError(X,n) produces either a compile-time or a run-time error.

Image Processing Toolbox

See C Code Generation: Generate code from additional functions using MATLAB Coder.

Signal Processing Toolbox

See Deep Learning: Code generation support for inverse short-time Fourier transform.

Statistics and Machine Learning Toolbox

See:

Wavelet Toolbox

See Deep Learning: Code generation for continuous wavelet transform.

 Functionality being removed or changed

Size propagation errors can occur due to ambiguous variable data types

Errors

As a result of improvements that support additional function use in the MATLAB Function block, if your output variables inherit their data type, the block can generate an error during size propagation. To resolve this error, explicitly define the variable data type. Set the Type property to a value other than Inherit: Same as Simulink.

Changes to generation and placement of included header files for models that contain blocks that call functions that specify header file inclusions

Behavior change

Starting in R2026a, when a model includes a MATLAB Function block, MATLAB System block, or MATLAB function in a Stateflow® chart that calls the coder.cinclude or coder.ceval function to specify header files, the code generator no longer includes the specified header files in these locations:

  • By default, in the generated header file model.h.

  • In the generated header or source file for a subsystem, unless the call to coder.cinclude or coder.ceval is in that subsystem.

Previously, when a MATLAB function called coder.cinclude or coder.ceval from within a model, the header file #include statements in the generated code included header files specified in the function call, which could lead to unnecessary header file inclusions and cause compilation issues.

For more information, see Integrate C Code by Using the MATLAB Function Block and Model Configuration Parameters: Code Generation Custom Code (Simulink Coder).