# v0.4.0

> Source: <https://runmat.com/docs/changelog#v0-4-0>
> Published: 2026-07-12 01:35:31.696363+00:00

# RunMat Changelog

*What's new across RunMat. See GitHub Releases for runtime release binaries.*

[v0.5.6](https://github.com/runmat-org/runmat/compare/v0.5.5...v0.5.6) - June 2026

*June 28, 2026*

### Desktop

#### Added

- Add a Command Window (REPL) for interactive RunMat execution, with terminal-style editing, command history, multiline input, selection/copy, LSP-backed syntax highlighting, persisted session transcripts, runtime variables, and figure integration
- Add richer default sandbox content from file-backed fixtures, including a CAD STEP file, vibration dataset, 2D and 3D examples, signal filtering, flow-field, thermal diffusion, and a markdown welcome document
- Add Mermaid diagram rendering and editing support in markdown documents alongside existing math and code rendering

#### Changed

- Improve runtime panel behavior so script and REPL runs keep variables, figures, and selected sessions aligned without unnecessary figure-output placeholder flicker
- Improve plot, terminal, variable-table, and inspector layouts across narrow panels, resized workspaces, Safari, and Tauri
- Load default sandbox files from a dedicated fixture directory instead of inlining them in code

#### Fixed

- Fix Monaco semantic-token timing so files receive highlighting on initial load
- Fix REPL workspace probes so inspecting variables after a script run does not clear or hide existing figures
- Fix markdown editor Mermaid blocks so diagrams render consistently with the markdown renderer

### Runtime

#### Changed

- Preserve comments in detailed lexer and LSP token streams while filtering them from parser-facing tokenization, enabling comment-aware semantic highlighting without changing parser behavior
- Suppress final-expression output for command-form calls so commands such as
`clc`

do not emit`ans`

- Improve MIR read-before-assignment analysis through lowered temporary statements so diagnostics better reflect real initialization state

#### Fixed

- Fix
`contour`

,`contourf`

, and`contour3`

validation for MATLAB-style vector and meshgrid coordinate inputs - Fix CPU rendering and export of textured and image-mode surfaces so heatmap-like plots render through textured quads with correct colormap data

[v0.5.5](https://github.com/runmat-org/runmat/compare/v0.5.3...v0.5.5) - June 2026

*June 26, 2026*

### Runtime

#### Added

- Add broader MATLAB compatibility across I/O, signal processing, optimization, symbolic math, plotting, control systems, and array construction, including
`xlsread`

,`writecell`

,`textscan`

,`importdata`

,`uiputfile`

,`unzip`

,`imwrite`

,`audioread`

,`audioinfo`

,`pwelch`

,`periodogram`

,`spectrogram`

,`freqz`

,`filtfilt`

,`fir1`

,`buttord`

,`envelope`

,`zplane`

,`pskmod`

,`lsqcurvefit`

,`fminunc`

,`quad`

,`digits`

,`vpa`

,`int`

,`nan`

,`inf`

,`zero`

,`damp`

, and`polarplot`

- Add MAT-file save/load coverage, including append workflows, and expand spreadsheet/text import/export paths through provider-backed filesystems
- Add resident GPU execution paths for complex math, signal, communication, modulation, Hilbert, gradient, reshape, meshgrid, polynomial integration, gamma, sinc, sign, and trigonometric workflows

#### Changed

- Expand GPU acceleration plumbing with dedicated WGPU shader modules for signal and communications workloads, complex tensor residency, and shared provider APIs
- Improve plotting and scene export behavior, including async replay/export handling, image export ownership, geometry renderer grid toggles, colormap command syntax, and portable rendering metadata
- Harden runtime filesystem and diagnostic-path behavior so source paths, CWD-sensitive workflows, remote writes, create-new semantics, and WASM provider paths stay consistent across native, browser, and Windows environments

#### Fixed

- Fix GC safety by replacing dereference-oriented pointer APIs with opaque handles, explicit root guards, guarded borrow access, thread-local rooting, and Miri-backed soundness coverage
- Fix WebAssembly and release publishing issues around OCCT feature wiring, generated builtin registries, TypeScript package builds, headless compatibility checks, and nested crate publishing
- Fix Windows CI and runtime compatibility issues involving path handling, OpenBLAS/LAPACK linking, CWD behavior, file dialog tests, and release build tooling
- Fix GPU/runtime regressions in image normalization, lazy-transpose reshape, WGPU complex trigonometry overflow handling, communications modulation fallback, constellation portability, envelope input layout, and complex unary metadata handling

### Development

#### Changed

- Document OCCT/CMake build requirements, add no-OCCT build support, align Linux and Windows runner bootstrap scripts, and move runtime WASM helper scripts into the runtime script namespace

[v0.5.3](https://github.com/runmat-org/runmat/compare/v0.5.2...v0.5.3) - June 2026

*June 17, 2026*

### Runtime

#### Added

- Add broader symbolic math coverage —
`syms`

,`sym`

, symbolic function declarations such as`syms y(x)`

, symbolic powers, and scalar`limit`

workflows now execute through parser, HIR, runtime, VM, and WASM paths - Add signal, linear-algebra, and math builtins —
`hilbert`

,`unwrap`

,`pulstran`

,`rectpuls`

,`tripuls`

,`gauspuls`

,`upsample`

,`downsample`

,`null`

, and`heaviside`

now cover common signal-processing, numeric, and symbolic scripts - Add spreadsheet and file-selection workflows —
`spreadsheetImportOptions`

,`uigetfile`

, expanded path commands, and provider-aware`cd`

behavior now work across local, sandboxed, remote, and WASM filesystem providers - Add root-locus plotting and output forms for transfer-function models

#### Changed

- Expand MATLAB command and call syntax support, including command-form path arguments,
`grid minor`

,`axis image`

, and name-value call arguments written as`Name=value`

- Improve plotting property compatibility for
`figure`

,`gca`

, axes`FontSize`

, figure`Name`

,`NumberTitle`

,`Visible`

,`Color`

,`BackgroundColor`

, and get/set/dot-property access paths

#### Fixed

- Fix browser/WASM runtime traps in plotting and timing paths, including WebGPU plotting presentation, tic/toc handle encoding, and symptom-regression coverage for node and Chrome execution
- Fix zero-output semantic function statement calls so direct, nested, persisted, and dynamic-eval functions do not request an output when MATLAB statement semantics require none
- Fix
`fzero`

optional outputs so`[x,fval]`

,`[x,fval,exitflag]`

, and`[x,fval,exitflag,output]`

return ordered MATLAB-compatible results - Fix byte-oriented
`csvread`

range reads so non-UTF-8 or nonnumeric content outside the selected numeric rectangle does not fail selected CSV imports - Fix production name-resolution regressions for common builtins such as
`rand`

,`randn`

,`tic`

,`toc`

,`gca`

,`whos`

,`tf`

, and`null`

### Sandbox

#### Changed

- Keep filesystem and path operations provider-aware across native, sandboxed, remote, and WASM backends while preserving native process-cwd behavior where appropriate

[v0.5.2](https://github.com/runmat-org/runmat/compare/v0.5.0...v0.5.2) - June 2026

*June 13, 2026*

### Runtime

#### Added

- Add sparse matrix support —
`sparse`

now introduces a sparse runtime value with display, metadata,`class`

,`whos`

, indexing, element-wise arithmetic, reductions, transposes,`find`

,`nnz`

, JSON/string conversion, WASM wire previews, and GPU fallback/residency integration - Add optimization and linear-algebra builtins —
`linprog`

and`rref`

now execute through runtime, VM, docs metadata, and generated builtin registration paths - Add table and import workflows —
`readtable`

, table objects, table`Properties`

, dot/paren/brace table access and assignment, variable renaming,`height`

,`width`

,`groupsummary`

, table-aware`sortrows`

, datetime import support, and spreadsheet/text import plumbing cover common MATLAB tabular scripts - Add image and signal builtins —
`imhist`

and`butter`

now cover histogram and Butterworth-filter workflows with runtime, VM, docs metadata, and WebAssembly registry integration - Add SISO transfer-function control workflows —
`tf('s')`

,`tf('z', Ts)`

, transfer-function algebra,`feedback`

,`dcgain`

,`pole`

,`isstable`

,`stepinfo`

, and multi-system`step`

plotting/output forms now cover common control scripts - Add MATLAB script execution support through
`run`

, including script side effects, plotting hooks, warnings, console output, and workspace updates across runtime and VM paths

#### Changed

- Generate and validate the WASM builtin registry from source-backed metadata, preserving proc-macro metadata so browser/runtime builds fail early when builtin coverage drifts
- Refresh builtin documentation and reference metadata for the new sparse, optimization, table, image, signal, control, and script-execution builtins
- Improve runtime dispatch, workspace, callable identity, and name-resolution plumbing needed by newly added builtins and workspace-visible zero-argument builtin calls

#### Fixed

- Fix workspace-first bare builtin reads so unshadowed builtins resolve correctly while assigned or loaded workspace variables still shadow builtin names
- Harden sparse allocation and conversion paths, including extreme dimension checks, sparse triplet validation, sparse logical conversion, sparse preview truncation reporting, and sparse-to-dense guardrails before large tensors are materialized
- Bound WASM wire payload previews so large values cannot exceed preview limits
- Guard snapshot header bounds during snapshot loading
- Fix a Windows CSV release issue in bytecode compilation paths

[v0.5.0 ](https://github.com/runmat-org/runmat/compare/v0.4.9...v0.5.0) - June 2026

*June 3, 2026*

A major compiler and runtime revision. RunMat now resolves MATLAB language semantics through a staged, Rust-like compiler pipeline before bytecode is generated, and adds manifest-backed multi-file projects. See the [0.5 release post](/blog/runmat-runtime-0-5-release) and the [compiler pipeline deep dive](/blog/inside-runmat-runtime-compiler-pipeline).

### Runtime

#### Added

- Add
[project composition](/docs/runtime/getting-started/projects)—`runmat.toml`

and`runmat.json`

manifests declare the package, source roots, local dependencies, and named entrypoints runnable through`runmat run <name>`

, with source-root, package-folder (`+pkg`

), class-folder (`@Class`

), and private-helper discovery - Add source
objects — class source now produces real runtime objects with constructors, properties, methods, inheritance, access rules, value vs handle behavior, static members, super calls, and custom indexing hooks (`classdef`

`subsref`

/`subsasgn`

) instead of a struct-like fallback - Expand
[function](/docs/runtime/functions)semantics — requested-output-aware calls observable through`nargin`

/`nargout`

,`varargin`

/`varargout`

, local functions, nested functions that share parent scope, anonymous functions, captures, recursion, function handles,`feval`

, and a supported`arguments`

validation subset - Add explicit indexing context — reads, assignment targets, deletions,
`end`

, comma-list reads, function-argument expansion, and overloaded object indexing are resolved as distinct operations before bytecode - Add typed builtin descriptors — signatures, output behavior, completion policy, documentation, and stable error identifiers are shared across runtime execution, the
[language server](/docs/runtime/lsp/features), and generated reference docs - Add structured
[execution outcomes](/docs/runtime/session/execution-requests)— workspace deltas, display events, streamed output, diagnostics, observed workspace/environment effects, figures touched, profiling data, suspension state, and fusion-plan metadata for REPLs, notebooks, Desktop, WebAssembly, and embedded hosts - Add control-system builtins —
`ss`

now constructs state-space model objects from validated`A`

/`B`

/`C`

/`D`

matrices with continuous and discrete sample-time support, and`nyquist`

now computes or plots SISO`tf`

frequency responses with default or explicit frequency grids - Add communications builtins —
`qammod`

now maps integer symbols to QAM constellations with Gray, binary, and custom ordering plus`UnitAveragePower`

and`OutputDataType`

options, and`scatterplot`

now visualizes complex samples with decimation, offset, marker styling, and target-axes forms - Add plotting and export builtins —
`contour3`

now creates 3-D contour line plots with contour levels rendered at their scalar heights, and`print`

now exports figures through MATLAB-style figure-handle, filename, device, and resolution arguments - Add optimization option support —
`optimoptions`

now builds solver-specific option structs, validates name-value overrides, and copies or updates existing options structs for supported optimization solvers

#### Changed

- Migrate the compiler and runtime to a staged semantic
[pipeline](/docs/runtime/compiler)—`source -> AST -> semantic HIR -> MIR -> MIR analysis -> VM layout + bytecode -> runtime/providers`

— so names, functions, classes, output counts, indexing context, and workspace layout are resolved once and shared by the interpreter, language server, JIT, and acceleration planner - Remove the legacy AST-to-bytecode execution paths in favor of the semantic pipeline
- Compile calls from typed callable identities and fallback policies — bound functions, builtins, dynamic names, external qualified names, methods, super calls, and
`feval`

targets share one[dispatch](/docs/runtime/vm/dispatch)model, preserving function-handle identity - Make workspace-visible bindings explicit — script exports, function locals,
`ans`

, and dynamic workspace operations route through VM workspace context - Drive acceleration and
[fusion](/docs/runtime/gpu/fusion)planning from semantic facts — the compiler identifies fusion candidates, operation kinds, and effects, while the runtime and provider own GPU residency and concrete execution - Split the WGPU provider out of a monolithic implementation into state, initialization, helper, trait, and operation modules
- Give the
[JIT](/docs/runtime/jit)a tagged value ABI boundary — semantic function identity, requested output counts, expanded arguments, and non-scalar runtime values now cross host calls, with the interpreter remaining the correctness fallback

### Desktop

#### Added

- Add
[RunMat Desktop](/blog/introducing-runmat-desktop)— a local, GPU-accelerated workspace for MATLAB-syntax code with an editor, plots, variables, notebooks, run history, local file access, optional cloud projects, and a project-aware Agent

### Agent

#### Added

- Add runnable Agent code blocks — RunMat/MATLAB-style snippets in Agent answers now render with editor controls, can be copied, and can be sent directly to runtime execution
- Add project-scoped Agent persistence so projects can restore Agent state through Desktop project settings such as
`persist_agents`

in`runmat.toml`

- Add local-to-cloud project conversion support for Agent and history flows that need a cloud project

#### Changed

- Make Agent activity easier to follow by grouping long activity runs and replacing “Thinking” labels with clearer “Working” language
- Improve Agent execution and project synchronization across Desktop, browser, local, and cloud runtimes

[v0.4.9](https://github.com/runmat-org/runmat/compare/v0.4.8...v0.4.9) - May 2026

*May 22, 2026*

### Runtime

#### Added

- Add control-system response builtins —
`step`

and`impulse`

now compute or plot SISO`tf`

responses, support automatic, scalar-final-time, and explicit time-vector sampling, return response/time column vectors, and validate unsupported model forms with clear diagnostics - Add polygon plotting builtins —
`patch`

and`fill3`

now create filled 2-D and 3-D polygon graphics handles with`Faces`

/`Vertices`

, coordinate, color, axes-handle, and common patch property support, backed by shared triangulation and GPU plotting render paths - Add numerical analysis builtins —
`integral`

now performs finite scalar adaptive quadrature for function handles, and`fminbnd`

now performs bounded scalar minimization with Brent-style search,`optimset`

options, multi-output diagnostics, and shared Brent helpers with`fzero`

- Add array, statistics, and signal-processing builtins —
`repelem`

,`mode`

,`sinc`

,`sawtooth`

, and`square`

now cover element replication, MATLAB-compatible modal reductions, normalized sinc evaluation, and periodic waveform generation - Add numeric helper builtins —
`complex`

,`sind`

,`cosd`

,`tand`

,`db`

, and`fgetl`

now support complex construction, degree-based trigonometry, decibel conversion, and line-oriented text-file reads

#### Fixed

- Fix
`errorbar`

parsing for line specs before name-value pairs, y-only calls, explicit`x`

/`y`

/error inputs, and trailing line specs - Fix MATLAB complex-constructor semantics, including unary complex storage, scalar expansion, and two-argument real-input validation

[v0.4.8](https://github.com/runmat-org/runmat/compare/v0.4.6...v0.4.8) - May 2026

*May 15, 2026*

### Runtime

#### Added

- Add
`tf`

— scalar-input scalar-output transfer-function objects now support numeric, logical, integer, complex, row-vector, and column-vector coefficient inputs, continuous and discrete sample-time defaults,`Variable`

,`Ts`

/`SampleTime`

,`Numerator`

,`Denominator`

,`InputDelay`

, and`OutputDelay`

properties, and`class(H) == "tf"`

- Add angle conversion builtins —
`deg2rad`

and`rad2deg`

now operate element-wise on scalars, vectors, matrices, N-D tensors, complex values, integer/logical inputs, and GPU-resident inputs, with fusion support for compatible element-wise expressions - Add reference-line plotting —
`xline`

and`yline`

now draw vertical and horizontal reference lines with scalar or vector coordinates, line-style strings, labels,`LineWidth`

,`Color`

,`LabelOrientation`

,`Visible`

, returned graphics handles, and`get`

/`set`

/dot-property integration

#### Changed

- Track workspace assignments through the VM and Turbine JIT so interpreter fallback, compiled stores,
`clear`

, and`clearvars`

publish only the variables assigned or removed by the current execution - Route browser-backed file handles through async open and flush paths so
`fopen`

,`fclose`

,`fread`

,`fwrite`

,`feof`

,`fgets`

,`fprintf`

, and`frewind`

share consistent registry and provider behavior across native and WASM hosts - Expand plotting metadata and property handling for reference-line handles, including reference-line render data, legend labels,
`Value`

, style properties, and preservation of existing axis labels when reference lines are appended

#### Fixed

- Fix native session result handling for repeated multi-statement execution so final assignment values and workspace previews stay numeric after JIT compilation and fallback
- Fix parser diagnostic locations for malformed calls, expected identifiers, and member access after
`.`

, reporting the offending token instead of a stale source position - Fix WGPU fused-kernel preflight checks to reject storage-buffer, bind-group, and arithmetic binding-count overflows before creating invalid WebGPU layouts
- Fix browser/WASM file close behavior so async flush failures keep the file registered, concurrent
`fclose`

calls close a file only once, and dirty buffers are restored if async write-back fails - Fix
`plot(x, y)`

compatibility for matching row-vector and column-vector pairs with the same number of elements - Fix
`fft`

default-dimension output for row vectors so row orientation is preserved - Fix single-point
`hann`

,`hamming`

, and`blackman`

windows by using the host path instead of provider paths that expect longer window lengths

### Sandbox

#### Changed

- Move the browser filesystem provider to async JavaScript filesystem operations for open, read, write, metadata, directory, rename, removal, and permission updates
- Avoid unnecessary initial file reads for write-create-truncate opens while preserving
`create_new`

, read, and append semantics

[v0.4.6](https://github.com/runmat-org/runmat/compare/v0.4.5...v0.4.6) - May 2026

*May 8, 2026*

### Runtime

#### Added

- Add ODE solvers —
`ode23`

,`ode45`

, and`ode15s`

now solve scalar, vector, and matrix-valued initial-value problems with adaptive stepping, requested`tspan`

output points, and`RelTol`

,`AbsTol`

,`InitialStep`

, and`MaxStep`

options - Add random distribution builtins —
`exprnd`

,`normrnd`

, and`unifrnd`

, including scalar and shaped outputs, deterministic host RNG behavior, parameter validation, and WGPU-backed generation when the active provider supports it - Add image color and class conversion builtins —
`rgb2gray`

,`gray2rgb`

,`ind2rgb`

,`im2double`

,`im2uint8`

,`im2uint16`

,`rgb2hsv`

,`hsv2rgb`

,`rgb2lab`

, and`lab2rgb`

- Add
`heatmap`

plot support with matrix CData input, optional row and column labels, returned graphics handles, colorbar support, and`get`

/`set`

/dot-property integration - Add
`clearvars`

with explicit variable clearing and`-except`

exclusions

#### Changed

- Split WGPU random distribution execution into dedicated provider code and add parameterized kernels for exponential, normal, and uniform distributions
- Reuse the shared value-to-string conversion path for graphics labels and property handling

[v0.4.5](https://github.com/runmat-org/runmat/compare/v0.4.4...v0.4.5) - May 2026

*May 1, 2026*

### Runtime

#### Added

- Add image I/O and display support —
`imread`

reads raster images into MATLAB-compatible grayscale, truecolor, and alpha arrays, and`imshow`

displays numeric, logical, truecolor, and file-backed images with MATLAB-style display ranges - Add interpolation builtins —
`interp1`

,`interp2`

,`spline`

,`pchip`

, and`ppval`

, including piecewise-polynomial structs and linear, nearest, spline, and shape-preserving cubic paths - Add optimization builtins —
`fzero`

,`fsolve`

, and`optimset`

, with bracket expansion, Brent refinement, finite-difference Levenberg-Marquardt solving, display/tolerance options, and output shape preservation - Add
`format`

— session-persistent numeric display modes for`short`

,`long`

,`shortE`

,`longE`

,`shortG`

,`longG`

,`rat`

, and`hex`

- Add
`strsplit`

with simple and regular-expression delimiters,`CollapseDelimiters`

,`DelimiterType`

, and optional delimiter-match output

#### Changed

- Extend tensor dtype metadata for
`uint8`

and`uint16`

so`class`

, WASM value previews, image operations,`diag`

, reductions, and`zeros`

/`ones(..., "like", value)`

report and preserve integer image-style arrays correctly - Share common tensor dtype coercion and clamping helpers across image, reduction, and array creation builtins
- Route numeric-to-string conversion through the active
`format`

mode so display output, string conversion, and complex formatting stay consistent

#### Fixed

- Fix command-form parsing so bare newlines terminate commands, while
`...`

continuations still work after multiple blank lines - Fix
`whos`

and value metadata size reporting for tensors stored in the runtime's f64 backing representation

### Sandbox

#### Changed

- Share the default browser filesystem provider and IndexedDB backing across session instances, with ref-counted cleanup and consistent flush behavior
- Reject incompatible IndexedDB backing options instead of silently mixing providers with different timing hooks or flush policies

[v0.4.4](https://github.com/runmat-org/runmat/compare/v0.4.1...v0.4.4) - April 2026

*April 24, 2026*

### Runtime

#### Added

- Add
`cross`

— MATLAB-compatible vector cross products across row vectors, column vectors, matrices, and higher-rank tensors, with GPU-resident execution for real-valued inputs when the active provider supports it - Add
`gradient`

— numerical gradients with MATLAB-compatible matrix output ordering, scalar spacing support, complex host support, and WGPU-backed GPU residency for scalar-spacing gradients - Add
`trapz`

and`cumtrapz`

— trapezoidal and cumulative trapezoidal integration with scalar spacing, coordinate-vector spacing, explicit dimension selection, complex inputs, and GPU input fallback that re-uploads real-valued outputs for downstream GPU work - Add
`sgtitle`

— figure-level titles for subplot layouts with text styling, explicit figure-handle targeting,`get`

/`set`

support, scene replay, and vector/native export support - Add CLI artifact capture for script runs —
`--artifacts-dir`

,`--artifacts-manifest`

,`--capture-figures`

,`--figure-size`

, and`--max-figures`

#### Changed

- Rename
`runmat-ignition`

to`runmat-vm`

and split the VM, compiler, interpreter dispatch, indexing, runtime state, and acceleration paths into smaller modules - Refactor the lexer, parser, HIR, core session, WASM runtime, and CLI layers for maintainability without changing their public behavior
- Expand TypeScript/WASM figure metadata to include
`sgTitle`

and`sgTitleStyle`

, matching the new figure-level title support

#### Fixed

- Fix WGPU provider cleanup for intermediate GPU tensor handles so error paths release temporary device resources correctly
- Fix
`gradient`

shape handling for empty tensors and align WGPU gradient parameters for the backend layout - Fix SVG/vector-export text positioning so subplot titles and figure-level titles scale correctly with font size
- Fix
`sgtitle`

serialization and child enumeration, and allow numeric values to be used as title text

### Sandbox

#### Changed

- Reorganize the browser/WASM runtime into dedicated API, plotting, session, stream, filesystem, GPU, snapshot, state, and wire-format modules
- Improve replay smoke coverage and GPU gradient coverage for the WASM target

### App

#### Changed

- Update remote-project CLI documentation around authentication, project selection, filesystem history, snapshots, git sync, retention policies, and
`remote run`

[v0.4.1](https://github.com/runmat-org/runmat/compare/v0.4.0...v0.4.1) - April 2026

*April 15, 2026*

### Runtime

#### Added

- Expand
`input()`

compatibility — numeric prompts now accept logical values, named constants (`pi`

,`inf`

,`nan`

), and matrix/vector literals with MATLAB-compatible output types. Complex expressions such as`sqrt(2)`

and`ones(3)`

now evaluate through the full MATLAB pipeline when an eval hook is available - Add configurable CLI credential storage for
`runmat login`

—`auto`

,`secure`

,`file`

, and`memory`

#### Changed

- Improve CLI auth persistence —
`auto`

mode now prefers secure keyring storage and falls back to file-backed credentials with restricted permissions when secure storage is unavailable - Extract remote auth and public API client logic into a dedicated
`runmat-server-client`

crate

#### Fixed

- Fix native
`input()`

evaluation stack overflow by isolating nested prompt evaluation from the outer interpreter call stack - Fix GPU-backed selector indexing — GPU-resident index tensors now materialize correctly before linear and dimensional indexing

### Sandbox

#### Fixed

- Fix workspace/variable display after
`clear()`

— variables assigned later in the same execution block now reappear correctly in workspace snapshots - Fix browser
`input()`

handling after session resets — reinitializing the WASM session now preserves the installed async input handler

### App

#### Added

- Expand the public API with project git import, project import status, usage notices, upgrade requests, chunk upload targets, data manifest access, run indexes, storage summaries, storage-category deletion, telemetry ingest, and web intake submission endpoints

[v0.4.0](https://github.com/runmat-org/runmat/compare/v0.3.2...v0.4.0) - April 2026

*April 13, 2026*

### Runtime

#### Added

New [plot types](/docs/matlab-function-reference#plotting):

- Add
`stem`

with GPU-accelerated rendering - Add
`errorbar`

visualization - Add
`area`

filled area plots - Add
`contour`

/`contourf`

with GPU-resident path rendering - Add
`plot3`

3D line plots - Add
`imagesc`

scaled image display - Add
`pie`

charts - Add
`histogram`

plotting - Add
`semilogx`

,`semilogy`

,`loglog`

log-scale axes - Add
`plot(y)`

shorthand — single-argument plot

Plotting infrastructure:

- Add graphics handles and per-axes subplot state
- Add axes helpers:
`xlim`

,`ylim`

,`zlim`

,`caxis`

/`clim`

- Add common signature forms:
`bar(x,y)`

,`surf(Z)`

,`mesh(Z)`

,`surfc(Z)`

,`meshc(Z)`

,`stairs(y)`

- Add
`get`

/`set`

for plot handles with shared property access - Add annotation and legend builtins:
`title`

,`xlabel`

,`ylabel`

,`zlabel`

,`legend`

- Add 3D view controls:
`view(az, el)`

- Add world-space text annotations

Numerical computing:

- Implement correct matrix division semantics —
`\`

,`/`

,`.\`

,`./`

now have distinct, correct semantics through parser, HIR, bytecode, VM, and GPU paths.`mldivide`

and`mrdivide`

support triangular solves, dense square solves, tall least-squares, wide minimum-norm solves, transpose variants, and Cholesky-backed solves with GPU-resident F32 execution - Implement full FFT/IFFT family —
`fft`

,`ifft`

,`fft2`

,`ifft2`

,`fftn`

,`ifftn`

now fully implemented with underlying RustFFT for CPU paths and high-performance staged GPU shaders supporting power-of-two, radix-3, radix-5, mixed compositions, and Bluestein fallback for non-smooth/prime lengths. Complex array indexing now works throughout (`Y = fft(x); Y = Y(1:N/2)`

) - Add signal processing helpers —
`hann`

,`hamming`

,`blackman`

windowing functions and`nextpow2`

, all with GPU acceleration. Supports`symmetric`

/`periodic`

modes and output type selection

Other:

- Add
`clear`

,`clc`

,`close all`

— session management commands now work in browser and native - Add
`datetime`

— MATLAB-compatible construction, formatting, string conversion, and subtraction - Add
`duration`

— display, arithmetic, and datetime interop - Add
builtin — GPU-accelerated with mixed-residency tensor support and type inference`peaks`

#### Changed

- Expand GPU fusion coverage —
`sign`

,`fix`

,`hypot`

,`pow2`

,`asinh`

,`acosh`

,`atanh`

,`mod`

,`rem`

now fuse into single GPU kernels automatically

#### Fixed

- Fix struct field indexing —
`s.arr(k)`

and`s.arr(1:n)`

now work with MATLAB-compatible semantics - Fix implicit struct creation — assigning to
`r.x = 10`

on an uninitialized variable now materializes a struct - Fix
`fprintf`

compatibility for literal dollar signs and casted numeric inputs - Fix
`atan2`

stack underflow that crashed scripts calling`atan2`

with compound expressions - Fix leading-dot floats —
`.5`

parsed as`0.5`

- Fix GPU tensor to f64 conversion for iterative solve workflows
- Fix range-indexing type errors
- Fix GPU memory cleanup on QR and
`mrdivide`

errors - Fix
`matmul`

parameter caching - Fix histogram and bar charts not displaying
- Fix right bar chart persisting after generating new charts
- Fix
`contourf`

Z dimension mismatch - Fix
`area`

X/Y length mismatch - Fix
`image`

surface data handling - Fix
`stairs`

1-argument form - Fix Z-axis label styling
- Fix
`plot`

3-argument overload - Fix stem shader offset when baseline is hidden

### Sandbox

#### Added

- Add notebook editor infrastructure — markdown cells alongside code cells (not yet user-facing)
- Add RunMat Agent infrastructure — typed protocol, config, ops, and event model (not yet user-facing)

#### Fixed

- Fix artifact loading to return newest entry when an ID is reused
- Fix browser terminal
`clear`

/`clc`

handling - Fix runtime state leaking between notebook run sessions

#### Changed

- Improve path handling with safe segment escaping for dot components
- Improve auth flow — email verification now redirects directly to the sandbox with an auth modal
- Improve Auth0 email login flow
- Improve stdout deduplication and clear event handling

### App

#### Added

- Add durable persistence and replay for run artifacts

[v0.3.2](https://github.com/runmat-org/runmat/compare/v0.3.0...v0.3.2) - March 2026

*March 24, 2026*

Deployment and infrastructure improvements for macOS, Windows, and Linux — no runtime or engine changes. Covers v0.3.1 through v0.3.2.

[v0.3.0](https://github.com/runmat-org/runmat/compare/v0.2.8...v0.3.0) - March 2026

*March 24, 2026*

### Runtime

#### Added

- WebAssembly (WASM) compile target — RunMat now runs entirely in the
[browser](/docs/desktop-browser-guide)with WebGPU acceleration, published as the`runmat`

npm package - Add fused GPU rendering pipeline for 2D and 3D plots with zero-copy surface data path
- Add 3D depth camera with reversed-Z and dynamic clip planes
- Add type inference — context-aware shape resolvers track tensor shapes through the compiler
- Add builtins:
`int32`

,`uint16`

,`isgpuarray`

,`magic`

,`empty`

,`frewind`

,`rand(m,n,p)`

,`uint8`

elementwise ops,`isequal`

,`logical`

,`cellfun`

handle support,`fullfile`

,`erase`

,`atanh`

,`tempname`

- Add full call stack in error diagnostics with stack depth limit and source location tracking
- Add
[MATLAB compatibility mode](/docs/language)

#### Changed

- Migrate the entire VM, all builtins, and the GPU provider to async
- Change default error namespace to
`RunMat`

(from`MATLAB`

)

#### Fixed

- Fix slice indexing shape preservation,
`conv2`

kernel flip,`chol`

multi-output control flow,`load`

auto-assignment,`dlmread`

/`csvread`

header parsing,`cummax`

/`cummin`

alignment,`fgets`

character limit, native auto-init race condition, and GPU compute dispatch stack layout

### Sandbox

#### Added

- Launch browser sandbox at
[runmat.com/sandbox](https://runmat.com/sandbox)

#### Fixed

- Fix save file behavior
- Fix figure state reset on re-run
- Fix variable inspector pagination — large vectors now paginate correctly
- Fix variable inspector caching — stale values no longer shown after re-runs
- Fix data file viewer error handling

#### Changed

- Show struct values before tensor values in the output panel
- Improve variable inspector layout

### App

#### Added

- Add organizations, projects, and team memberships

[v0.2.8](https://github.com/runmat-org/runmat/compare/v0.2.7...v0.2.8) - December 2025

*December 22, 2025*

#### Added

- Add complex number support — complex arithmetic works throughout the runtime
- Add non-conjugate transpose (
`.'`

) — apostrophe handling now distinguishes from conjugate transpose - Add Homebrew installation —
`brew install runmat`

(see[CLI docs](/docs/cli))

#### Changed

- Replace manual REPL input with
`rustyline`

for line editing, command history, and formatting - Persist
`ans`

variable across expressions - Display struct content in the REPL
- Improve multi-line formatting for
`ls`

and matrices - Suppress output for assignments ending in
`;`

#### Fixed

- Fix
`save()`

stack overflow bug

[v0.2.7](https://github.com/runmat-org/runmat/compare/v0.2.6...v0.2.7) - December 2025

*December 2, 2025*

#### Added

- Add anonymous telemetry to help improve RunMat. No code is ever captured — only internal error codes. See
[Telemetry](/docs/telemetry)for details

#### Fixed

- Fix CLI version display

[v0.2.6](https://github.com/runmat-org/runmat/compare/v0.0.4...v0.2.6) - November 2025

*November 21 – 24, 2025*

Covers [v0.2.0](https://github.com/runmat-org/runmat/compare/v0.0.4...v0.2.0) through v0.2.6.

#### Added

[Accelerate](/docs/accelerate/fusion-intro) (GPU backend):

- Add wgpu-based GPU backend — Metal (macOS), DirectX 12 (Windows), Vulkan (Linux)
- Add cost model — runtime profiling routes work to CPU or GPU based on data size and transfer cost
- Add f32/f64 compute shaders for a broad set of builtins —
`ones`

,`zeros`

,`rand`

, reductions, and many more now dispatch to the GPU automatically

- Add computation graph pattern scanning — the runtime analyzes your code's computation graph, matches sequences against a library of fusible patterns, and replaces them with optimized GPU kernels automatically
- Add 5–6 initial fusion operations including elementwise math chains, where multiple operations collapse into a single GPU kernel eliminating intermediate memory traffic

[v0.0.3](https://github.com/runmat-org/runmat/compare/v0.0.2...v0.0.3) - August 2025

*August 25, 2025*

#### Added

- Add PowerShell installer for Windows

[v0.0.2](https://github.com/runmat-org/runmat/compare/v0.0.1...v0.0.2) - August 2025

*August 19, 2025*

#### Added

- Implement interpretation for the core MATLAB language grammar and semantic surface, across the parser, HIR, and VM. See
[Language Coverage](/docs/language-coverage)for the full matrix of implemented coverage

[v0.0.1](https://github.com/runmat-org/runmat/releases/tag/v0.0.1) - August 2025

*August 10, 2025*

#### Added

- Initial release — lexer, architecture plan, project scaffolding
- Add release workflow with macOS signing, cross-compilation, crates.io publishing
