new software release day! Lots of nice QOL upgrades, bug fixes, and performance improvements.
Changelog 26.7.0
Breaking changes
-
Replaced
pio update-settingsandpios update-settingswith the clearer job-setting commands:pio jobs set <job> <setting> <value> pios jobs set <job> <setting> <value> -
Added the required
version: "1.0"field to experiment-profile YAML. Existing profile files are migrated automatically during an upgrade. -
Changed time-filtered dataset export bounds supplied through the API, MCP, or CLI to require an explicit
Zor numeric UTC offset. The Export Data UI continues to accept local times and converts them using the browser’s timezone. -
Changed dataset exports to require exactly one experiment. API and MCP clients should provide an
experimentstring instead of anexperimentslist, andpio run export_experiment_datanow requires one--experiment. Export manifests use schema version 1 withfilters.experiment.
Enhancements
- Bump to React 19.x, and new vite build system.
- Added
manifest.jsonand per-datasetschema.jsonmetadata to exported data archives, including applied filters, row counts, column descriptions, and units. - Added a Download all configurations action to the Configuration page, which downloads the shared
config.iniand each reachable Pioreactor’sunit_config.iniin one ZIP archive. - Accelerated time-filtered dataset exports by using indexed UTC timestamp comparisons. On a representative 381,840-row experiment, a one-day query improved from more than 30 seconds to about 0.02 seconds.
- Added expression support to experiment-profile job
config_overrides. - Expanded
pio statuswith the assigned Pioreactor model and model-to-hardware compatibility checks. - Added subtle live-update highlighting to Pioreactor card states and settings.
- Performance improvements, specifically to growth-rate-calculating (less network overhead).
Bug fixes
- Fixed large sorted dataset exports exhausting memory by moving SQLite temporary sort files from RAM-backed
/tmpto disk-backed/var/tmp/pioreactor. - Improved background-job shutdown during rapid MQTT state changes, preventing queued commands from reviving stopped jobs and reducing cases where successfully stopped jobs remained shown as
lost. - Fixed temperature automations so an in-progress temperature inference cannot restore heater power after the job sleeps or disconnects.
- Fixed experiment-profile MQTT lookups to preserve decoded boolean and numeric values instead of coercing them as strings.
- Fixed experiment charts showing stale data when switching experiments, Pioreactors, or time ranges.
- Fixed
pios shutdownandpios rebootrouting when the leader is explicitly selected while keeping worker-only targets scoped to workers. - Fixed OD-dodging jobs so mode changes made while sleeping take effect correctly when the job resumes.
- Fixed the Leader page opening a second MQTT connection alongside the application-wide connection.
- Improved validation of calibration and estimator names and custom UI descriptors before they are written or rendered.
- Fixed IPv4 reporting in the monitor, API, and
pio statusso IPv6 addresses returned by the operating system are no longer included.