Docs | Forum | Installation | Getting started
Praxis is a comprehensive Python-based platform designed to automate and manage laboratory workflows. It leverages the PyLabRobot library to interface with a wide range of lab automation hardware. Praxis provides a robust backend system built with FastAPI, enabling protocol execution, asset management, real-time hardware control, and persistent state management.
Developed for the Ovchinnikov group in MIT Biology.
Praxis employs a modular, service-oriented architecture.
graph TD
A[User/API Client] --> B(API Layer - FastAPI);
B --> C{Orchestrator};
C --> D(Protocol Engine);
C --> E(Scheduler - Celery & Redis);
E --> F(Task Executor - Celery Worker);
F --> G(WorkcellRuntime);
G --> H1(Device Drivers/Simulators);
G --> H2(Asset Manager);
D --> I(In-Memory State Objects);
I --> J(Database - PostgreSQL);
C --> I;
G --> I;
B --> J;
C --> N(PraxisState - Redis);
F --> N;
For a detailed breakdown of components, services, and workflows, please refer to the System Architecture documentation.
- Application Modes:
- Production Mode: Full stack with PostgreSQL, Redis, and FastAPI.
- Browser Mode: Pure client-side execution using Pyodide (WASM) and SQLite-in-browser.
- Demo Mode: Frontend-only with pre-loaded mock data.
- Hardware Discovery: Detect connected USB/Serial devices directly from the browser via WebSerial and WebUSB.
- Real-time Monitoring: WebSocket-based live updates during protocol execution.
- Workcell Visualizer: Modern, dynamic 3D/2D visualization of deck slots, rails, and resources with accurate scaling.
- Asset Management: Comprehensive tracking of machines (liquid handlers, plate readers) and resources (plates, tips) with typed capabilities.
- Interactive REPL: Browser-based terminal for real-time hardware control and state inspection.
- Architecture Overview: Deep dive into components, data flow, and services.
- Installation Guide: Setup instructions for all modes.
- Quick Start: Run your first protocol in minutes.
The asset management system has been overhauled to include:
- PLR Inspection: Automatic discovery of hardware capabilities via LibCST-based static analysis.
- Typed Capabilities: Detailed tracking of machine-specific features (e.g., channel counts, iSWAP existence).
- Unified Asset Model: Standardized storage for all laboratory entities.
Praxis uses standard Python development tools managed by uv.
- Test:
uv run pytest - Lint:
uv run ruff check . - Typecheck:
uv run pyright
See CONTRIBUTING.md and AGENTS.md for more details.
| Feature | Limitation | Recommendation |
|---|---|---|
| Multi-Workcell | Scheduling across multiple physical robots is in progress | Use single-robot protocols for now |
| PWA Support | Mobile optimization is planned | Use desktop browsers for best experience |
| Legacy Drivers | Some older PLR drivers may require backend mode | Use Production Mode for full driver coverage |
| SharedArrayBuffer | Required for multi-threaded Python in Browser Mode | Ensure COOP/COEP headers are set (added to dev server) |
Disclaimer: Praxis is not officially endorsed or supported by any robot manufacturer. Usage of firmware drivers is at your own risk.