Skip to main content
May 4, 2026
Full optimization experiment editor, Arbin reader, Maccor coverage, UCP input schema

Full editor for optimization experiments

Optimization experiments now use the same protocol editor as the rest of the app. The bare text field has been replaced with a rich editor featuring YAML syntax highlighting, dark-mode support, frontend pre-validation, and the full protocol-builder dialog for picking templates and tuning steps. New protocols pre-load a “Constant Current Charge” template so users have a working starting point.

Iterative metrics for design optimization

Design optimization now supports CyclewiseMetric and StepwiseMetric wrappers end-to-end. The optimization form lets you target a metric on a specific cycle or step with bounded input fields driven by the parsed experiment, mix pipeline variables alongside PyBaMM variables, and round-trips wrapped metrics through save/load. A long-standing bug where repeated protocol blocks were flat-expanded has also been fixed, which broke solution.cycles indexing for cycle-wise metrics. Two new templates ship: a simplified Charge optimization and composite system models.

Arbin cycler support

ionworksdata now reads native Arbin exports — CSV, XLSX, and the binary .res format. The .res reader extracts data directly from Arbin’s export format (no separate Access database tool required), sorts rows chronologically to handle interleaved multi-session recordings, and reads the absolute start time from the file’s session metadata. Auto-detection picks the right reader from file headers, and arbin res is also exposed as an explicit reader name.

Maccor protocol coverage

The Maccor parser and simulator now handle several real-world protocol features that previously failed at parse time or during simulation, including per-limit safety gotos, Chg/Dis Func CCCV step types, and robust variable setvar handling. The Maccor ionworksdata reader also gained support for the compact short-form column header set used by some firmware versions, which previously crashed and silently dropped capacity/energy columns.

Machine-checkable UCP input schema

The discovery endpoint /discovery/schemas/protocol now exposes a JSON Schema matching the actual YAML authoring format (single-key dicts like {Charge: {...}}) rather than the internal parsed shape. Parity tests round-trip good and bad fixtures through both the schema and the parser so they cannot drift. Submitting the legacy kind: shape to POST /protocols/validate now returns a helpful error pointing at the canonical YAML examples, and the discover-api and run-simulations skills show local pre-validation via jsonschema.validate(...).
Improvements
  • The Ionworks Agent tab has been replaced with a static instructions page pointing to the Ionworks Agentic Toolkit; the in-app chat agent has been removed in favour of the SKILL.md-based workflow.
  • New cell specifications no longer pre-fill a default capacity, so users enter the actual cell capacity from the start.
Fixes
  • Storage permissions are now enforced at the organization level so members of the same org can read each other’s measurement files as expected.
  • created_by_email is now consistently populated on cell-spec, cell-instance, and cell-measurement responses across both get and list endpoints.
  • Simulation usage is aggregated at the organization level (matching the org-level usage limit that the backend already enforces) and is fetched from a dedicated GET /organizations/current/usage endpoint.
Fixes
  • Half-cell ECM now exposes anode and cathode potential variables (Anode potential [V], Cathode potential [V]) for plotting and metrics.
  • get_cycle_metrics keeps the Cycle count column name on output instead of renaming it to Cycle number, matching the input convention used throughout the data pipeline.
Improvements
  • validate_measurement_data, CellMeasurement.create, and CellMeasurement.create_or_get accept a skip_checks parameter so callers can relax a single strict validator (e.g. time_gaps) instead of disabling strict mode wholesale. Unknown check names raise ValueError, and the canonical set is exposed as ionworks.validators.STRICT_CHECK_NAMES. validate_strict=True is now the recommended default.
Improvements
  • New Arbin reader covering CSV, XLSX, and native .res exports (see the highlight above).
  • Maccor reader now accepts the compact short-form column header set used by some cycler firmware versions.
Improvements
  • New electrolyte parameterization page with a worked Landesfeind fit example.
  • Optimization experiment editor, iterative metrics, simplified Charge template, and composite system models are documented.
  • Custom variables reference now documents anode/cathode potential exposure on the half-cell ECM (English and Japanese).
  • Maccor native CCCV step type is documented (English and Japanese).
  • Arbin is listed in the supported cyclers table.
  • SEO metadata (keywords, OG tags, tightened descriptions) added across the docs site, including expanded data-fitting guide descriptions.
Improvements
  • Each mirrored package (ionworksdata, ionworks-schema, ionworks-api, iwutil, ionworkspipeline, skills) now ships a per-package CHANGELOG.md in Keep-a-Changelog format, written and validated as part of the release workflows.
  • discover-api and run-simulations skills updated to reference the new UCP input JSON Schema and demonstrate local pre-validation.
  • upload-data skill updated to recommend validate_strict=True and document the new skip_checks parameter.