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.
$ 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]
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.
- 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.
- RUNG 2
Reference
KiCad already ships the footprint or a generic symbol? KiDex points at the official library and never copies it.
- RUNG 3
Pull
Has an LCSC code? Symbol, footprint and 3D model come from EasyEDA, cleaned to the standard field set.
- 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.
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.
- 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
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.
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.
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
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.
| REF | COMMAND | FUNCTION |
|---|---|---|
| C1 | add <MPN|C-code> | Full acquisition ladder with a review gate |
| C2 | search --online <term> | Catalog search, or MPN / C-code / free text across the distributors |
| C3 | bom <project> --prices | Project BOM against the catalog: feeders, JLCPCB class, equivalents, obsolete warnings, prices side by side |
| C4 | fab make <project> | JLCPCB package: gerbers, BOM, CPL with learned rotations, preflight |
| C5 | enrich --stale 90d | Re-check lifecycle, stock and price for parts not confirmed recently; obsolete alarms |
| C6 | equiv find <MPN> | Tiered equivalents with evidence and what changes — read-only |
| C7 | pnp scan / set | Pick-and-place feeder slots, harvested from your schematics |
| C8 | ingest / resume / watch | Vendor-zip pipeline for parked parts |
| C9 | dedup / normalize | Merge duplicate footprints (pinout-aware) and re-apply the field policy — dry run first |
| C10 | migrate scan / apply | One-way migration of a legacy library, dry run first |
| C11 | doctor | Health checks: official refs, file ↔ database consistency, ODBC, dbl |
| C12 | db rebuild | Disaster recovery from the git-tracked catalog.csv / catalog.json |
Unless otherwise specified.
- Never import pcbnew. Library files are edited directly; live KiCad is reached only through the IPC API. Everything works with KiCad closed.
- MPN is the key. An empty value means “not known yet”, never an empty string.
- Suggest, never auto-apply. Every API or LLM inference passes a human gate.
- Nothing is lost. Every write is atomic with a kept backup, and catalog.csv / .json rebuild the database byte-identically.
- Vendor zips are untrusted. Filenames are data, extraction is zip-slip guarded, nothing inside is executed.
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