Skip to main content

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.

April 27, 2026
Project-scoped ECM fitting, PyBaMM v26.4.0 support, SDK skills plugin, strict upload validators

Project-scoped ECM fitting

Equivalent-circuit-model fitting is now available directly inside a project. Pick any measurement already attached to one of the project’s cells (or upload a fresh CSV), preview the trace, run the fit, and save the result back to the project as a new model with one click. The new flow replaces the multi-step stepper with stacked cards, adds a model-vs-data plot, an error plot, a fitting-progress indicator, an OCV toggle helper, and auto-scrolls to the results when the fit completes. The standalone ECM demo continues to work for unauthenticated users.

PyBaMM v26.4.0 support

The pipeline and protocol simulator have been updated for PyBaMM v26.4.0, which introduces a dedicated Rest step class in place of the old zero-current step and renames the MSMR electrode-capacity parameters from short keys (e.g. Q_n_1, Q_p_1) to descriptive strings (e.g. “Negative electrode host site occupancy capacity (1) [A.h]”). Existing experiments and MSMR parameter sets continue to parse correctly under the new release.

SDK skills as a Claude Code plugin

The Ionworks Python SDK now ships with a set of installable Claude Code skills covering api-discovery, cell-data, data-upload, simulations, pipelines, and projects-and-studies. Each skill documents the relevant sub-clients, method signatures, and the create-or-get patterns so an AI assistant can drive the SDK against the current API surface. Install via /plugin marketplace add ionworks/ionworks-skills and /plugin install ionworks to get the slash commands and SessionStart hook for any Ionworks project.

Strict upload validators in the Python API

CellMeasurementClient.create and create_or_get now run optional client-side validators before sending data to Studio so processing bugs surface as a local error instead of a confusing upload result. A hard time-gap check (>5 h between consecutive rows) runs by default; passing voltage_window enables a voltage-continuity check (catches chronological misordering from a faulty partition_by), and passing rated_capacity enables a consecutive same-direction full-step check plus a soft warning for any step whose capacity exceeds 5× rated.
Improvements
  • Measurement chart controls collapse into a compact header summary; per-axis variable selectors now allow adding and removing series dynamically with a unified two-column layout.
Fixes
  • Study visualization no longer collapses to an empty state when switching between studies whose experiment-type tabs differ — the filter resets to All when the previous tab isn’t present.
  • Users with a stale Supabase session can recover by signing out via the OTP auth/continue page instead of being stuck on the redirect.
  • The empty cells page now uses the correct organization-level permission check, so users who can create cells no longer see a misleading “contact a project admin” message.
  • Pipeline element details view no longer triggers rapid duplicate fetches for Data Fit and Validation configs — the large job_config is read directly from storage and cached.
Improvements
  • Function compilation is now enabled by default in Simulation (IDAKLU solver), speeding up repeated runs that share the same model.
  • submesh_types and spatial_methods now serialise correctly through SimulationObjective.to_config, fixing JSON round-trip for objectives such as CycleAgeing that carry mesh generators or spatial methods in simulation_kwargs.
Fixes
  • Time-monotonicity validation error message now reports the correct two adjacent values (the previous off-by-one showed the values just before the actual violation).
Fixes
  • Sign-convention detection no longer misclassifies low-current pulse datasets as all-rest; the rest threshold now scales relative to the 95th-percentile current so violations are caught on small-amplitude data.
April 20, 2026
Python SDK resource clients, validation initial conditions, capacity calculation fix

Python SDK resource clients

The Python SDK gains typed sub-clients for managing Studio resources programmatically. You can now create, list, retrieve, update, and delete projects, models, parameterized models, studies, protocols, and optimizations directly from the Ionworks client — for example, client.project.list(), client.model.get(id), or client.study.create(...). A new “Managing resources” section in the Python API docs walks through each sub-client with usage examples, and the backend URL paths for Projects, Models, and Studies have been flattened so the organization is resolved from your auth token instead of being required in the URL.

Validation initial conditions and UX polish

Validations now let you choose how the simulation is initialized: auto-detect from the measurement, a custom starting voltage, or a custom state of charge. Each validation row in the Report tab can be removed individually with a confirmation dialog, and a dedup bug that caused two measurements sharing the same initial voltage to overwrite each other’s drive cycle has been fixed. Validation error plots also now render with grid lines for easier reading.

Capacity calculation fix for multi-electrode cells

ElectrodeCapacity was reading a non-canonical PyBaMM parameter name for the number of electrodes connected in parallel, causing c_max to be over-computed by a factor of N when users set the correct key. The fix aligns all lookups with PyBaMM’s canonical parameter name so multi-electrode cells parameterize correctly.
Improvements
  • Studies with simulations of a single experiment type now auto-select that type so the visualization view is immediately accessible.
  • Failed variable-evaluation jobs now surface an error state with a Retry button instead of spinning indefinitely.
  • Studies list endpoint now returns paginated results with items, count, and total.
  • Parameterized models list endpoint added with pagination.
Fixes
  • Fixed a crash when rendering time-series measurements with thousands of short steps (e.g. HPPC pulse protocols with ~1500 steps) — the dashboard can now load these measurements.
  • Fixed coupled custom variables being silently dropped when their resolution failed, which could remove convenience variables like “Temperature [degC]” from simulation outputs.
  • Capped the models list fallback page size to the backend’s 100-row limit to prevent 422 errors.
Improvements
  • Bumped PyBaMM to 26.3.1, which falls back to pybamm.BaseModel with a warning when a custom model’s base_class references a package that isn’t installed in the worker environment.
  • Refactored OCP objectives (OCPHalfCell, ElectrodeBalancingHalfCell, ElectrodeBalancing) to use the _run pattern so they support raise_on_failure and work correctly in Validation pipelines.
Fixes
  • DataFit now auto-wraps a bare objective in {ClassName: objective} so pipelines submitted with a single unwrapped objective no longer fail serialization.
Improvements
  • Added typed sub-clients for Models, Studies, Optimizations, Projects, Protocols, and ParameterizedModels, replacing raw HTTP requests for resource management.
  • SDK endpoints no longer include organization_id in paths — the organization is resolved from the auth token.
  • Simulation polling now propagates errors immediately instead of swallowing them, and uses typed JobResponse objects with server-computed is_terminal / is_failed fields.
Fixes
  • Fixed the simulation job poll endpoint (was hitting a non-existent /simulations/jobs/{id} route).
Fixes
  • Fixed a sign-detection bug in the ECM validator where a symmetric current profile (charge / discharge / charge returning to the same net charge) was incorrectly rejected despite having a non-zero SOC span.
April 13, 2026
Async optimization, study validation reports, cell data filtering

Asynchronous optimization evaluation

Optimizers now support asynchronous evaluation for both local and distributed workloads. A new ProcessPoolAsyncEvaluator runs evaluations in persistent multiprocessing workers locally, while the existing ActorPoolEvaluator gains a submit/wait-next API for distributed evaluation via Ray. Steady-state async mode keeps all workers saturated without waiting for generation boundaries, and new convergence criteria — including a patience counter and population diversity guards — prevent premature stopping.

Study validation reports

Studies now include a validation workflow for comparing simulation results against experimental measurements. A new Report tab displays overlay plots of simulated vs. measured data along with quantitative error metrics (RMSE, MAE), and a Data tab lets you manage which measurements are paired with which simulations.Find out more →

Cell data filtering and ordering

All cell list endpoints (specifications, instances, and measurements) now accept filter and ordering parameters — including name, creator email, date ranges, and sort direction. The Python SDK exposes matching keyword arguments on each list() method, and the frontend measurement table uses server-side filtering.
Improvements
  • Pipeline and cell measurement tables now support server-side sorting.
  • Added an error screen with auto-retry when the initial user info request fails.
  • Removed SNES optimizer option from the frontend.
Fixes
  • Removed XSS sinks in the notifications drawer and job progress display that rendered untrusted strings via dangerouslySetInnerHTML.
  • Normalized Redux thunk error handling to use extractApiError consistently.
  • Eliminated slow bucket.list() calls from file-measurement endpoints by caching filenames in the database, reducing response times from ~10 s to under 100 ms.
Improvements
  • Renamed the Pints optimizer to AskTellOptimizer across all code, tests, and documentation.
  • Added dedicated algorithm test suites for CMA-ES, XNES, and Nelder-Mead.
  • Added distribution mean evaluation for CMA-ES and XNES, preferring the evaluated mean when it outperforms the best sample.
Fixes
  • Fixed a flaky deterministic design optimization test.
Improvements
  • Added filter and ordering keyword arguments to CellSpecificationClient.list(), CellInstanceClient.list(), and CellMeasurementClient.list().
  • download_files(filenames=) now skips the listing round-trip; new get_file() method for single-file fetch.
Improvements
  • Added temperature column recognition for Biologic files.
April 6, 2026
Measurement types, performance improvements, total time termination, parameterized model enhancements

Measurement types for non-time-series data

Cell measurements now support a measurement_type field with three values: time_series (the default), properties for key-value metadata such as checkpoint measurements, and file for arbitrary files such as images, PDFs, or numpy arrays. Each type has its own creation and retrieval flow, and list endpoints can filter by type.Find out more →

Performance improvements

Pipeline creation is now significantly faster: large job configurations are offloaded to object storage instead of being written inline to the database. The entire backend has also been migrated to an async Supabase client, improving throughput under concurrent load. Models, parameterized models, studies, and optimizations now use server-side pagination and filtering, eliminating the need to load entire collections into memory.

Total time termination condition

Protocol steps can now use total_time as a built-in termination condition, ending a step after a specified duration of total elapsed experiment time rather than just step time.Find out more →

Parameterized model improvements

The parameterized model detail view has been consolidated into a single page with tabs, replacing the previous multi-page layout. Models can now be downloaded as a zip archive containing the full configuration, and initial temperature is now parsed in design optimization objectives for temperature-dependent studies.Find out more →
Improvements
  • Cell specification list now displays as a sortable data table instead of cards.
  • Added a UI warning when a simulation produces no data because all protocol steps were skipped.
  • Removed hardcoded convenience variables from the variable evaluator and improved the evaluate variables UX.
  • Migrated all update endpoints from PUT to PATCH semantics with partial update bodies.
  • Standardized all duplicate resource errors to return HTTP 409 with structured error details.
  • Replaced signed URL downloads with HTTP 307 redirects for simpler, faster file access.
  • Flattened cell measurement composite response shapes for a more consistent API surface.
  • Design optimizations now default to the Differential Evolution algorithm.
Fixes
  • Fixed optimization deletion hitting the wrong API endpoint.
  • Fixed clone optimization sending a reverted request body.
  • Fixed optimization list page sending redundant API requests.
Improvements
  • Parse initial temperature in DesignObjective for temperature-dependent optimization studies.
Fixes
  • Fixed Transform.to_dict leaking a base_name entry into fitted parameter dictionaries.
  • Fixed validation to correctly unwrap FunctionForExport when checking transformed parameters.
  • Fixed initial SOC not being passed to EIS frequency-domain simulations.
Improvements
  • Added support for arithmetic expressions with input parameters in the UCP-to-PyBaMM converter (e.g. 1000 / input["Total cells"] now produces correct symbolic expressions).
Fixes
  • Fixed initial SOC not being applied in EIS frequency-domain simulations.
Improvements
  • Replaced signed URL downloads with direct HTTP 307 redirects for measurement file access.
  • Flattened cell measurement response shapes for simpler data access.
  • Added measurement_type field to measurement models for non-time-series data.
  • Migrated all update methods from PUT to PATCH.
  • Improved loading of studies and parameterized models with large numbers of simulations via server-side pagination.
Improvements
  • Replaced pickle-based local cache with Parquet format for faster, more portable caching.
  • Added Latin-1 encoding support for Neware CSV files.
March 30, 2026
ECM parameterization, resistance scaling, custom variables, and BaSyTec reader

ECM parameterization

A new ECM parameterization page lets you upload cycling data, select 0–5 RC pairs with a live circuit diagram, and view fitted parameters including OCV and R0. Results can be downloaded as CSV.Find out more →

Adjust resistance in protocol simulations

The protocol simulator now uses Equivalent Circuit Models (ECM) instead of SPM for faster, more robust cycler protocol simulations. ECM parameter sets are available for all six supported chemistries, and a new resistance scaling parameter in the UI lets you adjust the overall cell resistance before running a simulation.Find out more →

Custom variables on models

You can now define custom derived quantities on models — such as electrode potentials or temperature in different units — as PyBaMM expressions stored in the model configuration. These custom variables are evaluated at simulation time and included in result data, making it easy to track application-specific metrics across design sweeps.Find out more →

BaSyTec battery cycler reader

The data processing library now supports BaSyTec CSV exports (CTS, X50 series). The reader auto-detects BaSyTec files by header signature, parses HH:MM:SS.sss timestamps (including values above 24 hours), applies the correct current sign convention, and extracts start times from companion _meta.txt files.Find out more →
Improvements
  • Added dark mode with a theme toggle in the dashboard header.
  • Moved optimization templates from organization scope to project scope with project-level management pages.
  • Made optimization name optional when creating optimizations.
  • Added pagination to cell specification, instance, and measurement list endpoints.
  • Added OCV traces to drive cycle simulation result plots.
  • Unified EIS column naming to Z_Re [Ohm] / Z_Im [Ohm] across simulation, measurement ingestion, and frontend rendering.
  • Migrated experiment template metrics from code-string evaluation to serializable ionworkspipeline metric configs.
  • Completed removal of deprecated slug and additional_data columns from cell models.
Fixes
  • Fixed datafit processor receiving unresolved db: refs during validation.
  • Fixed LumpedSPMR model crash due to missing self.param attribute.
  • Fixed mutating datafit setup configuration between runs.
Improvements
  • Added support for computing lithium inventory from maximum stoichiometries without requiring maximum concentration values.
  • Adopted PyBaMM’s native to_config/from_config for model and experiment serialization, removing custom parser logic.
  • Added abs as a unary operation for composed metrics.
Fixes
  • Fixed thermal model using incorrect heat generation variable in ECM.
  • Fixed trailing space in electrode balancing direction parameter names.
  • Fixed validation to discover sub-parameters inside FunctionParameter nodes.
  • Fixed parser to handle sampler configurations and expanded schema sync tests.
  • Fixed pandas/polars/DataLoader compatibility issues.
Improvements
  • Unified EIS impedance columns to Z_Re [Ohm] / Z_Im [Ohm] with SI units and standard sign convention.
Fixes
  • Fixed CCCV resolution to apply consistently to all sub-steps within a protocol.
Improvements
  • Added local data caching for cell measurements, reducing repeated downloads.
  • Added pagination support (limit/offset) to cell list methods, returning a PaginatedList with a .total attribute.
  • Completed removal of deprecated slug and additional_data fields from cell models.
  • Improved sign detection algorithm for measurement current data.
Improvements
  • Added BioLogic plain CSV reader for non-MPR exports.
  • Added automatic derivation of Z_Re and Z_Im from Z_Mod and Z_Phase when impedance components are missing.
  • Moved cell data caching logic into ionworks-api for reuse across packages.
Fixes
  • Fixed CSV reader to skip auto-detection for explicitly mapped columns.
  • Fixed plotting bugs in data visualization utilities.
March 23, 2026
Protocols section, job cancellation, parameterized durations, and optimization management

Dedicated Protocols section with parameterized input support

Studio now has a dedicated Protocols section where you can browse, edit, and clone saved experiment templates. Each protocol detail page shows the source YAML, a tabbed UCP/human-readable preview, and automatically detected input parameters with a generated parameters_schema. This makes it easy to build reusable, parameterized protocols and simulate them with different input values.Find out more →

Cancel running jobs from Studio

You can now cancel pipelines, optimizations, and simulations directly from the UI. Each detail page shows a cancel button for in-progress jobs, with optimistic status updates and automatic rollback if the cancellation fails. On the backend, cancelling a parent job cascades to all child jobs.

Protocol termination conditions and parameterized durations

Protocol simulations now support early termination based on variable conditions — useful for ending long protocols (e.g. multi-cycle Arbin tests) after a target number of cycles. Duration and termination end conditions also accept input['...'] references, enabling fully parameterized experiments such as eVTOL design optimization with variable cruise duration.Find out more →

Edit and delete optimizations

Optimization name and description are now editable from the detail page, and you can delete optimizations with a confirmation dialog. The experiment-step validation toggle is also exposed as a per-objective setting, letting you control whether each objective validates against experiment steps.
Improvements
  • Added cancel buttons for running pipelines, optimizations, and simulations with cascading cancellation.
  • Added optimization editing (name and description) and delete with permission checks.
  • Exposed the validate-against-experiment-steps toggle on each optimization objective.
  • Unified table UI across optimizations, protocols, and pipelines — actions behind three-dot menus, clickable row names, no more “Actions” column header.
  • Added more plot variables to the protocol simulator results view.
  • Design parameters and experiment conditions are now preserved when rerunning simulations, and columns for differing parameters default to visible.
  • Removed the slug and additional_data fields from cell specification, instance, and measurement models.
Fixes
  • Fixed 500 error when simulating non-UTF-8 protocol files (e.g. BioLogic .mps).
  • Fixed optimization detail page layout issues.
Improvements
  • Added support for input['...'] parameter references in UCP duration and termination end conditions.
  • Deprecated the ionworkspipeline.workflows module in favor of the newer API.
Improvements
  • Added termination_condition callback for ending protocol simulations early when a variable condition is met.
  • Added support for Python-style list repetition (["step"] * N) in PyBaMM experiment strings.
  • Added support for PV_CHAN_Cycle_Index branching in Arbin protocol parsing.
Fixes
  • Fixed latin-1 fallback decoding for non-UTF-8 protocol files in the standalone simulator.
Improvements
  • Large request payloads (>512 KB) are now gzip-compressed automatically, reducing upload sizes significantly (e.g. 24.5 MB to 3.7 MB for typical serialized models).
  • Removed slug and additional_data fields from cell models.
  • Job status fields now use typed enums instead of raw strings.
March 16, 2026
Protocol Builder launch, stronger optimization guardrails, and better data ingestion

Protocol Builder is now available in Studio

Studio now includes a visual Protocol Builder with step editing, drag-and-drop ordering, YAML import/export, and backend-backed validation before upload. You can also configure global safety limits for current, voltage, and temperature directly in the builder.Find out more →

Optimization setup is safer and easier to reuse

You can now clone optimizations and save them as reusable templates. Optimization runs also validate that fit parameters are actually used by at least one objective model before execution, helping catch invalid configurations earlier.

Data ingestion and model setup got more robust

This week adds stronger cycler-data handling across formats and improves initialization behavior for fitting workflows, including more flexible parameter configuration defaults.
Improvements
  • Added pipeline edit/delete support with row actions, bulk delete, and permission checks.
  • Added a Simulations tab to parameterized model details for quicker navigation and management.
  • Added optimization cloning and “save as template” workflows.
  • Added simulation rerun actions and job resubmit support for failed jobs.
  • Added protocol YAML display on simulation result pages with input substitutions.
  • Added source metadata display for direct entry elements in pipeline details.
  • Validation views now surface partial-failure warnings instead of failing silently.
  • Timestamps across key tables now display as absolute datetimes.
  • Standalone and add-result protocol forms now hide initial SOC/temperature inputs when those values are explicitly defined in UCP global settings.
Fixes
  • Fixed validation charts so single-point series render visibly.
  • Fixed edge cases in new-user onboarding, including logout and empty-credit handling.
  • Pipeline submission now runs asynchronously to avoid blocking request handling.
Improvements
  • Added pre-run checks that reject fit parameters not used by objective models.
  • Fit parameter configs now allow omitted initial_value and compute defaults from bounds.
  • OCP balancing now supports GITT workflows with improved interpolation and safeguards.
  • Differential evolution and related optimizer defaults were tuned for more reliable convergence on real-world data.
  • Pulse objective helpers now support DataLoader cycle slicing while preserving lazy loading.
  • Objective setup now supports better partial-result handling on solver failure paths.
Fixes
  • Fixed piecewise interpolation config roundtripping for 1D/2D direct-entry schemas.
  • Restored kwargs passthrough for custom initial-state handlers used by ECM and lumped SPMr workflows.
Improvements
  • Added validation to block oversized inline time series payloads (>1000 rows) with clear guidance to upload measurements and reference db: IDs.
Fixes
  • Non-idempotent API calls are no longer retried automatically.
  • Fixed current-sign normalization logic for mixed charge/discharge cycler exports that record absolute current values.
Improvements
  • Added a Gamry EIS reader with auto-detection for .dta and related impedance formats.
  • Improved multi-sheet Neware handling with better timestamp ordering and monotonic time reconstruction.
  • Numeric-string columns are now inferred and promoted more reliably during read/clean steps.
  • Added DataLoader.to_local() for exporting self-contained inline configurations.
Fixes
  • Fixed BioLogic reader handling for additional file variants.
March 9, 2026
Multi-measurement comparison, cycle aging simulations, and improved optimizer convergence

Multi-measurement comparison view

Select multiple measurements in the Cell Data table and click “Compare” to open a dedicated comparison page. The Time Series tab plots measurements on the same chart with configurable axes and a stack-cycles mode, while the Cycles tab shows cycle metrics like discharge capacity and coulombic efficiency across all selected measurements with optional retention mode. Filters can be applied globally or per-measurement.Find out more →

Cycle aging simulation template

A new cycle aging template is available for simulations, allowing you to define cycling protocols and visualize cycle-level metrics such as capacity fade and efficiency over hundreds of cycles.Find out more →

Improved optimizer convergence

The Differential Evolution optimizer now uses Latin Hypercube Sampling for better initial coverage of the parameter space, along with canonical mutation factor clamping and seed-based reproducibility. These changes improve convergence reliability across a wide range of fitting problems.
Improvements
  • Simulations can now be force-rerun while preserving the same simulation ID and study mappings.
  • The data list table now shows expanded specification columns (anode, cathode, electrolyte, case sub-fields), copy-on-click IDs, and a search-on-this-page feature.
  • EIS and dV/dQ data can now be viewed in dedicated tabs on measurement detail pages.
  • Cycler simulator jobs now provide live partial-result updates during execution.
  • Parameter sets are now dynamically discovered rather than hardcoded, so newly installed parameter sets appear automatically.
  • The API now includes a /discovery endpoint to help programmatic clients understand available capabilities and schemas.
  • Cell creation no longer requires anode and cathode to be defined upfront, simplifying the model creation workflow.
Fixes
  • Fixed stale data appearing after switching organizations.
  • Fixed a deserialization bug where model options were missing from design optimization jobs.
  • Fixed PyBaMM expression parameters (symbol tree dicts) not being deserialized correctly during parameterized model creation.
Improvements
  • Composite models now support nested list/tuple options (e.g. open-circuit potential configurations).
  • Capacity calculations now correctly account for the number of electrodes in parallel (n_elec).
  • Validation runs now surface simulation errors immediately instead of silently filling results with sentinel values.
  • Custom initial state support added for lumped SPMr and ECM models, accepting either a voltage string or SOC float directly.
Fixes
  • Fixed drive cycle step serialization losing interpolant data during roundtrip.
  • Fixed EIS simulation including unnecessary output variables in kwargs.
  • Fixed NaN values in simulation results causing constraint actions (GreaterThan/LessThan) to crash instead of returning penalty values.
Improvements
  • Added an API discovery skill to help agents explore available endpoints and schemas.
Improvements
  • DataLoader now accepts environment configuration for database connections.
  • Step detection now checks the last step after the first for more reliable step boundary identification.
Fixes
  • Fixed DataLoader.copy() failing on lazy-loaded from_db instances by ensuring time series data is loaded before cloning.
Fixes
  • Fixed a drive cycle temperature handling bug.
  • Added validation that safety limit minimums must be less than maximums, preventing misconfigured protocols.
  • Fixed a delayed processing bug where initial SOC parameter values were not saved for later variable evaluation.
  • Fixed Maccor parser not recognizing constant-power/constant-voltage (CPCV) protocol steps.
March 2, 2026
Protocols in studies, dependent parameters, and Polars-powered data processing

Protocols in studies

Protocol simulations can now be run directly within a study, alongside standard experiments. Protocols can be uploaded from raw cycler format or Universal Cycler Protocol, with results appearing inline alongside other study results.Find out more →

Dependent parameters

When creating a parameterized model, any parameter value can now be set to an expression referencing other parameters. Referenced parameters are automatically detected and added to the model, enabling linked or derived parameter relationships without separate configuration.Find out more →

Faster step handling with Parquet storage

Cell measurement steps are now stored as Parquet files instead of SQL tables, significantly improving upload and download times for measurements with thousands of steps. Existing data is migrated transparently — no action is required.
Improvements
  • Pipeline status now shows detailed element-level job status, giving better visibility into running, pending, and completed pipeline elements.
  • Data uploads are now parallelized for faster ingestion of large datasets.
  • EIS result plots are now displayed after impedance fitting.
  • Updated OCP and EIS validation plots.
Fixes
  • Fixed simulation creation page not loading correctly.
  • Fixed an issue where chunk files could become temporarily unavailable during large downloads.
  • Fixed a race condition where shutting down one job could inadvertently terminate concurrent jobs on the same cluster.
Improvements
  • Pipeline objectives can now create direct entries from Studio pipeline results using a pipeline ID.
  • OCP validation plots now include dUdQ (incremental capacity) curves.
Fixes
  • Fixed EIS fits failing when models contained interpolant-based function parameters.
  • Fixed a serialization bug where deep-copying parameter values could corrupt model state.
Improvements
  • OCP data can now be uploaded through the API.
Improvements
  • DataLoader now uses Polars as its internal representation for faster data operations.
  • DataLoader.from_db supports lazy loading — data is fetched only when first accessed, reducing unnecessary I/O for pipeline configurations.
  • Time series and steps can now be loaded independently, enabling efficient step filtering without downloading full time series.
  • Added a rest_to_ocp transform for extracting OCP from rest steps without requiring GITT labels.
  • Added Maccor CSV tab-separated file reader.
Fixes
  • Fixed dUdQ computation failing on lazily-loaded data.
  • Fixed step summarization for data without a time column.
Improvements
  • Added support for CCCV and PEIS protocols, plus anode and cathode voltage termination conditions.
Fixes
  • Fixed a bug where building a model for voltage or power control modes mutated the base model, causing “overdetermined” errors on subsequent evaluation steps.
  • Fixed a Maccor protocol variable resolution bug.
February 23, 2026
Initial conditions in objectives, memory-efficient streaming, and unified drive cycles

Initial conditions in pipeline objectives

Pipeline objectives now support a preamble mechanism for setting initial conditions — initial state of charge, temperature, and voltage — directly on each objective. Conditions are properly isolated across multiple objectives, so sweeping over different starting points no longer requires separate pipeline configurations.Find out more →

Memory-efficient simulation streaming

Large simulation solutions are now uploaded and downloaded in chunks, significantly reducing peak memory usage on the backend. This makes it practical to run and retrieve results from long-duration or high-resolution simulations without hitting memory limits.
Improvements
  • Cell measurement plots now support flexible x-axis selection with prioritized column options.
Improvements
  • Initial SOC can now be set from the objective options dictionary at creation time.
Improvements
  • Added a time-monotonicity validator that checks uploaded measurement time series are strictly increasing.
Improvements
  • Protocol solution metadata can now be extracted in memory, eliminating the need to write intermediate files to disk during simulation.
  • Unified drive cycle handling across Maccor and Arbin protocols, replacing the Maccor-specific “Waveform” abstraction with a general “DriveCycle” concept.