component-search
Component Search
Find and add components and reusable subcircuits to a Zener project. Use this workflow any time you need a part or subcircuit that isn't already in the workspace or covered by stdlib generics.
Hard Stop Before Manual Creation
If pcb search and pcb new component don't produce a usable part, don't fall back to manual component/symbol/footprint creation. Report what failed, offer manual creation as an option, and get explicit user confirmation. In interactive mode, prefer ask.
Search Priority
Always search in this order. Move down only when the higher tier doesn't have what fits.
pcb search -m registry:modules <query> -f json— Reusable subcircuits and composed modules. Best option when the design work is already done.pcb search -m registry:components <query> -f json— Component packages in the registry. These may range from generated signatures to richer packages with integrated application circuitry.pcb search -m web:components <MPN> -f json— Diode's web component database (CSE, LCSC sources). Fallback: returns acomponent_idthat must be imported withpcb new component.
If the user asks for a specific MPN, still try registry first before falling back to web.
Search Tips
- Registry search is richly indexed — it supports MPN search, manufacturer name search, semantic/functional queries, and lexical keyword matching. Use descriptive queries freely:
"buck converter 3.3V","Texas Instruments LDO","USB-C connector". - Web components search is strict MPN-only. Only use exact or partial manufacturer part numbers:
"TPS54331","STM32F103C8T6". Do NOT include descriptions, keywords, or functional terms in the query — they will cause the search to fail or return irrelevant results. Strip everything except the MPN. - All commands output JSON with
-f json. Parse results programmatically to evaluate options. - Registry results include
dependencies(what they use) anddependents(who uses them) for context. - Web results include
model_availabilityshowing whether ECAD and STEP models are available. The same MPN may appear from multiple sources (DigiKey, CSE, LCSC) with different model availability; check all returned results before concluding models are unavailable. - Try multiple queries. Parts go by different names — full MPN, base family, orderable variant, manufacturer alias. If the first search doesn't find what you need, try alternative names before giving up.
- Use
pcb doc --package <url>@<version>to inspect a registry module's io/config interface before using it.
Choosing Between Results
Pick when there's a clear winner. Present tradeoffs and ask only when genuinely ambiguous.
Selection heuristics in priority order:
- Functional fit — does it meet the electrical requirements?
- ECAD + STEP availability — strongly prefer results with both models available.
- Package — prefer leadless packages (QFN, DFN, LGA, WLCSP) over leaded alternatives (SOIC, TSSOP, QFP) when multiple package options exist.
- Sourcing — prefer in-stock parts. Check
availabilityfields for stock counts and pricing. - Source quality — for web:components, prefer CSE source over LCSC.
- Registry adoption — more
dependentsin registry results means more battle-tested.
Using Registry Results
Registry modules and component packages (Flows 1 and 2) are used directly via Module() with the registry URL. Auto-dep handles pcb.toml updates automatically — just use the URL and build.
# Component package with integrated application circuitry
LDO = Module("github.com/diodeinc/registry/components/AP2112Kx/AP2112Kx.zen")
LDO(
name="LDO_3V3",
VIN=vbus_5v0,
VOUT=vdd_3v3,
GND=gnd,
)
# Component package from registry:components search
TPS54331 = Module("github.com/diodeinc/registry/components/TPS54331D/TPS54331D.zen")
Use pcb doc --package <url>@<version> to check available io/config before wiring into a design.
Importing Web Components
Web component results (Flow 3) require an import step before use.
- Search:
pcb search -m web:components <MPN> -f json - Pick a result and extract its
component_id,part_number, andmanufacturer. - Import:
pcb new component --component-id <ID> --part-number <MPN> --manufacturer <MFR>
This downloads the symbol, footprint, and STEP model and generates a package into components/<manufacturer>/<mpn>/. Datasheet artifacts are placed under docs/ in the component directory. The .kicad_sym file is the source of truth for the primitive component interface; the generated .zen file starts as an auto-generated signature and may later grow into a richer reusable design in the same package. If the component already exists in the workspace, it skips and reports the existing path.
- Use the imported component via
Module()with the local workspace path:
ESP32 = Module("./components/Espressif_Systems/ESP32-S3-WROOM-1-N16R8/ESP32-S3-WROOM-1-N16R8.zen")
Command Reference
Search
# Reusable modules (fast, local index)
pcb search -m registry:modules <query> -f json
# Component packages (fast, local index)
pcb search -m registry:components <query> -f json
# Web component database (network, slower, MPN-ONLY queries)
pcb search -m web:components <MPN> -f json
Import
# Import a web component into the workspace
pcb new component --component-id <ID> [--part-number <MPN>] [--manufacturer <MFR>]
Inspect
# Read a registry package's io/config interface
pcb doc --package <url>@<version>
Verifying Sourcing with pcb bom
After adding components to a design, use pcb bom to check sourcing and availability:
pcb bom boards/MyBoard/MyBoard.zen -f json
The JSON output is a list of BOM entries, each with:
designator,mpn,manufacturer,package,value,descriptionavailability— per-entry sourcing data:us/global— regional summary withprice,stock,alt_stockoffers— individual distributor offers withregion,distributor,stock,price
Fixing BOM issues
- "No house cap/resistor found" warnings during build mean no pre-qualified generic part matches the spec. Adjust the value, package, or voltage rating, or specify an explicit
part=Part(mpn=..., manufacturer=...)where appropriate. - Low stock or no offers — search for alternative parts using the component search flows above, then update the design.
- Checking availability — look at
stockcounts across regions. Parts with zero stock and onlyalt_stockmay have long lead times.
More from diodeinc/pcb
datasheet-reader
Read datasheets and technical PDF documents with `pcb scan`. Use when the user gives a local PDF path or an `http(s)` datasheet/document URL, when a task requires reading, summarizing, extracting information from, or answering questions about a datasheet or technical PDF, or when a KiCad symbol / `.kicad_sym` provides a `Datasheet` property to resolve. Run `pcb scan <input>` in bash, treat stdout as the generated `.md` path, then read that markdown file.
813reference-design
Grow a component package into a high-quality, sourceable reusable design in Zener. Use when translating a datasheet, application note, or eval design into circuitry that should live with the component package itself — including checking for existing reusable packages first, extracting evidence, choosing sourceable passives, documenting the design in the `.zen` docstring, and validating with `pcb build`.
799zener-language
Canonical Zener HDL guidance — language semantics, package rules, manifests, stdlib APIs, and authoring idioms. Use when writing, editing, refactoring, or reviewing non-trivial `.zen` code, especially work involving `Module()`, `io()`, `config()`, imports, `pcb.toml`, stdlib interfaces, units, generics, DNP patterns, or validation.
784idiomatic-zener
Style rules and idioms for writing high-quality Zener HDL code. Use when writing, reviewing, or refactoring `.zen` files — modules, reference designs, or board files. Covers DNP patterns, typed configs, voltage checks, component naming, computation style, and common gotchas.
724spice-sim
Adds an ngspice-backed simulation testbench to a Zener `.zen` design. Use when the user asks to simulate a circuit, validate behavior in SPICE, or wire a `spice_model=SpiceModel(...)` into a leaf component. Covers `pcb sim`, `Simulation` property, and ngspice `.control` blocks with `tran`/`PULSE`/`PWL` sources and SVG `hardcopy` output.
292git-hunk
Non-interactive hunk and line-range staging with the `git-hunk` CLI. Use when a user wants atomic commits, selective staging, partial hunk staging, or an agent-safe replacement for `git add -p` or `git commit -p`, especially when `git-hunk` is available in the current repo or on `PATH`.
106