Rigs for Zephyr

A rig is a board plus the modules plugged into it, described as data instead of as a hand-written overlay per combination.

Zephyr models an add-on board as a shield: a devicetree overlay naming the board’s pins directly. That works for one module on one board. It stops working the moment you want the same module twice, on a different connector, or on a different host board — the overlay names pins, so a second copy needs a second overlay. Bridle carries 64 overlays for a single Grove button for exactly this reason.

Rigs replace that with three separated facts:

  • a connector type says what a kind of socket offers — which positions exist, which buses can cross it;

  • a board declares its sockets as real devicetree nodes, once;

  • a shield template says what a module needs, in positions rather than pins.

A rig then just says what is plugged where, and the expander computes the overlay. One shield definition plus one line per placement replaces the 64 overlays — and an assembly that cannot physically work is rejected at configure time, with a diagnostic that names the pin.

Warning

Under active development. The rig model is real and builds real firmware today, but parts of it are still moving. Tutorials covering functionality that has not shipped yet say so in a warning as their first content — believe those warnings.

This documentation follows the Diátaxis framework, organized into four kinds of page:

  • Tutorials — guided, hands-on lessons that build up the rig model one concept at a time.

  • How-to guides — step-by-step recipes for a specific task.

  • Reference — precise, factual descriptions of files, commands, and terms.

  • Explanation — the reasoning behind why rigs are built this way.