Pick-and-place file fixer
Turn KiCad's position file (or the .kicad_pcb itself) and BOM into the placement file JLCPCB, PCBWay or Seeed want — the right columns, mm or inches, top/bottom naming, origin, bottom-side mirroring, an editable table of per-footprint rotation offsets, DNP left out — with a drawing of every part and its pin 1, and a JLCPCB BOM with LCSC numbers from a field or your Parts inventory.
Added
Works with
- Electronics parts inventory and BOM manager Electronicsfills missing LCSC part numbers in the JLCPCB BOM from the parts kept there
How to use it
Assembly services all want the same thing — where each part goes, which way round, on which side — and each wants it slightly differently. KiCad’s position file is nearly right, and the remaining part is where most of the "U3 is rotated 90°" emails from the assembler come from. This page does the conversion and shows you each part where it will be placed, with its pin 1, so you can check before you upload. Everything runs in your browser.
How to use it
-
Open your files, or drop them on the page. Any mix of:
-
the board (
.kicad_pcb, KiCad 6–9) — the best input. Positions come from the footprints themselves, with their real pads for the drawing, the do-not-populate and "exclude from position files" flags, the aux and grid origins, the board outline, and fields such asLCSCthat KiCad copies from the symbols; -
KiCad’s position file — File → Fabrication Outputs → Component Placement or
kicad-cli pcb export pos, in ASCII (.pos) or CSV, one side or both, mm or inches. KiCad’s CSV does not say its units; it is read as millimetres. If you ticked "Use negative X coordinates for footprints on bottom layer", that is noticed and undone. Other tools' CSVs with headers like Designator, Mid X, Mid Y, Layer, Rotation (values may carrymmormil) open too; -
a BOM CSV —
kicad-cli sch export bom, the legacybom_csv_grouped_by_valueplugin, KiBot, or a spreadsheet with references, value and footprint columns. Its DNP column takes those parts out of the placement file as well. Without one, the BOM is built from the board or position file.The sample board (a KiCad 9 board with parts on both sides, a DNP resistor and LCSC fields) opens first.
-
-
Output for: JLCPCB, PCBWay, Seeed Fusion or a generic layout. Choosing one sets its usual rules, which you can then change:
Service Columns Sides Notes JLCPCB
Designator, Mid X, Mid Y, Layer, RotationTop / Bottom
millimetres; the rotation offsets table on; bottom-side rotation as 180° − r
PCBWay
Designator, Footprint, Mid X, Mid Y, Layer, Rotation, CommentTop / Bottom
KiCad’s rotations as they are
Seeed Fusion
Designator, Footprint, Mid X, Mid Y, Ref X, Ref Y, Pad X, Pad Y, Layer, Rotation, CommentT / B
values with "mm"; Pad X/Y is pad 1 when the board is loaded
Generic
your own list (default KiCad’s
Ref, Val, Package, PosX, PosY, Rot, Side)your own words
mm, inches or mil
JLCPCB documents its layout on its KiCad help page. PCBWay and Seeed list the fields they need (designator, X, Y, side, rotation) rather than exact headers; the Altium-style names above are what their engineers see most and they accept them — they will also take KiCad’s own file and fix it themselves, at the cost of a question or two.
-
Origin: the drill/place (aux) origin, the grid origin or the board’s lower-left corner (all three need the board), as in the file, or the lower-left of the parts, plus an offset. Most services don’t mind where (0, 0) is as long as the placement and the Gerbers agree; a lower-left origin makes the numbers easy to check by eye.
-
Bottom side: how the rotation is turned (180° − r, the way JLCPCB reads bottom parts; as KiCad wrote it; or −r), whether a rotation offset is added or subtracted on the bottom, and whether X stays in top-view board coordinates, is negated, or is mirrored across the board width.
-
Rotation offsets: a footprint’s zero orientation in KiCad and the same part’s orientation in the assembler’s library (and on its tape) often differ by 90° or 180°. The Rotation offsets tab holds a table of footprint-name patterns (regular expressions, first match wins) and the offset to add, with an optional X/Y shift in the part’s own frame. It starts with offsets for JLCPCB’s library gathered by the community — from Matthew Lai’s JLCKicadTools (
cpl_rotations_db.csv) and Bouni’s kicad-jlcpcb-tools — re-entered here with notes, not copied files. Edit it, test a footprint name against it, reset it, and export or import it as CSV in JLCKicadTools' layout (so their files load here). It is kept in this browser. -
Placement lists every part with KiCad’s rotation, the offset that matched, a box for an extra rotation by hand (for the part the assembler’s preview shows turned), and the X, Y and rotation that go in the file. DNP parts (KiCad’s flag, a BOM’s DNP column, or a value such as
DNP) are left out unless you keep them; you can leave out others by designator. -
Preview draws the board seen from the top (or from below): each part’s pads — or, from a position file, an outline worked out from the footprint name (
SOIC-8_3.9x4.9mm,R_0603_1608Metric,SOT-23…) — with a red dot on pin 1 as your design has it, and the rotation that goes in the file. Parts turned by the table are tinted, parts turned by hand are orange, bottom parts dashed. Check it against the assembler’s own preview after upload: if their pin-1 mark and this one disagree, put the difference in the by-hand box (or fix the table for that footprint). -
BOM: LCSC part numbers come from a field named
LCSC,LCSC Part #,JLCPCB Part #and the like. With Fill missing LCSC numbers from my Parts inventory ticked, lines without one are matched against the Parts inventory in this browser — by MPN, or for passives by value and package, the way it matches BOMs — and the part’s LCSC supplier number is used (read-only; the inventory is not changed). The page lists the designators that are in the BOM but not placed, placed but not in the BOM, and fitted without an LCSC number. -
Download the placement file and the JLCPCB BOM (
Comment, Designator, Footprint, JLCPCB Part #, fitted parts only).
Share links carry the output format, origin, units and bottom-side settings — never your files, the BOM or your edited rotation table. Open with the sample board.
Related: KiCad BOM rollup (quantities for N boards, stock and Digi-Key prices), Gerber viewer and DFM check (check the Gerbers you upload with this file), KiCad footprint and symbol checker (footprints whose origin is off-centre or lack the SMD attribute are the usual cause of misplaced or missing parts here), reflow profile, SMD packages and footprints.
Limits
-
Rotation offsets depend on the assembler’s library part, which can change; the table is a starting point and the assembler’s preview is final. Community lists disagree on a few (SOT-23 is listed as 270° by JLCKicadTools today and as 180° in older lists; QFN sizes other than 16–40 pins are not in it).
-
For 90° and 270° offsets on bottom-side parts, adding and subtracting give different answers; the default follows kicad-jlcpcb-tools and KiBot (added). Check bottom-side ICs in the preview.
-
Outlines from footprint names are approximate boxes; with the board loaded the real pads are drawn.
-
The board reader takes positions, pads, fields, origins and the Edge.Cuts outline; it does not draw tracks or zones.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.