KIDEX 0.1component library manager for KiCad

Type an MPN.
Get a usable part.

One curated KiCad library with a SQLite catalog behind it. Every part arrives with its MPN, distributor numbers, JLCPCB assembly class, feeder slot and equivalents — and nothing is written until you have seen it.

GPL-3.0Python 3.11+KiCad 9 IPC API200+ tests, no network
zsh — kidexacquisition ladder
$ kidex add AP63205WU-7
identity   DigiKey    Diodes Incorporated · AP63205WU-7
cross-ref  LCSC       C-code · JLCPCB extended
rung 1     catalog    nothing to reuse
rung 2     official   TSOT-23-6 — referenced, not copied
rung 3     EasyEDA    symbol ✓  3D model ✓  fields cleaned
──────────────────────────────────────────
? Write to the catalog?  [y/N] 
01THE ACQUISITION LADDERZONE B

It climbs until it finds CAD you can trust.

DigiKey resolves who made the part and what it is really called. LCSC and JLCPCB cross-reference the C-code. Then KiDex walks four rungs, stopping at the first one that works.

  1. RUNG 1

    Reuse

    A matching footprint is already in the catalog? Fingerprinting finds it, and the new part reuses it instead of adding a duplicate.

  2. RUNG 2

    Reference

    KiCad already ships the footprint or a generic symbol? KiDex points at the official library and never copies it.

  3. RUNG 3

    Pull

    Has an LCSC code? Symbol, footprint and 3D model come from EasyEDA, cleaned to the standard field set.

  4. RUNG 4

    Park & watch

    No CAD anywhere? The part waits in Pending while KiDex watches your downloads for the Samacsys, UltraLibrarian or SnapEDA zip.

Re-running an add is always safe: ingest is idempotent, and vendor zips are treated as untrusted input — zip-slip guarded, nothing inside is ever executed.

02ONE LIBRARY, ONE CATALOGZONE C

Every part carries the same eight fields.

KiDex.kicad_sym, KiDex.pretty and one shared 3D directory — plus a SQLite catalog that KiCad browses as a database library. Vendor junk fields are recorded, then removed. 3D paths always go through ${KIDEX_3D}, never an absolute path.

Blanks get filled from the distributors with enrich --missing, which never overwrites what you set.

  • DigiKey · identity
  • LCSC · C-code, stock
  • JLCPCB · basic / extended
  • Mouser · price
  • EasyEDA · CAD

Every API key is optional. A missing key just switches that source off.

Symbol fields — U3KiDex:RP2040
Value
RP2040
Footprint
KiDex:QFN-56-1EP_7x7mm_P0.4mm
Datasheet
datasheets.raspberrypi.com/rp2040/…
MPN
RP2040
Manufacturer
Raspberry Pi
DigiKey_PN
— filled by enrich --missing
LCSC_PN
C2040
Description
Dual-core Cortex-M0+ MCU, 264 kB SRAM, QFN-56
JLCPCBextended
feederslot 14
equivalentsgroup MCU-RP
03AGENT MODEZONE D–E

Hand it to an agent.
It still has to ask you.

Every command also runs as kidex --json. kidex install-skill teaches Claude Code the protocol, and the review gate survives as a question an agent has to bring back to you.

one envelope

One JSON object on stdout per command: status, data, messages, and the question if there is one.

exit 3 = a question

A write always stops before touching anything. Piping yes into stdin does nothing; only an explicit --answer goes through.

no stale approvals

If the footprint match or stock changes before the rerun, the question id changes and the old yes no longer applies.

claude~/hw/sensor-psu
kidex skill
Replayed session, illustrative. The commands, the JSON protocol and the stop-before-write gate are KiDex’s real behaviour; part data is abbreviated.
04EQUIVALENTS BY TIERZONE F

Out of stock? You’ll know what a swap really costs.

equiv find checks real JLCPCB, DigiKey and Mouser candidates by rule first. An LLM only looks at the uncertain rest — and it works with no LLM key at all.

  • [drop-in]

    Fits the same footprint and circuit as it is.

  • [caveat]

    Fits, with the differences spelled out in changes.

  • [redesign]

    Does the same job but needs a footprint or circuit change. Said plainly, every time.

  • [unverified]

    Could not be checked. Never offered as a replacement.

05TO THE FABZONE F–G

Three files, checked before you upload.

fab make builds the JLCPCB order package and runs a preflight: DRC, missing C-codes, live stock and extended-part fees.

Teach a pick-and-place rotation once with fab rot; every future CPL applies it.

$ kidex fab make sensor-psu --boards 20
✓ gerbers.zip (9 files)
✓ bom_jlcpcb.csv (5 lines)
✓ cpl_jlcpcb.csv (7 placements, rotations learned)

Preflight:
  DRC: clean
  ⚠ 2 extended parts — setup fee applies

Package: fab/sensor-psu/ — upload these three files
06THE WINDOWZONE G–H

Prefer clicking? Open it from the PCB editor.

kidex install-plugin adds an Open KiDex button to KiCad. The window is a thin shell: every button calls the same core function as the CLI.

KiDex Equiv tab listing equivalents for 1N4001 by tier
FIG. 1Equiv — 39 candidates for 1N4001, sorted by tier. Every row says what would change: leakage current, a new footprint, through-hole to SMA.
KiDex Catalog tab
FIG. 2Catalog — 64 parts, every field searchable.
KiDex Board tab with audit findings
FIG. 3Board — audits the open PCB over the IPC API: parts without a feeder, footprints without an MPN.
KiDex Doctor tab, all checks healthy
FIG. 4Doctor — official references, ODBC driver, backups, API keys.
07BILL OF COMMANDSZONE H
REFCOMMANDFUNCTION
C1add <MPN|C-code>Full acquisition ladder with a review gate
C2search --online <term>Catalog search, or MPN / C-code / free text across the distributors
C3bom <project> --pricesProject BOM against the catalog: feeders, JLCPCB class, equivalents, obsolete warnings, prices side by side
C4fab make <project>JLCPCB package: gerbers, BOM, CPL with learned rotations, preflight
C5enrich --stale 90dRe-check lifecycle, stock and price for parts not confirmed recently; obsolete alarms
C6equiv find <MPN>Tiered equivalents with evidence and what changes — read-only
C7pnp scan / setPick-and-place feeder slots, harvested from your schematics
C8ingest / resume / watchVendor-zip pipeline for parked parts
C9dedup / normalizeMerge duplicate footprints (pinout-aware) and re-apply the field policy — dry run first
C10migrate scan / applyOne-way migration of a legacy library, dry run first
C11doctorHealth checks: official refs, file ↔ database consistency, ODBC, dbl
C12db rebuildDisaster recovery from the git-tracked catalog.csv / catalog.json
08NOTES

Unless otherwise specified.

  1. Never import pcbnew. Library files are edited directly; live KiCad is reached only through the IPC API. Everything works with KiCad closed.
  2. MPN is the key. An empty value means “not known yet”, never an empty string.
  3. Suggest, never auto-apply. Every API or LLM inference passes a human gate.
  4. Nothing is lost. Every write is atomic with a kept backup, and catalog.csv / .json rebuild the database byte-identically.
  5. Vendor zips are untrusted. Filenames are data, extraction is zip-slip guarded, nothing inside is executed.
09INSTALL

Five minutes to your first part.

You need Python 3.11+, uv and KiCad 9. kidex dbl prints the exact KiCad registration steps and tells you how to get the SQLite ODBC driver if it is missing.

# inside the kidex source folder
$ uv sync --extra gui
$ uv tool install --editable ".[gui]"
$ source kidex-env.sh      # your API keys
$ kidex dbl                # register with KiCad
$ kidex install-plugin     # Open KiDex button
$ kidex install-skill      # optional: Claude Code
KiDex

Koray Toksöz · koray@toksoz.net

TITLEKiDex — component library manager for KiCad
REV0.1.0
LICENSEGPL-3.0-or-later
SHEET1 / 1
DATE2026-09-25
DRAWN BYKoray Toksöz