Releases: Pioreactor/pioreactor
Releases · Pioreactor/pioreactor
25.12.10
Enhancements
- Added a
pio jobscommand group withrunning,list,info, andremovesubcommands to inspect and tidy job records, including published settings.
Breaking changes
pio job-statushas been replaced bypio jobs status.- changed
/unit_api/jobs/stopfrom using query params to json body.
Bug fixes
- fix OD blank not being able to be run.
- OD calibration now clamps out-of-range voltages to the OD values paired with the calibration’s voltage extrema, preventing inverted mappings on non-monotonic curves.
- Images ship with DAC43608 library (missed the previous OS jump!)
- Improvements to "Updating your model" on first boot.
- Fix /pioreactor page crashing if a worker is inactive in the experiment.
- Fixed clock syncing on the cluster
25.12.9rc0
Upcoming
Enhancements
- Added a
pio jobscommand group withrunning,list,info, andremovesubcommands to inspect and tidy job records, including published settings.
Breaking changes
pio job-statushas been replaced bypio jobs status.
Bug fixes
- fix OD blank not being able to be run.
- OD calibration now clamps out-of-range voltages to the OD values paired with the calibration’s voltage extrema, preventing inverted mappings on non-monotonic curves.
- Images ship with DAC43608 library (missed the previous OS jump!)
- Improvements to "Updating your model" on first boot.
- Fix /pioreactor page crashing if a worker is inactive in the experiment.
25.11.19
25.11.19
Enhancements
-
Added
pio job-statusfor a quick view of running jobs. -
Easier time syntax for experiment profiles!
- Use the
tfield to specify times using suffixes, like15s,1m,2.5h - In
repeatblocks,everyreplacesrepeat_every_hours, andmax_timereplacesmax_hours. Both the same time syntax above. - In
whenblocks,wait_untilreplacescondition.
experiment_profile_name: demo_stirring_repeat metadata: author: Cam Davidson-Pilon description: A simple profile that starts stirring, increases it every 5min, and stops when the RPM exceeds 2000. common: jobs: stirring: actions: - type: start t: 0 - type: repeat t: 5m every: 5m actions: - type: update t: 0.0s options: target_rpm: ${{::stirring:target_rpm + 100}} - type: when t: 0s wait_until: ${{::stirring:target_rpm > 2000}} actions: - type: stop t: 0sThis is now the preferred way (though the old syntax isn't going away), and docs will be updated to reflect this.
- Use the
Bug fixes
- Cluster CLI commands now use
click.Abort()(instead of baresys.exit) so failed prompts, copy/install operations, and OD blanking exit cleanly with Click’s messaging. - Background jobs now only clear MQTT/db cache entries for attributes that were actually set, preventing accidental removal of unset metadata.
- Dodging jobs keep their OD-reading interval topic published even if a second OD reader attempts to start and fails, so dodging continues uninterrupted.
- Fix
pios update ...breaking the web server from starting. (pio updateis fine)
25.11.18rc0
bump rc version
25.11.12
25.11.12
👋 Hi, just note you can't upgrade to this release via our usual manner - you need to do a full rewrite of your SD card.
Highlights
- Added support for Pioreactor v1.5.
- Upgrade to Trixie Debian 13!
- New Pioreactor architecture:
- New environment variable file /etc/pioreactor.env
- The old
pioreactoruiPython package is now part of thepioreactorPython package, underpioreactor.web - Moved temporary files from /tmp to /run/pioreactor/
- New
pioreactor-web.serviceto handle bothhuey.serviceandlighttpd.service
Enhancements
pioreactor.hardware: reworked GPIO, PWM, and I2C configuration to load from layered YAML mods so new HAT+model combinations can be described without code changes. See new ~/.pioreactor/hardware directories.pioreactor.hardware: constants are now resolved lazily through accessor functions (e.g., determine_gpiochip(), get_pwm_to_pin_map()); direct module constants remain but are deprecated shims that emit warnings.- Export images (PNGs and SVGs) of the Overview's and Calibrations' charts.
- MCP server: added tools for creating experiments and managing worker assignments.
- Show and hide calibration curves in Calibrations page by clicking the dot beside the calibration (similar to the Overview page).
- Adding
pio workers update-model <unit> -m <name> -v <version>to leader's CLI. - Added time-window and time-format options to the individual Pioreactors pages.
- New workflow to set your Pioreactor leader-worker model on first load of the UI.
- Add new APIs and MCP tools via plugins. Example: drop the following in your ~/.pioreactor/plugins folder:
# -*- coding: utf-8 -*-
from __future__ import annotations
from pioreactor.plugin_management import get_plugins
from pioreactor.web.plugin_registry import register_mcp_tool
__plugin_name__ = "mcp-plugins"
__plugin_version__ = "0.1.0"
__plugin_summary__ = "Adds convenience MCP utilities for Pioreactor plugin introspection."
__plugin_author__ = "Cam DP"
@register_mcp_tool()
def list_installed_plugins():
"""
Return metadata for installed Pioreactor plugins registered with the system.
"""
plugins = get_plugins()
details = [
{
"name": name,
"version": plugin.version,
"summary": plugin.description,
"author": plugin.author,
} for name, plugin in plugins.items()
]
return {"plugins": details}
- New import of system files (the
~/.pioreactordirectory) into Pioreactors. This means that it's easy to "back up" a pioreactor (leader or worker), and then reupload this to a (new) pioreactor in your cluster via the import system. This is available on the Inventory page. - support for up to four PDs.
Breaking changes
- Changed
start_od_readingAPI. It now accepts a dict instead of args for each PD position. - Generally lots of files moved around. See docs here on locations.
25.11.10rc0
bump rc version
25.9.18
25.9.18
- Experiment profile editor: added a searchable capabilities browser. You can now search across available jobs, automations, actions, and options directly in the editor. This should make building and editing profiles faster and reduce syntax errors.
- Experiment Overview charts: no longer hide older data on long experiments. Instead, each series is downsampled on the client to a maximum of 720 points while preserving trends, regardless of experiment length. For very large clusters this may increase initial load time — narrowing the time range or hiding unused series can help if you notice slowness.
- Eye-spy optics: initial support is included. If detected, the OD reading job can use it via the existing interfaces. Nothing changes if you don’t have this hardware connected; more documentation will follow.
- Inventory export: from the Inventory page, you can export a worker’s
~/.pioreactordirectory as a zip. The Leader page also includes an export for the leader’s~/.pioreactor. This is useful for backups, support, or migration. Review the archive before sharing — it may contain configuration and credentials. - Pump scripting:
pio run pumps ...now accepts asleepstep to pause between actions. Example:pio run pumps --media 2 --sleep 1 --waste 1.5runs media for 2 mL, waits 1 s, then runs waste for 1.5 mL. In experiment profiles, you can repeat actions by suffixing keys with_, for example:jobs: pumps: actions: - type: start options: media: 2 sleep: 1 waste: 1.5 sleep_: 2 # repeat keys by adding underscores waste_: 0.5
- Advanced config for automations: the UI’s “Advanced” menu (temporary config overrides at start) is now available when launching automations, not just individual jobs. The options shown come from the
[<job_name>.config]section. - CLI: added leader-only experiment management commands —
pio experiments create <NAME>,pio experiments list, andpio experiments delete <NAME>.
Bug fixes
- Restored live updates in real‑time charts in the UI (regression fixed).
- Corrected timestamps on exported dataset folders in the archive.
- Removed cases of duplicate log lines shown in the UI.
- MCP now correctly respects configured notification methods.
- Fixed model selection in the “Add a new Pioreactor worker” dialog in Inventory.
- For leader-only Pioreactors, fixed leaders not showing up in "Cluster clocks" (and likely other places)
Breaking changes
- Turbidostat now enforces
duration = 0.25sfor its frequent checks. The UI already used this value; CLI runs will now match it for more consistent behavior.
25.9.17rc0
Testing custopizer@latest
25.9.15rc0
Upcoming
- Experiment profile editor: added a searchable capabilities browser. You can now search across available jobs, automations, actions, and options directly in the editor. This should make building and editing profiles faster and reduce syntax errors.
- Experiment Overview charts: no longer hide older data on long experiments. Instead, each series is downsampled on the client to a maximum of 720 points while preserving trends, regardless of experiment length. For very large clusters this may increase initial load time — narrowing the time range or hiding unused series can help if you notice slowness.
- Eye-spy optics: initial support is included. If detected, the OD reading job can use it via the existing interfaces. Nothing changes if you don’t have this hardware connected; more documentation will follow.
- Inventory export: from the Inventory page, you can export a worker’s
~/.pioreactordirectory as a zip. The Leader page also includes an export for the leader’s~/.pioreactor. This is useful for backups, support, or migration. Review the archive before sharing — it may contain configuration and credentials. - Pump scripting:
pio run pumps ...now accepts asleepstep to pause between actions. Example:pio run pumps --media 2 --sleep 1 --waste 1.5runs media for 2 mL, waits 1 s, then runs waste for 1.5 mL. In experiment profiles, you can repeat actions by suffixing keys with_, for example:jobs: pumps: actions: - type: start options: media: 2 sleep: 1 waste: 1.5 sleep_: 2 # repeat keys by adding underscores waste_: 0.5
- Advanced config for automations: the UI’s “Advanced” menu (temporary config overrides at start) is now available when launching automations, not just individual jobs. The options shown come from the
[<job_name>.config]section. - CLI: added leader-only experiment management commands —
pio experiment create <NAME>,pio experiment list, andpio experiment delete <NAME>.
Bug fixes
- Restored live updates in real‑time charts in the UI (regression fixed).
- Corrected timestamps on exported dataset folders in the archive.
- Removed cases of duplicate log lines shown in the UI.
- MCP now correctly respects configured notification methods.
- Fixed model selection in the “Add a new Pioreactor worker” dialog in Inventory.
Breaking changes
- Turbidostat now enforces
duration = 0.25sfor its frequent checks. The UI already used this value; CLI runs will now match it for more consistent behavior.
25.9.12rc1
bump rc version