Footprint Widgets
Public Unreviewedby John Lauer
README-instantiable footprint-variant viewer: baseline + heatsink vias, 300um solder balls, rounded pads, parsed live from kicad_mod files
Contents
README
markdownFootprint Widgets
Home of <adom-footprint-variants> — the README-instantiable widget that renders a part's footprint-variant family (baseline, heatsink vias, 300 µm solder-ball placement, rounded-rect pads, combined) straight from the page's .kicad_mod files. A sibling of Ray's adom/component-widgets, on the same shared adom-lbr hover bus.
Live demo
The LAN7800's six-variant family, parsed and drawn from real KiCad footprints:
Using it on your page
Put the tag on its own line (own paragraph) in any README.md:
::adom-footprint-variants{src="/OWNER/SLUG/render/part.variants.json"}
Attributes:
| attr | meaning |
|---|---|
src |
absolute wiki path to the part's .variants.json manifest |
variant |
initial selection: a suffix (-HV-SB-RR) or device name (solder balls) |
heading |
override the title (defaults to the manifest's part) |
Data contract
src points at the adom-footprint variants manifest — the file adom-footprint's heatsink / solderballs verbs already emit next to the generated mods:
{
"part": "LAN7800",
"package": "QFN-48 7x7mm",
"variants": [
{ "suffix": "", "device": "baseline", "kicad_mod": "part.kicad_mod",
"changed": "nothing; the page footprint as-is" },
{ "suffix": "-HV", "device": "heatsink vias", "kicad_mod": "part-HV.kicad_mod",
"changed": "+16 thru_hole pads under the EP ..." }
]
}
Each variant's kicad_mod is fetched relative to the manifest's URL, so publishing the manifest and mods on one page is all it takes — no pre-baked geometry JSON, the widget parses the s-expressions in the browser:
- SMD pads (
rect/oval/roundrectwithroundrect_rratio) → gold lands thru_holepads → heatsink vias (copper annular ring + drill)- filled
fp_circles onUser.9(Adom.SolderBalls) → the 300 µm solder balls F.SilkS/F.Fab/F.CrtYdgraphics → silkscreen, fab outline, courtyard (also sizes the board)- anything a variant adds or changes vs the baseline gets an accent outline
Hovering a pad emits on the shared adom-lbr hover bus (BroadcastChannel('lbr-hover') + parent relay), so an ::adom-pinout on the same page cross-highlights the matching pin, and vice versa.
Why these variants exist
- Heatsink vias pull heat from a QFN's exposed pad into the inner copper planes; numbering them like the EP keeps them on its net with clean DRC.
- Solder-ball placement shows exactly where Adom jets 300 µm balls on pads and EP.
- Rounded pads (the Altium habit): a sharp pad corner is a stress riser where copper fatigues and peels off the FR4 through thermal cycling; rounded corners — like an airplane window — spread the stress.
Generating a variants family
No manifest yet? tools/make-variants.py builds the whole family from a baseline .kicad_mod, reproducing the adom-footprint 1.0.22 heatsink / solderballs rules bit-for-bit (verified against adom/lan7800's files: same 16 vias, same 296 balls, same roundrect ratios):
python3 tools/make-variants.py part.kicad_mod --part KSZ9031RNX --package "QFN-48 7x7mm" --ep 49
# -> part-HV / part-SB / part-RR / part-HV-SB-RR .kicad_mod, part.variants.json, the rule JSONs
Rules: vias 1.2 mm pitch, 0.3 mm drill, 0.6 mm OD, 0.45 mm inset, numbered like the EP; balls Ø0.30 mm at 0.25 mm pitch on every pad (the EP gets a perimeter ring plus a ring around every via position, 0.55 mm keep-out); roundrect ratio 0.25 on signal pads, 0.1 on the EP.
Registration
Registered in the wiki-wide adom/widgets registry as adom-footprint-variants; readers' frames load it through the registry-gated /widget-script/adom-footprint-variants.js route, which serves widgets/footprint-variants-widget.js from this page's repo.