> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ionworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026 10 26

**October 26, 2026**

MATLAB and Simulink (Beta) export, 3D simulations, model builders, and plottable raw files

## Export parameterized models to MATLAB and Simulink

The **Download** button on a parameterized model's page is now a menu: the existing
model and parameters JSON, **MATLAB code**, and **Simulink block (Beta)**. The Simulink
block has been checked in Octave but not yet run in MATLAB/Simulink. Both exports use the
model's saved simulation settings, so the exported model matches what runs in Studio.
Current and ambient temperature are always inputs, and initial SOC is an input for ECM
and lithium-ion models. The MATLAB export includes a README and a `run_example.m`, and
models with algebraic equations (such as ECM and DFN) work in both exports.

## 3D simulations

Models can now start from a 2D (x-z) or 3D (x-y-z) unstructured DFN preset in the model
create form, and their results have a new **Spatial field** plot. It draws the field on
the cell's mesh in the browser, with a time slider, a cutaway along any axis, mesh edges
and a fixed colour bar.

## Build a model's parameters from any cell spec

A **model builder** is a recipe, saved on a model, that turns a cell specification into
that model's parameter set. Each parameter comes from the cell spec (with units
converted automatically), a fixed value, or a calculation whose inputs can themselves be
read from the spec. **Test on example** runs an unsaved recipe against an example spec,
and **Build model** in a cell spec's Parameterized models tab saves the result. Builders
are also available in the Python API as `client.model_builder`.

Parameterized models can now keep a calculated parameter as **the calculation that
produces it** rather than a frozen number, so overriding one of its inputs in a
simulation (e.g. an active material fraction) recomputes it.

## Raw files you can open, plot and triage

Every file in **Data → Raw data** now opens its own page. A file that parsed is plotted
with the same plot card as a measurement (time series, cycles, dV/dQ, step filters);
a file that didn't shows its findings with **Retry** and **Download**. Files waiting for
a decision or for their cell to be registered are counted on the **Measurements** sidebar
item and announced on project Home and Measurements, linking to a review view. Files in
a format no reader recognizes are marked **Unsupported** and hidden from the list by
default, so they no longer bury the failures that need attention.

> **Studio**
>
> **Improvements**
>
> * **Models belong to a project.** A model is visible only in its own project, and each
>   project has its own copy of the built-in models. Model names are unique per project.
> * **Report a cell or test as failed.** A **Report failure** dialog on a measurement marks
>   either that test or the whole cell as failed, with a reason. A failed cell fails every
>   test on it; a failed test leaves the cell alone.
> * **List pages remember their view.** Filters, search, sort and page size are kept when
>   you leave a list and come back in the same tab, on raw data, measurements, cells,
>   materials, models, parameterized models, pipelines, protocols, optimizations and
>   dashboards.
> * **Simulation plot boards are saved.** Plots you add and the layout you arrange on a
>   simulation's page are restored the next time anyone opens it.
> * **Copy a plot to the clipboard** from the plot toolbar, ready to paste into a doc or
>   slides. Downloaded and copied PNGs now use the plot's background colour and have
>   padding on every edge.
> * **The Voltage components plot is opt-in.** It is shown with a **Show voltage
>   components** button, and only offered when the current keeps one sign.
> * **Filter pills on status columns** show ticks for what the grid shows, with **Only**
>   to keep a single value and **Select all** to clear the filter.
>
> **Fixes**
>
> * **Re-uploading a fuller cycler export** no longer fails when the cycler renumbered its
>   cycle counter between exports.
> * **Auto-fixing a reversed current sign** now flips power too, so charge and discharge
>   energy are no longer swapped.
> * **Fits whose validation produced no score** no longer stay "processing" after they
>   finish, and jobs that will never finish are now marked failed instead of showing
>   "pending" indefinitely.
> * **A design optimization or fit where every simulation fails** now fails with an error
>   instead of completing with a penalty cost.
> * **A cell can no longer be scheduled onto two channels** at overlapping times.
> * **Icons on light buttons in dark mode** match their label's colour instead of white.
> * **A raw file's page** adds one browser history entry and shows one loading screen.
> * **Listing a cell's measurements** now returns each measurement's `channel_id`.

> **Pipeline**
>
> **Improvements**
>
> * **New calculations:** `ElectrodeBalanceFromFirstCycleEfficiency` (stoichiometry limits
>   and initial concentrations from electrode geometry, nominal capacity and first-cycle
>   efficiency) and `ElectrodeGeometryFromLoading` (thickness, active volume fraction and
>   porosity from coating loading and press density).
> * Requires `pybamm>=26.10.1.1`.
>
> **Fixes**
>
> * A fit where every evaluation fails now raises an error instead of returning the
>   initial guess.
> * A composite-electrode MSMR config with hysteresis on only one phase gives a clear
>   configuration error instead of a bare `KeyError`.

> **Python API**
>
> **Improvements**
>
> * **`client.model.create_from_zoo(...)`** imports a model from the PyBaMM model zoo and
>   creates both a model and a parameterized model in one call. `cell_spec_id` is
>   optional, and model constructor arguments go in `model_kwargs`.
> * **Cheaper simulation lookup.** `client.simulation.list` takes `protocol_id`, `state`
>   (`queued`/`running`/`completed`/`failed`) and `summary`, and parameterized models can
>   be listed without their parameter values. Every simulation record carries its
>   `protocol_id` and `protocol_name`.
>
> **Fixes**
>
> * Large uploads no longer fail with HTTP 524 on a slow part.
> * Dependency floors across the public packages are raised to versions that actually
>   install and import (e.g. `pandas>=2.2.2`, `pyarrow>=16.0.0`).

> **Data Processing**
>
> **Fixes**
>
> * Step classification ignores a step's trailing sample when it carries the next step's
>   setpoint, so constant-current steps are no longer classified as "Unknown step type".

> **Protocol Simulator**
>
> **Fixes**
>
> * **BioLogic exports** with C-rate steps or end conditions load on the instrument: C-rates
>   are written as absolute currents against the cell's nominal capacity.
> * **Nested repeat blocks** keep the right cycle counts through an Arbin export and
>   re-import.
> * A `step_block:` written with a `name:` field now takes that name, so two such blocks
>   validate and `goto` can target them.
> * A `C-rate < x` end condition now fires on models without a C-rate variable, such as
>   `iwp.models.ECM`.

> **Skills**
>
> **Improvements**
>
> * `manage-projects` covers project-scoped models, importing from the PyBaMM model zoo,
>   and live calculated parameters.
> * `run-simulations` and `search` show how to find and reuse an existing simulation.
> * `manage-protocols` notes that BioLogic exports need the cell's nominal capacity.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.