TofuPilot Framework
Last updated on June 25, 2026
The TofuPilot Framework is an open-source test framework purpose-built for hardware. It brings:
- Rich measurements: Capture typed values, waveforms, and aggregations with validation
- Operator UI: Create interactive operator UIs with no frontend development required
- Unit traceability: Identify each unit under test by serial number and track its metadata across runs
- Parallel execution: Run multiple phases and units simultaneously to reduce cycle time
- Equipment drivers: Reusable plugs to connect any test equipment or external resource
- Cross-platform support: Build once, deploy on Windows, Linux or macOS
A central procedure .yaml file defines the sequence. Phases run any logic you write as simple Python functions, and plugs connect any instrument or resource as Python classes.
Procedures can be run in development or station mode using the TofuPilot CLI, a lightweight executable available for all major operating systems and architectures. On stations, the CLI streams tests in real time to the dashboard, so you can control runs remotely and deploy procedure updates on a push. When the network drops, runs queue offline and sync once it returns.
The framework and CLI are both open-source under the MIT license. Both are built on a Rust engine that runs phases and slots in parallel, while everything you write stays plain Python.
Getting started
Deploy a template to a station
Start from a template, deploy it, then adapt the code.
Connect or create a free account on the dashboard.
Follow the new-procedure assistant: pick a starter template, create a station, and deploy.
Run the test on the station.
Clone the repository, adapt the phases and plugs, and push to redeploy.
Start from scratch
Build it yourself, locally first.
Install the CLI.
curl -fsSL https://tofupilot.sh/install | shcurl -fsSL https://tofupilot.sh/install | sh$p = "$env:TEMP\tp-install.ps1"; irm https://tofupilot.sh/install.ps1 -OutFile $p; powershell -ExecutionPolicy Bypass -File $p; ri $p -EA 0Write a procedure .yaml file with phases/ and plugs/ (see the example below).
Run it locally with tofupilot run ./battery-test.
Example procedure
A procedure is a .yaml file that declares phases and plugs, plus the Python they reference. This one reads a voltage from a power supply and validates it:
name: Battery Functional Test
version: 1.0.0
unit:
serial_number:
default_value: "BAT000001"
part_number:
default_value: "BAT-001"
plugs:
- name: power_supply
python: plugs.psu:PowerSupply
main:
- name: Measure Voltage
python: phases.measure_voltage
measurements:
- name: voltage
unit: V
validators:
- operator: ">="
expected_value: 4.8
- operator: "<="
expected_value: 5.2def measure_voltage(measurements, power_supply):
measurements.voltage = power_supply.read_voltage()class PowerSupply:
def read_voltage(self) -> float:
return 5.03Run it from the procedure directory with tofupilot run.
How is this guide?
