DFM profiles

Fabricator capability sheets checked against the board.

A DFM profile is a fabricator’s capability sheet as JSON: fab limits (track width, clearance, drill range, annular ring, via diameter, mask dam and expansion, silk width and silk to pad, copper to edge, hole to hole and to copper, board thickness, aspect ratio, via in pad, slot width, board size), assembly spacing by package class pair ("0402|0603": 0.2, "BGA|*": 0.5, "*|*": 0.25), an edge keep-out, the gap between a tall part and a short one, single-sided assembly, and test access (probe pad, pitch, side, minimum access %).

Bundled profiles: JLCPCB 2, 4 and 6-layer, PCBWay standard, OSH Park 2-layer, Eurocircuits standard pool and Aisler 2-layer. Their values are typical figures from each fab’s published capability page and every limit says “typical, verify”: check the current page before you order. Your own profiles are *.dfm.json files in the project folder (or any .json in its dfm/ folder), or profiles imported into the .kicad_pro (softforge.dfm.profiles). The project’s active profile is softforge.dfm.active; without one the bundled profile matching the board’s copper layer count is used.

The DFM tab (right side of the board editor) picks the fabricator, lists each limit with this board’s result (✓, or the number of findings in warning or error colour) and has Run DFM, Import profile (a JSON file, made the active profile) and Save as pack, which writes the profile’s hard limits as the Constraint Manager’s DFM: … rules into the .kicad_dru, so KiCad’s own DRC (and kicad-cli) enforces them too. After a first run the check re-runs on every edit. Findings appear in the Checks tab under a DFM group titled with the profile (rows grouped DFM / DFA / DFF; a click selects the items and centres the marker), as markers on the board and in the Problems panel. Board Setup ▸ Constraints ▸ Manufacturing (DFM) has the same profile picker with Use profile limits (fills the pack from the profile) and Run DFM.

Via in pad is a policy per profile ("viaInPad": "allowed" | "warn" | "forbidden" at the top of the profile): forbidden gives a dfm_via_in_pad error, warn a warning (filled and capped vias cost extra), allowed no finding. Bundled: forbidden for JLCPCB 2-layer, OSH Park and Aisler, warn for JLCPCB 4-layer, PCBWay and Eurocircuits, allowed for JLCPCB 6-layer. The DFM tab’s Via in pad row has a selector that overrides the policy for this project (softforge.dfm.viaInPad in the .kicad_pro), the same as edsnx dfm via-in-pad set warn --profile jlcpcb-2 (default removes the override). schemas/dfm-profile.schema.json validates *.dfm.json files in the editor.

The assembly checks measure the real part shapes: the courtyard polygon (any shape, turned with the part), else the convex hull of the part’s Fab graphics, else of its pads. Spacing (dfa_spacing, dfa_tall_near_short) is the gap between those shapes, so a part may sit in the notch of an L-shaped courtyard, and the edge keep-out uses the same shapes.

Rule ids: dfm_track_width, dfm_clearance, dfm_drill, dfm_annular_ring, dfm_via_diameter, dfm_mask_sliver, dfm_mask_expansion, dfm_silk_width, dfm_silk_to_pad, dfm_copper_to_edge, dfm_hole_to_hole, dfm_hole_to_copper, dfm_aspect_ratio, dfm_via_in_pad, dfm_slot_width, dfm_board_thickness, dfm_board_size, dfa_spacing, dfa_edge_keepout, dfa_tall_near_short, dfa_same_side, dff_test_access, dff_test_pitch. Hard fab limits are errors, the rest warnings; rule_severities in the .kicad_pro changes them like any DRC rule.

Silkscreen width (dfm_silk_width, a warning) is reported once per library footprint, not per line: KiCad’s libraries draw silk at 0.12 mm and texts at 0.15 mm, below the 0.153 mm (6 mil) most fabs publish, so the sample gives “Silkscreen line width of 8 lines in Capacitor_SMD:C_0805_2012Metric (C1, C2, C3, C4)” and one such line per package instead of a warning for every line. Board-level silk graphics are still reported one by one. Fabs usually print thinner silk anyway, only less crisply: raise the library’s width or accept the warning.

sh
edsnx dfm run --profile jlcpcb-4             # the sample: 0 errors, silk warnings
edsnx dfm profiles list
edsnx dfm profiles import --file myfab.dfm.json --activate
edsnx dfm profiles export jlcpcb-4 --out myfab.dfm.json
edsnx dfm profiles activate oshpark-2
edsnx dfm save-pack --profile jlcpcb-2

Documentation for Electronics Designer 2.3.60.