skills/pylabrobot/references/hardware-backends.md
Verified against PyLabRobot 0.2.1 on 2026-07-23. Support labels below come from the stable supported-machines page, not from marketing claims.
PyLabRobot separates:
LiquidHandler, which validates and records standard
operations;A common frontend does not guarantee identical channels, tools, operations, parameters, calibration, error semantics, timing, or firmware support. Backend-specific kwargs must be reviewed against the exact stable model page.
from pylabrobot.liquid_handling import LiquidHandler
from pylabrobot.liquid_handling.backends import (
EVOBackend,
LiquidHandlerChatterboxBackend,
OpentronsOT2Backend,
STARBackend,
VantageBackend,
)
Do not use stale names from older skill text:
STAR is not the stable high-level backend name; use STARBackend.TecanBackend is not the 0.2.1 EVO backend; use EVOBackend.OpentronsBackend is stale; use OpentronsOT2Backend.ChatterboxBackend has incorrect naming/capitalization for the recommended
generic liquid-handler testing backend; use
LiquidHandlerChatterboxBackend.ChatterBoxBackend (capital B) is a separate exported legacy-named class.
Avoid it when the stable docs specifically call for
LiquidHandlerChatterboxBackend.STARBackend; deck definitions
include STARDeck and STARLetDeck.VantageBackend; verify unsupported
commands and installed options.EVOBackend; do not describe it as
full or backend-equivalent to STAR.OpentronsOT2Backend(host, port=31950);
network/API/firmware compatibility is model-specific.Upstream defines:
These labels do not validate a particular firmware, attachment, computer, transport, or protocol.
from pylabrobot.liquid_handling import LiquidHandler
from pylabrobot.liquid_handling.backends import LiquidHandlerChatterboxBackend
from pylabrobot.resources.hamilton import STARLetDeck
lh = LiquidHandler(
backend=LiquidHandlerChatterboxBackend(num_channels=8),
deck=STARLetDeck(),
)
await lh.setup()
try:
# Build resources and exercise planned operations only.
...
finally:
await lh.stop()
This backend prints operations and updates software state. It does not connect to a robot and does not model robot physics. Keep the backend construction literal; never choose a live class from a string, plugin, environment variable, or untrusted config.
python3 skills/pylabrobot/scripts/inspect_backends.py \
--expected-version 0.2.1 --strict
The inspector:
setup();Method presence is not proof that a model implements the operation; some
backends deliberately raise NotImplementedError.
Base PyLabRobot==0.2.1 keeps hardware dependencies optional. Stable
installation documentation lists extras including:
serialusbftdihidmodbusopentronssilamicroscopypicoallInstall only the exact reviewed extra for a named device and keep the top-level pin:
# Example form only; do not run until the device and transport are approved.
uv pip install "PyLabRobot[serial]==0.2.1"
all intentionally does not include microscopy in stable 0.2.1 because of its
separate NumPy/SDK constraints. Optional transport packages can enumerate or
communicate with devices; installation does not authorize their use.
Do not instantiate a live backend or call setup() until a trained operator has
explicitly confirmed:
Never make a live run conditional only on USE_HARDWARE=true, a CLI flag, or an
IP/serial value. Confirmation must be tied to the reviewed protocol and current
physical setup.
These are direct firmware drivers. Upstream states that PyLabRobot is not endorsed or supported by robot manufacturers and that firmware-driver use may affect warranty. Review USB permissions, device selection, cover/arm/head configuration, firmware ranges, liquid-level detection, channels, CO-RE tips, and all device-specific errors.
Stable status is Basic, not full. Use EVOBackend; verify which LiHa/RoMa
commands, arms, tips, carriers, and firmware paths are implemented. Never infer
Hamilton behavior or liquid classes.
OpentronsOT2Backend communicates with an explicitly configured host over
HTTP. Do not scan a network or probe a robot. Confirm robot software/API
compatibility and unsupported operations; stable source explicitly rejects
some features such as a 96 head and robotic-arm methods.
The stable pin/tag is v0.2.1. Repository main continued changing through
2026-07-22 during this review. Development docs and CHANGELOG.md's
Unreleased section may describe classes not in the wheel. For example,
HighRes MicroSpin support is unreleased and must not be presented as a stable
0.2.1 capability.
When considering a later release:
Requires-Python, extras, tag, changelog, and source.Checked 2026-07-23:
v0.2.1 backend source
— exact classes and limitations; tag commit dated 2026-03-23.Unreleased.