New Pioreactor software release: 26.7.0 and 26.7.2

:wave: new software release day! Lots of nice QOL upgrades, bug fixes, and performance improvements.

:arrow_down: Download release here

Changelog 26.7.0

Breaking changes

  • Replaced pio update-settings and pios update-settings with 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 Z or 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 experiment string instead of an experiments list, and pio run export_experiment_data now requires one --experiment. Export manifests use schema version 1 with filters.experiment.

Enhancements

  • Bump to React 19.x, and new vite build system.
  • Added manifest.json and per-dataset schema.json metadata 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.ini and each reachable Pioreactor’s unit_config.ini in 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 status with 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 /tmp to 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 shutdown and pios reboot routing 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 status so IPv6 addresses returned by the operating system are no longer included.

How to update

Hi @CamDavidsonPilon

There is a harmless bug (dublication) in the new release, received this error in the logs after updating to the most recent version:

pioreactor-<leader>-api Yaml error in 50_self_test.yaml: Duplicate published setting key: test_positive_correlation_between_rpm_and_stirring

Right, I forgot to fix that!

Quick solution:

SSH into your leader, and edit the broken file using:

nano ~/.pioreactor/ui/jobs/50_self_test.yaml

and remove the duplicate entry test_positive_correlation_between_rpm_and_stirring.

Save and exit with ctrl-x. Then distribute to the rest of the cluster:

pios cp ~/.pioreactor/ui/jobs/50_self_test.yaml

Small hotfix release (skipped 26.7.1):

:arrow_down: release_26.7.2.zip

26.7.2

Bug fixes

  • Fixed mqtt_to_db_streaming so it restores database-topic subscriptions after MQTT reconnects, preventing experiment data from silently failing to reach the database while the service remains running.
  • Increased Turbidostat’s post-dose settling time from 5 to 30 seconds, reducing erroneous repeat dilutions caused by temporary OD spikes after pumping.

Hi @CamDavidsonPilon,

I fixed on my platform, but want to point that the duplication issue from the previous version still remains in 26.7.2

Yes, sorry, that fix will have to wait for 26.8.0!