Migrating from Legacy Systems

Exclave vs TofuPilot: Factory Test Comparison

Learn how Exclave, the Rust factory test runner, compares with TofuPilot on test model, results, operator UI and maintenance status.

JJulien Buteau
intermediate6 min readNovember 9, 2026

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

ExclaveTofuPilot
LicenseBSD-3-ClauseMIT (Framework)
EngineRust binaryRust engine, Python phases
Installcargo install exclaveTofuPilot CLI installer
Latest releasev0.2.6, 2019-03-01Released continuously
Last commit2022-06-07Active
Test languageAny executablePython (plus pytest, OpenHTF, Robot Framework)
Result modelPass or fail from exit code, log linesTyped measurements with units and limits
StorageExternal logger programsStation 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.

config/rail.test
[Test]Name=Rail 3V3Description=Measure the 3.3 V railExecStart=/usr/local/bin/check-rail --min 3.2 --max 3.4

Other 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.yaml
19 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}
phases/rail_3v3.py
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

FeatureExclaveTofuPilot
Measurements with units and limitsNoYes
Test dependenciesYes (Requires, Suggests)Yes (depends_on)
Parallel phasesNot documentedYes
Multi-slot fixturesNoYes
Jig detectionYes (.jig unit)Station and slot configuration
Operator UITerminal view, or an external interface program over IPCBrowser kiosk generated from the procedure
Result databaseNone, logger programs receive TSV or JSON eventsDashboard, hosted or self-hosted
Yield and Cpk analyticsNoneYes
Deploy updates to stations.updater unit, undocumentedGit 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.

More Guides

Put this guide into practice