Blank starting boards for real, off-the-shelf perfboards — pick the one that
matches the physical board in your hand, copy it, and fill in components,
nets, and route. Each template just fixes the hole grid (cols × rows)
and pitch so your layout can't exceed the real board.
boards/
<brand>/
<size>.json # e.g. elegoo/5x7.json
Perfboards are not all the same hole count, even at the same nominal size — the usable grid depends on each maker's border margin. So templates live under a folder per brand, and contributors can add their own without disturbing others.
| Brand | Size | Grid (cols × rows) | Holes |
|---|---|---|---|
| Elegoo | 2×8 cm | 28 × 6 | 168 |
| Elegoo | 3×7 cm | 24 × 10 | 240 |
| Elegoo | 4×6 cm | 20 × 14 | 280 |
| Elegoo | 5×7 cm | 24 × 18 | 432 |
| Elegoo | 7×9 cm | 31 × 26 | 806 |
cols is always the longer edge (landscape). All holes are on a uniform
2.54 mm (0.1") grid. The Elegoo 2×8 grid (6×28) was counted on a physical board;
the rest share the same pitch and match the kit's published hole totals.
- Create
boards/<brand>/<size>.jsonfrom an existing template. - Count the holes on a real board (or cite the maker's spec) — set
cols(long edge) androws(short edge). Don't compute from millimetres alone; border margins make the count brand-specific. - Keep
pitchat26(this is render pixels, not millimetres — every board is physically 2.54 mm pitch). - Add a row to the table above.
boardwright build boards/<brand>/<size>.jsonshould render a clean empty grid of the right size.
Tip:
board_mmrecords the physical size for reference;brand/modelare free-form metadata. boardwright ignores unknown top-level keys, so add what's useful.