Fabrication output
One of the kicad_skills usage guides for the
edaCLI — all of them. Plain Markdown: read it directly, or hand it to whatever assistant you use.
Turns a finished board into the files a manufacturer accepts. Runs in the
container (see the eda-environment guide), offline.
One command for the whole package
./bin/eda.sh pcb fab hardware/ -o build/fab
Writes, and records in build/fab/manifest.json:
build/fab/
├── gerbers/ copper, mask, paste, silkscreen, Edge.Cuts (X2, 6 digits)
│ ├── *.gbr
│ ├── *.drl Excellon, mm, with a PDF map
│ └── drill-report.txt
├── <board>-pos.csv pick and place, mm, DNP excluded
├── <board>-bom.csv grouped by value + footprint, DNP excluded
├── <board>-fab.zip everything above, ready to upload
└── manifest.json what was written, and what failed
Options: --step (3D model for mechanical review), --ipc2581 (single-file
exchange format some fabs prefer), --fab-layers (also plot F.Fab/B.Fab for
the assembler), --include-dnp, --pos-format ascii|csv|gerber, --no-zip.
Looking at the set before you upload
--preview plots every layer that went into the Gerber set, one PNG each plus a
labelled contact sheet, into preview/:
./bin/eda.sh pcb fab hardware/ -o build/fab --preview --background black
build/fab/
├── gerbers/ ...
└── preview/
├── layer-F_Cu.png ... one per exported layer, Edge.Cuts drawn on each
├── contact-sheet.png all of them tiled and labelled
└── images.json
--background white|black|transparent (default white) chooses what they are
drawn on: black to read on a dark screen, transparent to drop a layer into a
document or stack two of them. --preview-dpi defaults to 200.
The preview is the only thing kept out of the zip — the board house wants the manufacturing files, not pictures of them.
These are plots of the board rather than of the .gbr files, so they need no
Gerber viewer; the geometry is the same, and they answer the question a file
listing cannot. Gerber files carry no colours of their own — they are aperture
data — which is why the background is a property of the plot, not of the export.
Each step is independent: if STEP export fails, the Gerbers are still written
and the failure is listed in manifest.json.errors. The command exits 2 when
anything failed.
Before you send it
Run the reviews first. A fab package built from a board with DRC errors is just a faster way to make scrap:
./bin/eda.sh pcb review hardware/ --text # must be error free
./bin/eda.sh sch review hardware/ --text
./bin/eda.sh pcb fab hardware/ -o build/fab
Then check the package itself:
- Open
manifest.json-board_size_mm,layer_countand the step list should match what you ordered. drill-report.txtlists the hole count and sizes; compare against the fab’s minimum drill.- Render the layers (
--previewabove, orpcb render) and look at them - a missing layer in the Gerber set is invisible in a file listing but obvious in a plot. - Confirm the pick and place origin and units suit the assembler. Many want the drill/place origin rather than the sheet origin.
Bill of materials on its own
./bin/eda.sh sch bom hardware/ -o build/bom.csv
./bin/eda.sh sch bom hardware/ -o build/bom.csv --fields Reference,Value,Footprint,MPN,QUANTITY
Returns line_items and total_parts alongside the CSV, so a BOM that is
suddenly one part short is easy to spot between revisions. Grouping defaults to
Value,Footprint; DNP parts are excluded unless --include-dnp is given.
For ordering, the BOM needs manufacturer part numbers: add an MPN (or
Manufacturer_Part_Number) field to the symbols in the schematic and export it
with --fields. The toolkit does not invent part numbers.
What this does not do
- No panelisation, no fab-specific stackup files, no impedance control documentation - talk to the fab about those.
- No design rule translation:
pcb review --threshold ...uses your numbers, it does not know your fab’s capability table. - The zip layout suits most cheap fabs (JLC, PCBWay, Aisler, OSHPark all accept it), but some ask for a specific naming scheme. Check their guide once per vendor.