pedalfx

Why are my parts rotated wrong at JLCPCB? (and why nobody can fully fix it)

This came up twice recently on r/AskElectronics — once as “what defines 0° orientation?” and once as “why do two TVS diodes from the same series show different pin 1?” — and my long answer to the second one got eaten by AutoModerator for containing a link to a banned domain. So here’s the durable version. Living copy with deeper links lives at z2amiller.github.io/pedalfx/docs/jlc-rotations.html.

Disclaimer: I’m a hobbyist who went unreasonably far down this rabbit hole, not a JLC employee. Trust but verify.

TL;DR

The problem in one paragraph

A pick-and-place file has X, Y, rotation, side. That’s it — no pad geometry, no pin numbers, no polarity. “Rotation 90” only means something if both parties agree what the part looks like at rotation 0. Your KiCad footprint has an origin and a pin-1 location that some library contributor chose. JLC’s machine has the part on a reel, in whatever orientation the manufacturer taped it. The correction between the two is a property of the pair (this footprint, this reel), and there is no channel in the CPL to communicate it. So every tool that “fixes” rotations — including JLC’s own preview and the community regex tables — is really encoding a guess about both sides.

Two standards that don’t meet in the middle

There are standards; the problem is they cover different halves.

On the EDA side, IPC-7351 defines a “zero orientation” for footprints — pin 1 upper-left, pins counted counter-clockwise — and IEC 61188-7 defines its own, which doesn’t fully agree with IPC’s, because of course it doesn’t. KiCad’s library conventions mostly follow IPC. Mostly. Footprints from Ultra Librarian, SnapEDA, or the manufacturer follow whatever they follow.

On the reel side, EIA-481 says how parts sit in tape: rectangular bodies long-axis-perpendicular to the feed if they fit the tape width, parallel if they don’t; pin 1 / A1 in a defined quadrant. Because tape comes in 8/12/16/24 mm, this creates discrete thresholds — which is why the “empirical” corrections cluster in families: SOICs and TSSOPs are always ~90° off, small chip parts are 0°, polarized caps flip from 0° to 180° right around the 8→12 mm tape boundary. And EIA-481 explicitly notes SOT-23 has no distinguishable pin-1 mark, so it’s a per-manufacturer free-for-all. (Ask anyone who’s had a SOT-23 come back 90° off. Or three tables on my disk that say SOT-23 needs -90, 180, and 180-but-different-for-that-reel.)

Even if both standards were followed perfectly, you’d still need to know which conventions your specific footprint and your specific reel follow. Nothing in your CPL says.

One company, one pile of metadata

LCSC (the parts distributor), JLCPCB (the fab), and EasyEDA (the EDA tool) are the same company. Most in-stock LCSC parts — not all; roughly a third have nothing, see the numbers below — have an EasyEDA symbol, footprint and (usually) 3D model, made by the same library team. The EasyEDA Footprint Naming Rule Reference — an 84-page PDF jointly written by LCSC’s engineering department and the EasyEDA team — describes how those footprints are named, and the names encode orientation.

I can’t prove it, but I’m about as sure as I can be that the DFM preview you see after uploading is rendering the EasyEDA footprint/3D model for each LCSC number, and that the pin-1 dot it shows you is EasyEDA’s pin 1. Why would they build a second library? Everything I’ve checked lines up with this, including the TVS-diode mystery below.

Reading the naming rule and the API yourself

You don’t need any tool for this. Take an LCSC number and open:

https://easyeda.com/api/products/C5453/components

Pretty-print the JSON (Firefox does it natively; Chrome with any JSON viewer). Look at:

The LCSC part-detail page (search the part number on their site) renders that same symbol and footprint as SVGs, so the easiest way to “read the graphics” is to just look at it there.

Two caveats. First, only standardized package families carry the orientation tokens; connectors, relays, modules and the like tend to use the MPN as the “suffix” and tell you nothing. Second, JLC’s line uses this data; you still have to know where pin 1 is on your footprint to compute the correction. There’s no escaping that.

Worked example: two TVS diodes, same series, different pin 1

From the second Reddit thread. Two Vishay SMF-package TVS diodes, D1 = VTVS17ASMF (C1978115) and D2 = VTVS12ASMF (C1856655), both placed at -90° in KiCad, both with pin 1 = anode on the KiCad footprint. JLC’s preview marked pin 1 on the cathode of D1 and the anode of D2. Same manufacturer, same series, same datasheet, which says pin 1 is the anode. What?

Pull the API for both:

LCSC MPN EasyEDA footprint pin 1 is
C1978115 VTVS17ASMF-M3-08 SMF_L2.8-W1.8-LS3.7-RD K
C1856655 VTVS12ASMF-M3-08 SMF_L2.8-W1.8-LS3.7-FD-1 A

(For the 12V part the symbol has literal A/K pin labels; for the 17V part it doesn’t, and you have to see that the diode symbol points at pin 1 — the SVG-graphics problem from the previous section.) Different EasyEDA library entries. The 17V one is drawn as “reverse direction” with pin 1 = cathode; the 12V one is “forward direction” with pin 1 = anode. Both are electrically self-consistent — RD + K-is-pin-1 places the cathode on the same physical side as FD + A-is-pin-1. So after your -90° both diodes come out with the anode where you wanted it, and the board works. But the pink pin-1 dot lands on opposite ends, because that dot is EasyEDA’s/tape’s pin 1, not yours.

This is what I mean by “correct on accident.” The board is right, but only because two errors cancelled: the library’s pin numbering is flipped and its footprint direction is flipped. If you had “fixed” your KiCad footprint to match the preview’s pin-1 dot, you’d have built a backwards board. And for extra fun: C1981006 is the same VTVS12ASMF on a different reel size (-M-18 vs -M-08), and it’s in the library as -RD with pin 1 = K. Same physical part, opposite metadata.

There’s a general lesson here for KiCad users specifically: KiCad’s diode and LED footprints put pin 1 on the cathode; EasyEDA’s -FD is defined with the anode on the left. So for diodes, “forward direction” tends to mean 180° relative to KiCad, while for polarized caps (both conventions put + on pin 1) it means 0°. When you see a diode that “needs 180°,” ask whether it’s a rotation difference or a pin-numbering difference. They look identical in the preview and are not identical when you change footprints.

Some numbers (from a crawl of the in-stock catalog, mid-2026)

Practical advice

  1. Use the preview. JLC’s placement/DFM viewer is the ground truth for what their line will do. Rotate there (space bar = 90° CCW). Their part rendering can be wrong about your intent but it’s right about their machine.
  2. Fix it at the source once you know. In KiCad, the Bouni kicad-jlcpcb-tools plugin has a Corrections manager (regex on footprint name → rotation/offset), seeded from a community table that goes back to matthewlai’s JLCKicadTools. It’s empirical and imperfect — see SOT-23 above — but once you’ve corrected a package it stays corrected.
  3. Silkscreen pin 1 and polarity, always. JLC’s engineers do look, and good silkscreen is what lets them catch a backwards diode.
  4. Tick “Confirm parts placement / production file.” Cheap insurance, especially if you have any checkerboard parts or any two-pin polarized part you’re not sure about.
  5. When in doubt, read the API. Thirty seconds per part, and it’s the same data JLC’s tooling is using.
  6. Be suspicious of diodes and tantalums specifically. A backwards LED is dark; a backwards tantalum is a small fire.
  7. Don’t “fix” a footprint’s pin numbering because the preview dot disagrees with you until you’ve worked out whether it’s Scenario A (real rotation difference) or Scenario B (pin-numbering difference that happens to cancel).

Further reading