Exclave is factory test infrastructure written in Rust, released under the BSD-3-Clause license. It runs any executable as a test, judges it by exit code, and is configured with systemd-style unit files. It was used for open hardware such as the Tomu and NeTV2 boards. TofuPilot is a test platform built around the open-source TofuPilot Framework, with structured measurements, a generated operator UI and a results dashboard. This guide compares the two for teams setting up a production test line.
Facts about Exclave were checked against its repository and crates.io in November 2026.
Overview
| Exclave | TofuPilot | |
|---|---|---|
| License | BSD-3-Clause | MIT (Framework) |
| Engine | Rust binary | Rust engine, Python phases |
| Install | cargo install exclave | TofuPilot CLI installer |
| Latest release | v0.2.6, 2019-03-01 | Released continuously |
| Last commit | 2022-06-07 | Active |
| Test language | Any executable | Python (plus pytest, OpenHTF, Robot Framework) |
| Result model | Pass or fail from exit code, log lines | Typed measurements with units and limits |
| Storage | External logger programs | Station queue, uploaded to the dashboard |
Exclave has had no release since 2019 and no commit since 2022, with open bugs on logging and a thread race in tests. Treat it as unmaintained.
Test Model
Exclave describes a test as a unit file. The test passes when the command exits with code 0; stdout is progress and stderr is errors. Tests run under a PTY with a timeout, then SIGTERM, then SIGKILL.
[Test]Name=Rail 3V3Description=Measure the 3.3 V railExecStart=/usr/local/bin/check-rail --min 3.2 --max 3.4Other unit types group tests into scenarios (.scenario), detect the physical jig (.jig), start tests on an event (.trigger), send events to loggers (.logger) and launch external interfaces (.interface). Dependencies between tests use Requires and Suggests.
The strength is language independence: a shell script, a C program and a Python script are all valid tests. The cost is that the measured value, its unit and its limits stay inside the script. Exclave only sees pass or fail.
TofuPilot records the value itself, with its limits, so a failing unit shows how far out it was and a passing one shows its margin:
procedure.yaml19 lines
name: Power Checkversion: 1.0.0plugs: - name: Multimeter key: dmm python: plugs.dmm:Multimetermain: - name: Rail 3V3 key: rail_3v3 python: phases.rail_3v3 measurements: - name: Rail 3V3 key: rail_3v3 unit: V validators: - {operator: ">=", expected_value: 3.2} - {operator: "<=", expected_value: 3.4}def rail_3v3(measurements, dmm): measurements.rail_3v3 = dmm.read_voltage()Existing executables do not need rewriting: a phase can call them with subprocess and record their output as measurements.
Feature Comparison
| Feature | Exclave | TofuPilot |
|---|---|---|
| Measurements with units and limits | No | Yes |
| Test dependencies | Yes (Requires, Suggests) | Yes (depends_on) |
| Parallel phases | Not documented | Yes |
| Multi-slot fixtures | No | Yes |
| Jig detection | Yes (.jig unit) | Station and slot configuration |
| Operator UI | Terminal view, or an external interface program over IPC | Browser kiosk generated from the procedure |
| Result database | None, logger programs receive TSV or JSON events | Dashboard, hosted or self-hosted |
| Yield and Cpk analytics | None | Yes |
| Deploy updates to stations | .updater unit, undocumented | Git push, instant rollback |
When Exclave Fits
- Tests already exist as executables in several languages and only a pass or fail is needed.
- A small number of benches where results are kept as log files.
- The team can maintain a fork, since upstream is inactive.
When TofuPilot Fits
- Each measurement must be stored with its value and limits for traceability.
- Several stations need the same test version, deployed and rolled back centrally.
- Operators need guided prompts, serial number scanning and clear pass or fail screens.
- Yield, failure Pareto and Cpk are needed without building a pipeline.
For other open-source options, see Open Source Test Executive Alternatives.
