Modules
A liquid handler is not a monolith. It is a collection of modules — the pipetting channels, the 96-nozzle head, the iSWAP arm, the CO-RE gripper, the autoload, the Bravo gripper — each with its own capabilities and its own lifecycle. Your protocol commands modules, not the device as a whole.
A module is the unit of capability you can command:
- Pipetting channels / heads (
hamilton.pipettes,hamilton.core96,bravo.pipette_head) — aspirate and dispense liquid - Grippers and transport arms (
hamilton.core_gripper,hamilton.iswap,bravo.gripper) — move labware between deck positions - Autoload — load and unload carriers from the front of the deck
- Readers, heaters, shakers — integrated accessories exposed through their own module interfaces
This mirrors the connector-side vocabulary: in the CDK, a module is an addressable capability exposing properties, sensors, and controls. Consumer-side, you see the same unit.
Transport modules at a glance
Three modules move labware, each with a different mechanism and reach. Pick one based on your device and the kind of transport you need:
| Hamilton CO-RE | Hamilton iSWAP / IPG | Bravo | |
|---|---|---|---|
| Device | Hamilton STAR / Vantage | Hamilton STAR / Vantage | Agilent Bravo |
| Mechanism | Two pipette channels pick up paddles | Dedicated rotatable gripper | Integrated gripper arm |
| On-deck transport | Yes | Yes | Yes |
| Off-deck reach | No | Yes | No |
| Rotation support | No | Yes | No |
| Module setup | Configure paddle locations | None | None |
| Best for | Quick on-deck moves | Off-deck integrations, rotations | Bravo deck repositioning |
The same pattern applies across module types: different mechanisms, a shared conceptual shape.
Module lifecycle
Every module has a small state machine that determines when it can receive commands:
INSTALLED → CONFIGURED → INITIALIZED → ACTIVE
- Installed: the device knows the module exists (from the device configuration).
- Configured: any setup that depends on deck geometry is complete — for example, the CO-RE gripper has had its paddle pickup locations set.
- Initialized: the module has homed and reported ready.
- Active: the module is currently the tool in use. On Hamilton, modules that share the pipetting arm are mutually exclusive — activating one deactivates the others.
Most protocols only call activate() before using a module and move on. Configuration is a one-time setup step on the modules that need it (primarily the CO-RE gripper's paddle locations); initialization happens at the device level when you first connect.
Mutual exclusion
On Hamilton, the pipetting channels, the CO-RE gripper, and the iSWAP share the pipetting arm. Only one can be active at a time. Activating another module automatically deactivates the current one — which is how you "park" a gripper by activating the channels again.
On Bravo, the pipette head and the gripper are mutually exclusive for a different reason: the gripper cannot pick up plates while tips are mounted. Drop tips before calling a gripper operation.
Where to go next
- Labware Transport — procedural how-to for each transport module
- Basic Pipetting — commanding the pipetting modules
- Device-specific references: Hamilton STAR, Hamilton Vantage, Agilent Bravo
Liquid Handling
The domain model for liquid handling in the SDK — aspirate/dispense as the core abstraction, and how vendor differences are flattened behind one API.
Deck
The coordinate frame and resource tree that place labware in 3D space, and the layout files that make a deck reproducible across runs.