Grain Spec
Grain is a plain class name rather than an acronym.
A Grain is designed adjacent hardware that may be used in or alongside a BREAD, but is not a Slice and not a Loaf. Grains do not carry the full compatibility obligations of Slices.
For the full terminology reference, see Terminology.
What qualifies as a Grain?
A board is a Grain if:
- it is a designed PCB, not a commercial off-the-shelf part
- it is used alongside BREADS-compatible hardware
- it does not implement the BREADS Slice interface
- it is intended to be produced or reproduced, not purely a development jig
Categories
| Category | Description | Examples |
|---|---|---|
shield |
Plugs onto or wraps a development board | can-nano-shield |
card |
Plugs into a carrier or host board | stepper_card |
adapter |
Signal or connector adapter board | - |
module |
Self-contained support module that connects externally | - |
Manifest
Each indexed Grain repo must contain a grain.yaml at the repository root.
This file is the machine-readable manifest that enables discovery, validation,
and indexing.
See the manifest spec for the full field reference and the template to copy into a new repo.
Validate locally:
python bread-infra/scripts/validate_manifest.py grain.yaml
Discovery
The site index generator (generate_grain_index.py) scans feastorg repos for
the presence of grain.yaml at the repo root. There is no required repo naming
prefix; the manifest signals membership.
Relationship To Other Hardware
Loaf = attachment/interconnect layer for a BREAD
Slice = BREADS-compatible capability module
Grain = adjacent support hardware