This is a big release! We have lots of new improvements in the 26.1.30 release - let me walk you through the big ones:
Highlights
-
Support for Pioreactor XR and OD fusion of sensors
-
New Protocols page to view calibration protocols
-
Run calibrations in the UI (no more command line)!
-
New REF normalization technique that should significantly improve concordance between Pioreactors. Try
ref_normalization=unityunder[od_reading.config]. Note that existing OD calibrations will break if this is used - you’ll have to make new OD calibrations. (unityis the default if set, useclassicif you want to go back) -
Lots of UI and performance improvements
26.1.30 Full changelog
Highlights
- Run calibrations from the UI.
- New Protocols page with guided calibration sessions, step-by-step instructions, and live charts.
Enhancements
- Support for Pioreactor XR.
- Faster Stop commands in the UI, plugin listing, and data exports.
- Added dosing start/stop events to
dosing_automation_events, including exports. - Added unit-relative IR LED reference normalization for OD readings via
ref_normalization=unity. This should align different Pioreactors to similar starting values, especially v1.5 models. However, this changes OD levels, so existing OD calibrations are not adjusted automatically. - New query pattern for faster Experiment Overview chart loading; large datasets may show randomized sampling in time series. Let us know if this is too distracting. Max point targets per series increased to 1400.
- OD calibrations now support multiple photodiode angles;
pio calibrations run --device odcan emit per-angle calibrations for 45/90/135.- Added an update helper to migrate legacy OD calibrations into per-angle devices.
- Calibration protocols are now exposed via API.
- When a Pioreactor model is changed, a (non-blocking) hardware check is performed.
- You can now restart the web server (lighttpd) and the background task queue, Huey, from the UI. Go to Leader → “Long-running jobs”, and see the “web server and queue” line.
- Added spline and akima curve support for calibrations, including OD standards sessions and calibration charts.
pio calibrations analyzenow supports--fit poly|spline|akima. You can use this to refit a dataset to a spline or akima curve.- Added estimator artifacts alongside calibrations, including OD fusion estimators stored under
storage/estimatorsand managed via the calibration session flow. Estimators are a generalized calibration for more complex algorithms. Calibrations will be restricted to 1D models. - New unit APIs for estimators:
/unit_api/estimators/<device>/unit_api/estimators/<device>/<estimator_name>
- Faster startup and shutdown of Pioreactor jobs.
- Charts on Experiment Overview now scale with window size.
- New Estimators page in the UI.
Breaking changes
- Moved Self-test to the Inventory page. Pioreactors no longer need to be assigned to an experiment to run self-test.
- Removed
/api/workers/<pioreactor_unit>/configuration; use/api/units/<pioreactor_unit>/configuration. - Self-test logs are now part of
$experiment. - Calibration flow modules were merged into protocol modules; old import paths like
pioreactor.calibrations.pump_calibrationandpioreactor.calibrations.od_calibration_*are removed. - Removed experimental pump-detection failure handling from chemostat and turbidostat.
- OD calibration devices are now per-angle (
od45,od90,od135) instead of justod. Physically, this changes the calibration directory in~/.pioreactor/storage/calibrations/odto~/.pioreactor/storage/calibrations/{od45,od90,od135}. Existingodcalibration files and active calibrations are migrated during the update. - Self-test no longer creates a stirring calibration.
- OD reading charts in the UI previously had a sensor label next to the unit, ex:
worker01-2. Now it is the corresponding angle fromconfig.ini. Note: only the globalconfig.iniis used, not specificunit_config.inifiles. - New OD and stirring calibrations are now fit with a akima, and not a polynomial.
- Calibration curve data is now serialized as tagged structs (
poly/spline/akima) instead of raw lists.curve_typeis removed and existing calibration files are migrated during the update. - Reorganized calibration protocol modules into
core/pioreactor/calibrations/protocols/and extracted aregistry.pyfor protocol registration. - Removed OD calibration using a single vial.
Bug fixes
- Fix self-test logging closing prematurely.
- Fix floating point error at the boundary of OD calibrations.
- Fix runtime forward-reference errors in type annotations after dropping
__future__imports. - Fix timeouts being too short on some UI export operations.
- Re-save calibration files on
pio calibrations analyzeconfirmation even when the curve is unchanged. - UI now logs all warnings and errors, including from the web backend.
- Fix Mosquitto’s pw.txt file.




