New Pioreactor release: 25.8.14

:wave: it’s getting bot in here

25.8.14

:arrow_down: Download the release here

Highlights

  • Custom Bioreactor Models
    Our community has been incredibly creative in adapting Pioreactor hardware and software for different vessel types. Now, you can officially add your own custom bioreactor models to the Pioreactor software!
    Place your model definitions as yaml files in the new .pioreactor/models/ directory. For example:

    model_name: custom_100ml
    model_version: "1.0"
    display_name: "Custom 100 mL, v1.0"
    reactor_capacity_ml: 100.0
    reactor_max_fill_volume_ml: 95.0
    reactor_diameter_mm: 50.0
    max_temp_to_reduce_heating: 80.0
    max_temp_to_disable_heating: 85.0
    max_temp_to_shutdown: 90.0
    

    Example file name: custom_100ml.yaml

    This information is used throughout the software (including the UI) to support different shapes, sizes, and safety limits. Tell us what else you’d like supported!

  • New MCP Server (Experimental)
    You can now run an MCP server alongside your leader’s web server. It adds a new SSE-based endpoint at:

    http://<leader-address>/mcp/
    

    This exposes some Pioreactor tools in real time. It’s still experimental — your feedback and suggestions for additional tools/resources are welcome!

Enhancements

  • Added Time Range filter to the Export Data UI page.

  • The “Add a new Pioreactor worker” dialog now automatically scans for and lists local workers available to join your cluster.

  • New config.ini option:

    [od_reading.config]
    duration_between_led_off_and_od_reading = <seconds>
    

    This adjusts the pause between turning off LEDs and taking an OD snapshot.

  • pios X --experiments <experiment> now lets you target workers by experiment from the leader CLI.

  • More CLI options are available for jobs with settable: True published_settings.

  • New API endpoints:

    • /unit_api/capabilities
    • /api/units/<pioreactor_name>/capabilities
      These provide detailed information about what each Pioreactor can run.

Breaking changes

  • API changes:

    • api/units/<unit>/configuration response format updated.

    • Settings endpoint now scoped to experiments:

      /api/workers/unit1/jobs/settings/job_name/stirring/experiments/<exp>
      
    • Removed: /api/workers/jobs/stop/experiments/<exp>
      Use: /api/workers/$broadcast/jobs/stop/experiments/<exp>

    • Removed: /api/experiments/<experiment>/jobs/settings/job_name/<job_name>
      Use: /workers/$broadcast/jobs/settings/job_name/<job_name>/experiments/<experiment>

  • pio logs no longer follows by default — use -f to follow.

  • Developers: We’ve merged our three main repositories (pioreactor, pioreactorui, pioreactorui_frontend) into a single monorepo: pioreactor. The old repos will be archived, and update code in pio.py will now point to the new repo. If you have branches on the old repos, rebase onto pioreactor. Discussion: GitHub issue #576.

Bug fixes

  • Fixed default sorting when exporting CSV.
  • Fixed crash in UI profile editor.
  • Fixed pumps not shutting down correctly if active when dosing_automation stopped.
  • Fixed cleanup issue in growth rate calculation.
  • Fixed plugins page crashing when a plugin doesn’t have a homepage associated to it.

How to update

3 Likes

So much amazing stuff thank you!

known issues

  • live updates on charts sometimes doesn’t occur
  • “Add a Pioreactor to your cluster” doesn’t allow switching models (select box goes blank). For now, you can leave it as the default provided “Pioreactor 40ml, v1.0”, and then after the Pioreactor is added, switch it to the correct model.

Curiousity question - “In the future” could this be used to tackle GPIO-13 error without command line interface?

Hey, i just updated to this release but i can’t use the UI or add workers / leaders:

any ideas?

thanks!

Looks like the backend server isn’t working. Can you SSH into your leader and run

pio logs -f

and see if any errors come up? It could just be a config issue.

If that doesn’t show any errors, try:

sudo systemctl restart lighttpd.service && sudo systemctl status lighttpd.service && 

reload the UI, and see if errors appear there.

Maybe! I think we can find better ways to resolve this than an AI agent, though.