Skip to main content

an open-source Python package enabling Self-Driving Labs (SDLs) interoperability

Project description

Documentation Status PyPI version Downloads License YouTube YouTube Published Community

ivoryos_logo.png

IvoryOS: interoperable orchestrator for self-driving laboratories (SDLs)

A plug-and-play web interface for flexible, modular SDLs — you focus on developing protocols, IvoryOS handles the rest.

code_launch_design.png

Join our community!

IvoryOS is an open-source project under active development. We welcome feedback, feature ideas, and contributions from anyone working on or interested in self-driving laboratories.

Join our Discord or Slack to ask questions, share use cases, and help shape IvoryOS.


Table of Contents


What IvoryOS Does

  • Turns Python modules into UIs by dynamically inspecting your hardware APIs, functions, and workflows.
  • Standardizes optimization inputs/outputs, making any optimizer plug-and-play.
  • Provides a visual workflow builder for designing and running experiments.
  • Adds natural-language control for creating and executing workflows, see IvoryOS MCP for more details.

System Requirements

Platforms: Compatible with Linux, macOS, and Windows (developed/tested on Windows).
Python:

  • Recommended: Python ≥3.10
  • Minimum: Python ≥3.7 (without Ax optimizer support)

Core Dependencies:

Click to expand
  • bcrypt~=4.0
  • Flask-Login~=0.6
  • Flask-Session~=0.8
  • Flask-SocketIO~=5.3
  • Flask-SQLAlchemy~=3.1
  • SQLAlchemy-Utils~=0.41
  • Flask-WTF~=1.2
  • python-dotenv==1.0.1
  • pandas

Optional:

  • ax-platform==1.1.2
  • baybe==0.14.0
  • nimo
  • slack-sdk

Installation

From PyPI:

pip install ivoryos

32-bit Windows Installation

If you are deploying IvoryOS to a 32-bit Windows environment, pip may not find pre-compiled 32-bit binaries for certain modern packages (like greenlet, pandas, ``) on PyPI.

# 1. Install Flask-Session<0.7 (that doesn't depend on msgspec) and pandas (some pandas versions are not compatible with 32-bit Windows)
pip install Flask-Session<0.7
pip install pandas --user --only-binary=:all:

# 2. Install greenlet from conda-forge (32-bit PyPI wheels are no longer available)
conda install -c conda-forge greenlet -y

# 3. Finally, install IvoryOS
pip install ivoryos

Quick start

In your script, where you initialize or import your robot:

my_robot = Robot()

import ivoryos

ivoryos.run(__name__)

Then run the script and visit http://localhost:8000 in your browser. Use admin for both username and password, and start building workflows!


Features

Direct control:

direct function calling Devices tab

Workflows

  • Design Editor: drag/add function to canvas in Design tab, use #parameter_name for dynamic parameters, click Prepare Run button to go to the execution configuration page
  • Execution Config: configure iteration methods and parameters in Compile/Run tab.
  • Design Library: manage workflow scripts in Library tab.
  • Workflow Data: Execution records are in Data tab.

Logging

Add single or multiple loggers:

ivoryos.run(__name__, logger="logger name")
ivoryos.run(__name__, logger=["logger 1", "logger 2"])

Human-in-the-loop

Use pause in flow control to pause the workflow and send a notification with custom message handler(s). When run into pause, it will pause, send a message, and wait for human's response. Example of a Slack bot:

def slack_bot(msg: str = "Hi"):
    """
    a function that can be used as a notification handler function("msg")
    :param msg: message to send
    """
    from slack_sdk import WebClient

    slack_token = "your slack token"
    client = WebClient(token=slack_token)

    my_user_id = "your user id"  # replace with your actual Slack user ID

    client.chat_postMessage(channel=my_user_id, text=msg)

import ivoryos
ivoryos.run(__name__, notification_handler=slack_bot)

Use Input in flow control to get human input during workflow execution. Example:

Directory Structure

Created automatically in the same working directory on the first run:

click to see the data folder structure
  • ivoryos_data/:
    • config_csv/: Batch configuration csv
    • pseudo_deck/: Offline deck .pkl
    • results/: Execution results
    • scripts/: Compiled workflows Python scripts
    • default.log: Application logs
    • ivoryos.db: Local database

Demo

Online demo at demo.ivoryos.ai. Local version in abstract_sdl.py


Roadmap

  • Python property support (setter/getter)
  • Support dataclass input
  • Support **kwargs input
  • dropdown input
  • snapshot version control
  • check batch-config file compatibility

Contributing

We welcome all contributions — from core improvements to new drivers, plugins, and real-world use cases. See CONTRIBUTING.md for details.


Citing

Click to see citations

If you find this project useful, please consider citing the following manuscript:

Zhang, W., Hao, L., Lai, V. et al. IvoryOS: an interoperable web interface for orchestrating Python-based self-driving laboratories. Nat Commun 16, 5182 (2025).

@article{zhang_et_al_2025,
  author       = {Wenyu Zhang and Lucy Hao and Veronica Lai and Ryan Corkery and Jacob Jessiman and Jiayu Zhang and Junliang Liu and Yusuke Sato and Maria Politi and Matthew E. Reish and Rebekah Greenwood and Noah Depner and Jiyoon Min and Rama El-khawaldeh and Paloma Prieto and Ekaterina Trushina and Jason E. Hein},
  title        = {{IvoryOS}: an interoperable web interface for orchestrating {Python-based} self-driving laboratories},
  journal      = {Nature Communications},
  year         = {2025},
  volume       = {16},
  number       = {1},
  pages        = {5182},
  doi          = {10.1038/s41467-025-60514-w},
  url          = {https://doi.org/10.1038/s41467-025-60514-w}
}

For an additional perspective related to the development of the tool, please see:

Zhang, W., Hein, J. Behind IvoryOS: Empowering Scientists to Harness Self-Driving Labs for Accelerated Discovery. Springer Nature Research Communities (2025).

@misc{zhang_hein_2025,
  author       = {Wenyu Zhang and Jason Hein},
  title        = {Behind {IvoryOS}: Empowering Scientists to Harness Self-Driving Labs for Accelerated Discovery},
  howpublished = {Springer Nature Research Communities},
  year         = {2025},
  month        = {Jun},
  day          = {18},
  url          = {https://communities.springernature.com/posts/behind-ivoryos-empowering-scientists-to-harness-self-driving-labs-for-accelerated-discovery}
}

Acknowledgements

Authors acknowledge Telescope Innovations Corp., UBC Hein Lab, and Acceleration Consortium members for their valuable suggestions and contributions.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ivoryos-1.5.21.tar.gz (441.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ivoryos-1.5.21-py3-none-any.whl (476.8 kB view details)

Uploaded Python 3

File details

Details for the file ivoryos-1.5.21.tar.gz.

File metadata

  • Download URL: ivoryos-1.5.21.tar.gz
  • Upload date:
  • Size: 441.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for ivoryos-1.5.21.tar.gz
Algorithm Hash digest
SHA256 57bab14a8831b6d25983db9c72cce56135f6cd735f6a20df2b30bcb72333b9bf
MD5 4d65329e4ad8aa4b2cc8a18743c8c0a8
BLAKE2b-256 575f010bd56a285b4127a21e9a8d70c535a2ee3f762f297ac0c8279ee20bd680

See more details on using hashes here.

File details

Details for the file ivoryos-1.5.21-py3-none-any.whl.

File metadata

  • Download URL: ivoryos-1.5.21-py3-none-any.whl
  • Upload date:
  • Size: 476.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for ivoryos-1.5.21-py3-none-any.whl
Algorithm Hash digest
SHA256 197917c1c890a301ede4da7354e9d99fb498278fd7ce274fc8221e46150d3a6a
MD5 63a372ff82197238e2525b034aaa3a9b
BLAKE2b-256 1ce8901f7056d6a33a237a0ee79c118c34b590d132d4637a276d71c1b300e4b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page