Skip to content

capa

Control and DAQ for a custom controlled-atmosphere pyrolysis lab instrument (cone-calorimeter-class). capa drives a heterogeneous rig — NI-DAQ, Watlow heaters, Alicat mass-flow controllers, Sartorius balances, USB and FLIR IR cameras — through async-first device libraries, records every run as a self-contained on-disk bundle, and treats research workflows (calibrations, custom routines) as first-class plugins.

Pre-alpha

The public surface of capa.runtime, capa.devices, and capa.config is unstable. Pin to a commit.

Pick a path

  •   I'm new — give me a feel for it


    First sealed bundle in about five minutes, no hardware required. Walks you from launch to a finished run on the built-in simulator.

    Quick start

  •   I'm setting up a real rig


    Hardware install, first wiring, your first real bundle. Then the daily cadence and where to look when something feels off.

    Your first real run · Hardware TOML

  •   I run experiments here every day


    The operator handbook, the Setup / Run / Method tabs, the manual controls, and how to abort safely.

    Operator handbook · Daily workflow

  •   I'm reading a finished bundle


    What's in the directory, how to read the parquet and sqlite files, and how to verify a bundle is sealed and intact.

    What's in a bundle · Reading a bundle

  •   I want to write a plugin


    Procedures, profiles, device adapters, custom sinks, and method steps — all of these are entry-point-discovered plugins.

    Writing a procedure · Plugin system

  •   I'm touching the source


    The runtime topology, the threading model, the channel pipeline, and how to run the test suite locally.

    Runtime topology · Dev setup

Three concepts that unlock the rest

  •   Bundle


    A self-contained on-disk record of one run — config, method, calibration snapshot, equipment manifest, events, samples, video. Five years from now you can open it and know exactly what was measured.

    Deep dive

  •   Channel


    A named quantity (heater_pv, mfc_flow) bound to a device parameter. Channels never store data themselves — they read from bindings.

    Channel bindings

  •   Procedure


    The class of experiment (free run, recipe runner, heat-flux tune, …). Procedures are plugins, not core code.

    What is a procedure

See the Glossary for the full vocabulary.

Status

Beta runtime, alpha UX, pre-alpha API. The per-resource-worker runtime (Conductor + WorkerPool) is the current production runtime — the single-loop ExperimentEngine is gone. The unstable-API and development sections also live in the README.