* Draw dashed strokes, text boxes and knockout text in STEP silkscreen (ENG-1789) * Draw a dashed circle shorter than one dash as a ring
87 KiB
Changelog
Unreleased
Added
- Add
--mouse-bitetoboard-array createto route boards out with perforated tabs instead of V-scores. - Add
--mouse-bite-placementtoboard-array createto report where breakaway tabs would go on a board. - Add
pcb step exportto write a STEP assembly for a KiCad board without kicad-cli. - Draw text boxes, knockout text and dashed strokes on STEP silkscreen and solder mask.
Changed
- Prefer
Board(path=...), retaininglayout_pathas a compatibility alias and rejecting empty paths. New board templates enable persistent schematics while keepinglayout_pathfor older compilers. - Speed up schematic connectivity analysis and repair planning with indexed terminal matching and verified batches of local wire cuts.
- Speed up region construction and unions on layers made of many small, locally overlapping features such as silkscreen and solder mask.
Fixed
- Preserve KiCad embedded symbol cache aliases during schematic apply without dangling references or collapsing distinct definitions.
- Avoid redundant explicit net names in imported boards and sheet modules while preserving names that differ from their assigned identifiers.
- Compose IPC-2581 shapes independently with local cutouts and ordered voids, preventing artificial slits and false DFM width violations.
- Wire rotated and mirrored schematic symbol pins at KiCad's physical pin anchors.
- Report and repair missing Zener
NotConnected()intent as native KiCad no-connect markers. - Preserve successful BOM matches when another line needs retrying.
- Fix false missing-output errors after applying schematics.
- Accept one KiCad no-connect marker for stacked intentional-open pins, including hidden pins, while preserving physical pad identities and rejecting connected or cross-page collisions.
Removed
- Remove the unused
pcb-elasticandpcb-mechanicscrates andpcb-iranalysis meshing left over from the mouse-bite exploration.
0.4.52 - 2026-09-09
Added
- Add
pcb publish --checkto run release preflight without publishing. - Add mesh-based elastic support selection with finite-area connections.
- Add analysis-only
board-array create --mouse-biteoutline eligibility reports. - Support KiCad 9 schematics, saving edited pages as KiCad 10.
- Add
--accuracy-umto set the geometry accuracy for Gerber, IPC-2581, and release output. - Keep circles and ellipses exact in exports and rendering.
- Add reusable polygon-boundary, attachment clearance, cutter reachability, and break-removal connectivity queries to
pcb-ir, with explicit uncertainty and model limitations. - Add deterministic elastic support selection with explicit compliance limits, conflict constraints, exhaustive proof status, work budgets, and independent full-system response checks.
- Add standalone elastic support analysis with beam and triangular plate elements, explicit stiffness and constraints, and singular-mode diagnostics.
- Add experimental single mouse-bite tab geometry and reproducible straight/curved break coupons to
pcb-ir; physical fracture validation remains outstanding. - Add boundary-following clearance intervals with inward landing checks, preserving substrate geometry and reporting missing obstacle evidence.
Changed
- Allow schematic and BOM consumers to omit the Starlark interpreter bindings.
- Preserve sheet graphics and text annotations when updating KiCad schematics.
- Add constrained region analysis meshes with boundary provenance, validated input accuracy, refinement diagnostics, and robust element-sided barycentric attachments to
pcb-ir. - Group
pcb bomrows by selected offer. - Upgrade bundled symbols to KiCad 10 format.
- Create a starter
spec.mdwhen scaffolding a new board repository.
Fixed
- Run ngspice correctly when
pcb simis given a bare filename in the current directory. - Reconnect all affected nets when schematic repair moves symbols out of a short.
- Refresh stale schematics when workspace symbol files change.
- Fix false DFM width violations at corners.
- Mark standard-library bare test pads and plated test holes as native KiCad test points.
- Mark standard-library fiducial pads as global fiducials in KiCad layouts.
- Preserve curves that continue after a closed subpath during polygon preparation.
- Require experimental tab anchors and witnesses to be resolved interior points of the original regions.
- Reject experimental tab perforations that overlap support or lack resolved clearance from it.
- Preserve exact arc endpoints during curve preparation to avoid numerical zero-length edges in release builds.
- Report malformed SPICE
PARAMS:tokens instead of crashing. - Migrate root-level
.zenfiles in container workspaces. - Exit non-zero from
pcb rectify fixandpcb rectify auditwhen batch evaluation fails. - Escape special characters in KiCad
Pathproperties during import. - Keep simplified geometry within the accuracy limit near sharp spikes.
- Respect
in_bomon KiCadextendssymbols. - Import metric-only
0402Metric/0603Metricpassives as01005/0201packages.
0.4.51 - 2026-09-05
Added
- Expand all nine IPC-informed DFM profiles with Diode baseline checks.
- Warn about soldermask webs below 4 mil in IPC profiles.
- Warn about slot clearance and plated-slot enclosure in standard and IPC profiles.
Fixed
- Avoid supplier API requests during LSP evaluation.
- Keep deleted sheet instances restorable and child schematics loaded.
- Respect physical stackup order in slot cutouts, land links, and DFM checks.
- Preserve hole-to-land links after routing or copper clears.
- Fix IPC-2581 tools test compilation without default features.
- Remove phantom copper on cutout-only layers without hiding drill artwork.
- Fix false hole-clearance exemptions from shared source indices.
0.4.50 - 2026-09-05
Added
- Add prepared signed-distance queries for PCBIR regions and use one boundary index across DFM.
Fixed
- Support opaque service-account client IDs and proper OAuth Basic encoding.
- Allow off-page schematic placement and avoid existing text and graphics.
0.4.49 - 2026-09-04
Added
- Support service-account authentication.
Changed
- Default DFM to
standardand consolidate the bundled JLCPCB PDK.
0.4.48 - 2026-09-04
Added
- Open DFM reports with
pcb openorpcb dfm --open.
Changed
- Add
yellow-greenas a supportedLedcolor. - Remove
rgbfrom the supportedLedcolors. - Report the standard PDK's 4 mil soldermask-web threshold as a warning.
Fixed
- Refresh netlist-derived symbol assembly properties during schematic reconciliation.
0.4.47 - 2026-09-03
Changed
- Allow 0.5 mm plated slots (0.6 mm preferred).
- Speed up IPC-2581 DFM geometry checks.
Fixed
- Preserve authored component constraints in release design BOMs while keeping release netlists hydrated.
- Report a sharp copper tip narrower than the minimum width when it stands alone.
- Check netless pads as isolated copper in DFM reports.
- Ignore nested
NotConnected()interface members when creating schematic sheet ports.
0.4.46 - 2026-09-02
Changed
- Speed up IPC-2581 assembly analysis by avoiding unrelated copper composition and repeated land scans.
Fixed
- Fix IPC-2581 hole geometry and manufacturing evidence in PCBA assembly reports.
0.4.45 - 2026-09-02
Changed
- Improve generated schematic placement and repair connectivity issues with minimal verified edits instead of regenerating the affected nets.
0.4.44 - 2026-09-02
Added
- Expose drilled holes, termination associations, and explicit via-protection intent in PCBA assembly reports.
Changed
QRgeneric is now a solid silkscreen square with a 5mm, 8mm or 10mm side length
Fixed
- Fetch remote tags before
pcb publishdetermines a board version bump. - Hide Advice-level diagnostics from
pcb publishoutput while preserving warnings and errors. - Clarified that
pcb layout --checkvalidates an existing layout without modifying it; the command now fails when that layout is missing. - Reject stackups with an odd number of copper layers before generating an invalid KiCad board.
- Resolve domain-based package references with
pcb doc --package.
0.4.43 - 2026-09-01
Added
- Add canonical assembly IR and derive component placement data from it.
- Derive physical electrical terminations from exact IPC-2581 pin and padstack identities.
- Add strict profile-based DFM PDK schema v2, executable JLCPCB 1 oz profiles, and metadata-only IPC 1A-3C profiles.
- Add maximum plated-hole aspect-ratio DFM checks and make IPC 1A-3C profiles executable with opinionated partial IPC-informed baselines.
- Add circular drilled-hole-to-unrelated-copper DFM checks and extend the executable IPC 1A-3C partial baselines with opinionated IPC-informed values.
- Add drilled-feature board-edge DFM checks and extend the executable IPC 1A-3C partial baselines with opinionated IPC-informed values.
- Add a deterministic, versioned PCBA assembly report contract over canonical assembly and physical IR.
- Expose PCBA assembly reports as JSON through
pcb ipc assembly. - Preserve external part-library provenance and same-part MPN aliases in IPC-2581 BOM selections.
- Preserve IPC-2581 package geometry and exact board and panel profiles in assembly IR and reports.
Changed
- Speed up DFM width and gap checks.
- Separate DFM profile support, subject selectors, limits, and named conditional cases in PDK schema v2.
Fixed
- Keep IPC-2581
DOCUMENTBOM entries out of CPL exports. - Prevent sub-resolution boundary backtracking from producing false DFM width findings.
0.4.42 - 2026-09-01
Added
- Preserve IPC-2581 assembly BOM, package, pin, population, and supporting dictionary source facts in
pcb-irimports.
Changed
- Use a device-style PKCE flow for
pcb auth loginso headless machines can authenticate securely.
0.4.41 - 2026-08-31
Added
- Add self-contained DFM JSON reports with native geometry and PDK source.
- Add WASM APIs for IPC-2581 import, export, and DFM.
Fixed
- Isolate KiCad CLI temp directories so concurrent ODB exports do not collide.
- Reply to unknown LSP requests with JSON-RPC
MethodNotFoundinstead of leaving clients waiting. - Preserve schematic conversion diagnostics in LSP evaluation.
- Keep the language server running when LSP request or notification parameters are malformed.
- Return JSON-compatible WASM evaluation results with JavaScript numbers and
null. - Include standalone board outlines in Gerber exports.
- Inherit symbol descriptions for non-generic BOM components.
- Require external power IOs to have a net symbol or hierarchical label.
- Complete the E48 and E192 standard value tables used by
e48()ande192(). pcb build --confignow rejects unknown root configuration keys.- PCB commands now exit cleanly when an output pipe closes early.
- JSON configuration inputs preserve signed and unsigned 64-bit integers.
pcb fmtnow exits nonzero when a file fails to parse, read, or write in write, diff, and check modes.- Keep SPICE example DC measurements after later analyses by storing them in ngspice's constant plot.
0.4.40 - 2026-08-28
Fixed
- Restored the public
@stdlib/bom/helpers.zenmatch_component()helper for user-defined BOM modifiers.
0.4.39 - 2026-08-28
Changed
- Use API-only generic matching with path-independent group caching and House/Extended provenance.
- Add offline dependency resolution and BOM hydration to
pcb dfmandpcb lsp. - Refresh stale or missing BOM matches during LSP evaluation.
- Keep
pcb buildBOM hydration cache-only. - Better error handling in launcher.
- Reference designator hints now support custom uppercase component prefixes.
0.4.38 - 2026-08-27
Added
- Add
pcb dfmfor.zenboards.
Changed
- Send structured pin-header parameters to the BOM matcher.
- Hydrate schematics from cached BOM matches, with online refresh for stale or missing entries.
- Added cross-platform
diode://links that open sandbox layouts in KiCad with live sync and native recovery prompts. - Place generated schematic net symbols outside full component geometry in deterministic wired staircases, sharing one symbol only across adjacent same-net pins and reserving the routed staircase during component packing.
- The interposer mate constellation is S13: uniform 2×3 blocks with corner mate-detect loops.
- Orient newly generated missing schematic symbols from attached net-symbol pin directions.
Fixed
- Allow
pcb apply schematicto connect one logical terminal to multiple physical symbol pins.
0.4.37 - 2026-08-26
Added
- Add the
standardDFM PDK with copper layer-count checks. pcb apply schematicreconciles a linked KiCad schematic with its design, planning and applying per-issue repairs; builds of linked projects report schematic-equivalence diagnostics.
Changed
- Cache
pcb bommatches per line with stale-data fallback. - Make IPC DFM copper-clearance checks net-aware.
- Preserve selected BOM offer identities and datasheet URLs in PCB BOM results.
0.4.36 - 2026-08-25
Added
- Added
pcb ipc interposer --ipcto export the finished board as manufacturing IPC-2581 XML with its BOM. - TestPoint
ict=uses a dedicated ICT footprint whose courtyard enforces 3 mm spacing.
Changed
pcb ipc2581 edit bom --selectionspreserves canonical manufacturer IDs and selected supplier provenance.- Interposer mate lands are Ø1.5 mm, sized for the fixture bed's 2.54 mm pogo blocks.
- Interposer pogo pads use the Mill-Max 806 footprint.
0.4.35 - 2026-08-24
Added
- Added
pcb route --engine freeroutingto auto-route boards locally via FreeRouting. - Added
pcb ipc interposer --routeto auto-route the interposer with FreeRouting and stitch the GND pours with vias.
Changed
pcb previewand its preview release upload path.pcb vendorremains available but is hidden from top-level command help.- Removed deprecated v1 web-component workflows.
Added
pcb publishwarns about unknown BOM parts and parts without supplier offers.
0.4.34 - 2026-08-21
Added
pcb ipc interposergenerates the test-fixture interposer board for a board-array panel.
Fixed
- Nested DiodeHub packages continue resolving when a speculative repository prefix is inaccessible.
0.4.33 - 2026-08-21
Added
pcb ipc ictlists ICT fixture contacts (components with anIctBOM characteristic) as CSV.
Fixed
- DiodeHub dependency resolution falls back to SSH when HTTPS authentication is unavailable.
0.4.32 - 2026-08-20
Added
TestPointaccepts an optionalictfixture role that is copied onto the footprint.pcb ipc dfm checkvalidates IPC-2581 files against fabrication PDKs.
Changed
pcb bomcaches API matches for ten minutes and reuses an exact stale match offline or when an online refresh fails.pcb bomsends structured parameters for resistors, capacitors, crystals, LEDs, inductors, ferrite beads, rectifiers, Zener diodes, and TVS diodes to the API matcher.pcb bomwrites the API-selected compatible MPN and manufacturer into output.
Fixed
- LSP navigation now resolves loaded symbols in the same package scope as evaluation.
pcb layout --sync-footprintsrefreshes changed embedded 3D models even when their filenames stay the same.pcb bomagain colors planner-selected parts by green, yellow, and red sourceability tiers.- Copper balancing no longer emits sliver voids where boundary voids graze the fill boundary.
- Pads whose padstack definition is missing now render from their inline primitives.
- Drilled hole and slot diameters now honor feature placement-group scaling.
0.4.31 - 2026-08-18
Added
pcb layout --sync-footprintsreloads footprint definitions from source.- Fabrication panel generation can emit only the usable packing area with
--emit-usable-area.
Changed
- Default hole-to-hole clearance is now 0.3 mm.
Fixed
- IPC-derived Gerbers no longer apply padstack shape offsets twice to rotated pads.
- Board-array rail fiducials now distinguish top and bottom surfaces.
- BOM generation no longer panics when truncating UTF-8 component descriptions.
- Nested modules retain group ownership for copied routing and graphics during layout synchronization.
- Distinct KiCad signal names that sanitize to the same Starlark identifier are now uniquified instead of silently merging onto one net.
0.4.30 - 2026-08-14
Fixed
- Nested DiodeHub packages resolve from their owning git repository.
0.4.29 - 2026-08-12
Changed
- BOM sourcing now uses the API's deterministic offer order for five-board builds.
- Board arrays place rail fiducials and tooling holes on the other rail pair when the preferred pair does not fit.
- Auto board arrays error out when rail fiducials and tooling holes cannot fit.
0.4.28 - 2026-08-11
Changed
- Gerber exports emit simpler, more CAM-compatible copper geometry.
- Copper-balancing voids export as compact shared-aperture flashes.
0.4.27 - 2026-08-10
Changed
- KiCad Python scripts no longer inject package-specific module paths.
- Gerber exports now use a JLCPCB-compatible subset.
Fixed
- KiCad imports now preserve stackups with more than ten copper layers.
- Gerber X2 fabrication attributes now follow the specification.
0.4.26 - 2026-08-08
Fixed
- Inner copper Gerbers now use KiCad's layer numbering (
In1_Cu,In2_Cu, ...). - Exported Gerbers declare
%TF.FilePolarity,Positive. - Drill tool diameters snap to 1 µm, cleaning up float dust from EDA exports, and the tool table is sorted by diameter.
- Pads with rounded or custom shapes now export as shared Gerber aperture flashes instead of repeated regions, shrinking mask and paste layers.
- Rounded-rectangle pads export as compact parameterized macro apertures, and hexagon and octagon pads as polygon apertures.
- Gerber output no longer repeats object attributes on every object.
0.4.25 - 2026-08-07
Fixed
- Gerber manufacturing exports now expand panel instances for compatibility with CAM systems that do not support aperture blocks.
0.4.24 - 2026-08-07
Added
ipc2581 warpestimates panel bow and twist against the IPC-6012 limit, with an optional HTML report.
Changed
- Board arrays default to copper balancing; fabrication panels default to no balancing. Both can be overridden.
- Default board configurations now keep copper at least 0.4 mm from the board edge.
- The default 1 oz board netclass now uses a 0.45 mm via diameter with a 0.20 mm drill.
- Removed
pcb layout --temp; layouts are now always generated in their configured directory.
Fixed
ipc2581 rendernow draws the copper inside repeated boards on a board array or fabrication panel.
0.4.23 - 2026-08-05
Added
fab-panel createnow automatically balances copper in the gutters between placed assembly panels.
Changed
- Gerber exports for copper-balanced panels are much smaller.
Fixed
- Pad shapes with padstack offsets now land at the correct position on rotated pads across all IPC-2581 outputs.
0.4.22 - 2026-08-04
Changed
pcb docnow renders Markdown list items as styled bullets instead of literal hyphens.- Removed API authentication via AWS credentials.
Fixed
- Gerber exports now include F.Fab/B.Fab drawings and preserve patterned IPC strokes.
0.4.21 - 2026-08-04
Added
- Added AEC-Q200-qualified Vishay D/CRCW e3 parts as 0402 generic resistor matches through 10 MΩ.
Changed
pcb auth git configurenow accepts a DiodeHub repository URL and scopes Git credentials to its exact HTTPS origin.- Panasonic house resistor matches now use the current Panasonic Industry manufacturer name.
- The TDK MPZ house ferrite bead now uses the current TDK manufacturer name.
Fixed
pcb authnow uses the latest stable managed toolchain instead of a workspace's pinned toolchain.
0.4.20 - 2026-08-03
Changed
- Strict (exact MPN) BOM matching is now the default for availability queries; opt out with
[workspace.bom] strict = false.
0.4.19 - 2026-08-03
Changed
- Legacy Registry references now prefer the canonical DiodeHub identity while remaining compatible with legacy workspace identities.
- Updated the embedded Starlark runtime to the rebased starlark-rust 0.14.2 APIs.
- Updated
pcb lspto the LSP 3.18 Rust protocol stack.
Fixed
- LSP document notification errors no longer stop the language server.
- Hovering local Zener functions now shows their signatures and parameter defaults even when they have no docstring.
pcb layoutnow keeps generated KiCad board files canonically formatted after updating board settings.pcb auth gitnow uses ambient Diode API authentication in managed sandboxes.- Git dependency resolution now falls back to SSH when DiodeHub HTTPS authentication is unavailable.
0.4.18 - 2026-08-03
Changed
- PCB search and new-board defaults now use the DiodeHub Registry identity.
- Board-array balancing now certifies per-layer regions and reduces density and stack imbalance with variable voids.
- Board-array creation now prints a per-layer copper-balance summary and warns when stackup data is missing.
- Board-array balancing now keeps clear of stray panel-frame copper instead of failing.
Fixed
- Board-array creation now emits fiducials on both declared copper and solder-mask surfaces.
- Flattened IPC-2581 layer renders no longer drop stroked features such as plane-layer traces.
0.4.17 - 2026-07-31
Fixed
- IPC-2581 BOM selections now fall back to an explicit reference designator when the stable Path is unavailable.
0.4.16 - 2026-07-31
Added
- Added common fabrication panel sizes to
pcb ipc2581 fab-panel create. - Added reusable IPC board-array copper-balancing safe-region computation and clearance certification to
pcb-ir.
Changed
- IPC-2581 fabrication views and panels now omit non-manufacturing data.
- Split the Nix flake's
pcbshim andpcbccompiler into independent package outputs.
Fixed
- Fab panels now reserve configurable process margins.
- IPC-2581 parsing now preserves multiple feature children emitted in one
Featuresblock. - Split fab-panel outlines and cutouts into separate Gerbers.
0.4.15 - 2026-07-29
Added
pcb importnow supports standalone KiCad schematics with accurate pin mapping and library-aware footprint resolution.
Changed
- Git authentication now leaves repository authorization to DiodeHub.
Fixed
- Corrected house TVS ratings and clamping-voltage range matching.
- Preserved explicit SSH remotes in PCB-owned Git operations.
0.4.14 - 2026-07-28
Added
- Added
pcb auth git configureandpcb auth git unconfigureto manage host-specific global Git credential configuration for DiodeHub. - PCB now authenticates its own DiodeHub Git operations without requiring global Git configuration.
Changed
pcb migratenow rewrites legacy GitHub registry references to DiodeHub.- Dropped support for Intel Macs; macOS now requires Apple silicon.
0.4.13 - 2026-07-27
Added
- Added
pcb auth gitas a Git credential helper that exchanges PCB authentication for short-lived DiodeHub Bearer credentials. - Added
pcb ipc2581 fab-panel createto tile up to 32 assembly panels with identical stackups into a fixed 18 by 24 inch fabrication panel. - Added read-only
pcb component searchandpcb component downloadcommands with pretty and raw JSON output.
Changed
- Deprecated legacy component API access through
pcb search -m web:componentsand the online paths ofpcb new component.
0.4.12 - 2026-07-24
Changed
pcb lspnow reports itspcbcversion, executable, client, workspace roots, and startup configuration.
Fixed
- E-series helpers now consider the nearest value in the adjacent decade without changing exact E-series inputs.
- IPC-2581 board-array output now uses schema-valid history changes and one feature per generated geometry container.
- Prevent
textDocument/didSavefrom republishing an open-buffer netlist already emitted bytextDocument/didChange.
0.4.11 - 2026-07-23
Changed
- Removed legacy LSP schematic position-write APIs.
pcb ipc2581 edit bomnow supports strict path-based selections;--rulesis deprecated.
0.4.10 - 2026-07-23
Added
- Added
pcb toolchain prune [--dry-run]andpcb toolchain repair <request>.
Changed
pcb toolchain showis now read-only, checks for updates, and supports--offline.- Toolchain install and self-update output now reports component status and failures accurately.
- Bundled
pcb-rectifynow reports its version and takes precedence overPATH.
Fixed
- Avoid duplicate LSP netlist updates for unchanged state.
0.4.9 - 2026-07-23
Added
pcb scansupports page ranges with--pages START-END.
Changed
- LSP schematic position writes support atomic updates and deletions while remaining compatible with legacy clients.
Fixed
[workspace.bom] strict = truenow selects the API's strict BOM matcher instead of sending an ignored request-body field.
0.4.8 - 2026-07-22
Changed
- Added a Murata model for the 0201 2.2 nF house capacitor.
- Added a 0603 2.2 µF, 50 V X5R house capacitor; upgraded the 0402 470 nF part to X7R.
0.4.7 - 2026-07-10
Added
- LSP position saves accept a
baseHashand return a text edit; evaluation results carry acontentHash.
Changed
- Physical quantity types now compose with
*and/from builtin fundamentals, replacingbuiltin.physical_value(). - Physical dimensions now use five SI bases while preserving existing electrical units.
0.4.6 - 2026-07-08
Changed
pcb scannow uses the datasheet cache API and skips re-uploading PDFs the backend already has.pcb new componentresolves symbol datasheet URLs through the datasheet cache API and keeps the URL in the symbol instead of vendoring a local PDF copy.
0.4.5 - 2026-07-07
Added
- Added
pcb gerber normalizeto re-emit a Gerber layer through the pcb-ir pipeline. - Added
pcb ipc2581 dfmto flag features and gaps narrower than a manufacturing minimum.
Changed
- Gerber import preserves standard-aperture flashes.
- Board array profile Gerbers emit arcs instead of tessellated segments.
Fixed
pcb syncno longer downgrades workspace dependency pins when local git tags are stale.- Gerber regions no longer connect holes with board-length cut-in slivers.
pcb opennow accepts sandbox file URIs in the new/fs/read?path=...form emitted by Diode Registry and uses the current streamed sandbox exec API.- Reference designators derived from instance-name hints now honor 4-digit (1000-series) numbers such as
R1000,R1500, andLED1001instead of silently auto-renumbering them. pcb doc @stdlib/...now works from inside any workspace.
0.4.4 - 2026-07-03
Added
- Added
pcb sync --checkto fail CI when hydratedpcb.tomlmanifests or vendored package versions are out of sync. The check covers the whole workspace regardless of the current directory. - Added
DIODE_API_AUTH=noneto send Diode API requests without attaching client auth, for proxy-injected authentication.
Changed
pcb syncnow applies manifest and vendor updates only after the whole workspace resolves; a resolution failure no longer leaves partially hydrated manifests.pcb syncandpcb vendorno longer create an emptyvendor/directory when no packages match the vendor patterns.
Removed
- Removed
pcb sync --offline; usepcb build --offlinewith a synced manifest for offline reproducibility.
0.4.3 - 2026-06-29
Added
- IPC-2581 mutations now create a history record when the source file does not already have one, including board array creation.
- IPC-2581 board arrays now include panelization metadata.
Fixed
- Fixed a
pcb buildperformance regression in large workspaces with many packages. - IPC-2581 to Gerber export now emits compound region holes as local Gerber cut-ins.
0.4.2 - 2026-06-26
Added
- Added IPC-2581 board array creation, viewing, and export support to
pcb ipc. - Added
pcb rectify checkandpcb rectify fix, backed by a bundledpcb-rectifysidecar binary, to check and patch KiCad footprint 3D model(rotate ...)/(offset ...)transforms by matching tessellated STEP geometry against the footprint's pads and holes.
Fixed
pcbtoolchain resolution now only considers fully-published releases. Releases are gated on apcb/index/<version>completion marker written as the final step of publishing, so the shim never resolves or downloads a release whose artifacts are still uploading.NotConnectedis now an open-net constructor, not a net type.
0.4.1 - 2026-06-22
Fixed
- Net kind merging now promotes empty or
NotConnectedplaceholders to observed concrete kinds. - Stdlib TVS matching now includes the
SP3022-01ETG-NMSOD-882 peak pulse power rating. pcb buildnow rejects relative imports into undeclared nested workspace packages and asks users to runpcb sync.
0.4.0 - 2026-06-17
Fixed
- Net aliases used inside
io()interface templates no longer unregister the original net name. - Child net-symbol position overrides (
# pcb:sch <child>.<NET>.<idx>) are no longer dropped when the net is renamed across the module boundary. - Package content hashes ignore generated
pcb.sumfiles. - Read/evaluation paths now require hydrated manifests and never mutate dependency state.
pcb inforeports cache dependencies using stable.pcb/cachepaths.- Frozen eval root detection uses resolved package roots.
- Restored stdlib
Crystalsupport for the2012_2Pinpackage with its bundled KiCad footprint.
Changes
- Stdlib LEDs now use color-specific KiCad small filled symbols for single-color LEDs.
- Stdlib generic passives, diodes, crystals, ferrite beads, and test points now use KiCad small schematic symbols by default.
- Removed legacy v1/
pcb.sumresolution, disabledpcb update, and dropped obsolete--lockedread-command flags. pcb migrateremoves deprecated[workspace].members; other commands reject it.pcb syncno longer writes stdlib-only KiCad dependency entries.pcb migratenow upgrades workspacepcb-versionafter successful latest-toolchain migrations.- Added
[workspace.bom] strict = trueto require exact MPN matching when fetching BOM availability. pcb publishrelease metadata now records strict workspace BOM matching when enabled.- Bundled selected KiCad library assets into stdlib, including embedded footprint STEP models;
@kicad-symbolsand@kicad-footprintsnow resolve to those bundled assets. - Legacy
gitlab.com/kicad/libraries/*manifest dependencies are ignored during resolution because stdlib carries the referenced KiCad assets. - Updated stdlib generics to use KiCad 10.0.3 symbols and footprints, while keeping
Crystal()compatible with KiCad 9 four-pin symbols. pcb publishnow bundles only referenced KiCad split-symbol files instead of whole split-library directories.- Added
pcb +local ...to run the local toolchain installed byinstall.sh --local. pcb +nightly ...now caches nightly release metadata for 30 minutes.- Removed legacy manifest and import support:
[module],[packages],[assets], and[workspace].resolverare rejected; legacy stdlib load paths are no longer accepted;pcb migrateno longer runs V1 codemods. - Removed deprecated stdlib files and modules, including
config.zen,metadata.zen,pins.zen,kicad/*, and the generic BJT, diode, MOSFET, standoff, and terminal-block modules. - Removed deprecated stdlib API shims, including
Properties(),Schematics(),config_unit(),config_properties(),*Rangeunit aliases, legacyNetTieinputs, and legacy resistor, capacitor, ferrite, and inductor inputs. - Removed deprecated language shims, including
config(convert=...), bareadd_property(...),NET=net casts, module DNP properties, automatic component property key capitalization, legacyComponent(properties={...})sourcing/DNP keys, and legacy net moved aliases. - Regular nets now require explicit or assignment-inferred unique names; unnamed or duplicate regular nets fail evaluation.
NotConnectednets are now source-unnamed; explicit names are ignored with a warning and downstream tools assign connection-derived names as needed.- Added KiCad 10 jumper-pin support.
0.3.93 - 2026-06-12
Changed
- Remote sandbox sync now uses octet-stream writes, refreshes auth during sessions, and keeps recoverable local KiCad session files when sync exits unexpectedly.
0.3.92 - 2026-06-09
Changed
pcb publishpackage mode now includes board manifests.
0.3.91 - 2026-06-08
Changed
- Added a
No match (unknown part)type to thepcb bomavailability legend and summary.
0.3.90 - 2026-06-04
Added
- Added ESR-aware stdlib crystal matching, 24 MHz house parts, and lower-ESR ECS 2520 options.
Fixed
pcb publishnow rehydrates V2 package dependency manifests when publishing dependents of newly tagged workspace packages.
0.3.89 - 2026-06-03
Added
- Render IPC-2581 artwork layers in stackup order, plus non-stackup layer SVGs, in the HTML export through the shared IR geometry pipeline.
Fixed
- Reduced cache-index SQLite connection churn during
pcb syncto avoid intermittent crashes. - Fixed the Nix flake build and exposed both
pcbandpcbc.
0.3.88 - 2026-06-02
Added
pcb buildnow accepts multiple explicit.zenfile paths from the same workspace.- Added
pcb list -m -uandpcb list -m -versionsfor read-only V2 dependency update discovery.
Fixed
pcb new boardand freshpcb importoutput no longer create obsoletepcb.sumfiles.
0.3.87 - 2026-05-29
Changed
- Batched IPC/Gerber polygon boolean operations for much faster real-board geometry processing.
Fixed
pcb opennow ignores diagnostics when evaluation still produces usable output.pcb buildnow syncs workspace-vendored dependencies before evaluating hydrated MVS v2 projects.pcb publishV2 source bundles now validate offline without requiring KiCad assets in.pcb/cache.- V2 workspaces now derive KiCad footprint library names from resolved stdlib dependencies.
0.3.86 - 2026-05-28
Added
- Added a 48 V Vishay SMBJ DO-214AA unidirectional TVS house part.
- Added
install.sh --localto build and install localpcbandpcbcbinaries side-by-side for development.
Changed
config()now rejects Starlarkrecord()types as module input types.- Lowered the default board-config minimum silkscreen text height from 0.8 mm to 0.6 mm.
- Removed the hidden
pcb packagesubcommand. pcb updatenow rejects hydrated V2 dependency manifests and points users topcb add -u.- Workspaces with
pcb-version = "0.4"or newer now always use MVS v2 dependency resolution. pcb migratenow hydrates V2 dependency manifests and removes obsoletepcb.sumlockfiles.- Workspace package discovery is now implicit; use
[workspace].excludeto prune paths. - Updated the embedded Starlark runtime integration to the current starlark-rust APIs.
Fixed
- Removed stale KiCad board items that reference layers deleted by layout stackup sync.
pcb add -unow works when the workspace root is also a package directory.- Use hydrated MVS v2 dependency resolution consistently across CLI, LSP, docs, and WASM evaluation.
0.3.85 - 2026-05-21
Added
- Added Würth Elektronik WE-PMFI 1210 power inductors to stdlib house BOM matching.
0.3.84 - 2026-05-21
Added
- Added remote sandbox URI support for
pcb openandpcb layout. - Added
pcb opensupport for local and remote.kicad_pcbfiles. - Added a
pcbccompiler/toolchain binary alongsidepcbso releases can publish versioned toolchain artifacts. - Added a rustup-style
pcbshim crate that selects, installs, and executes the separate versionedpcbctoolchain crate from the workspacepcb-versionlane or a+<toolchain>CLI override. - Added
pcb +nightly ...and scheduledpcbcnightly publishing from the head ofmain.
Changed
- Treat empty legacy
Component()sourcing values as missing. - Error for BOM components without part data unless house matching supports them.
0.3.83 - 2026-05-19
Changed
- Standalone
pcbreleases now use the Diode CDN for faster, less exciting downloads and update checks.
0.3.82 - 2026-05-19
Added
- Added
pcb ipc2581 renderfor processed IPC-2581 layer output to SVG, PNG, and terminal graphics, including board outline overlays. - Added
pcb ipc2581 outlineto export the IPC-2581 board profile as a KiCad-importable DXF. - Added
pcb ipc2581 gerberto export IPC-2581 fabrication layers as Gerber X2 files through a canonical artwork pipeline. - Added initial
gerberx2crate andpcb gerber renderSVG/PNG/terminal previews. - Added
pcb build --diagnostics <path>to write structured JSON diagnostics for all evaluated root files. - Added
pcb layout -f jsonandpcb layout --no-syncfor machine-readable layout output and existing-layout discovery.
Changed
- Added diagnostic kinds for more toolchain diagnostics, including duplicate child names.
- Deprecated legacy
properties=and sourcing kwargs onComponent()/Module(); use typed kwargs (dnp,skip_bom,skip_pos,type,description,part=Part(...)). - Deprecated the bare
add_property(...)global in favor ofbuiltin.add_property(...). pcb new board <name> <repo-url>now creates a board repository directly, replacing the separatepcb new workspaceflow.pcb importnow writes directly into a board repository root instead of creatingboards/<name>/under a workspace.- Board release uploads now derive the Diode workspace name from the first path segment of
[workspace].repository, with[workspace].nameavailable as an override. pcb layoutnow deletes stale copied synced footprints.- Deprecated stdlib generic modules
generics/TerminalBlock.zenandgenerics/Standoff.zen, and removed generic BOM matching for standoffs. - Removed the hidden
pcb build --board-configJSON output option.
Fixed
- Fixed remote package imports from non-GitHub/non-GitLab hosts such as
code.diode.computer. - Fixed auto-dependency discovery warnings caused by non-import strings that only looked like remote URLs.
- Fixed stdlib LPDDR4 channel impedance defaults to use 40 Ω single-ended and 80 Ω differential routing targets.
0.3.81 - 2026-05-11
Changed
- Explicitly loading prelude-provided stdlib identifiers now emits a warning encouraging use of the @stdlib prelude.
pcb self updatenow prints release notes between the old and new versions.pcb docis now only for package documentation.- Removed embedded
docs/pages, embedded changelog rendering,pcb doc spec,pcb doc --install, andpcb doc --list.
Fixed
pcb publishnow tolerates layouts missing release text variables from olderpcb layoutruns by adding them during staging.
0.3.80 - 2026-05-11
Added
- Added stdlib BOM matching for Murata 0201 2.2nF capacitors.
- Added an LPDDR4 channel interface to stdlib.
- Added scoped multi-registry search for registry-backed
pcb search. - Builds now validate file-backed KiCad footprint S-expressions and embedded model checksums before layout generation.
pcb info -f jsonnow includes the full transitive external dependency closure using package metadata aligned with workspace packages.- Added stdlib BOM matching for 0603 and 0805 Würth Elektronik WE-PMI and WE-PMCI power inductors.
- Added stdlib BOM matching for Panasonic ERJ-1GJF and ERJ-1GNF 0201 resistors.
Changed
pcb layoutnow initializes release text variables in KiCad project and board files, usingd10d3c0as the placeholder git hash.- Embedded STEP writers now use KiCad's current MMH3 checksums instead of legacy SHA-256 checksums.
pcb embed-stepis now shown in CLI help.
Fixed
- Improved
pcb publishworkspace resolution. pcb publishno longer loads and rewrites boards with KiCad Python just to update release text variables, avoiding headless KiCad failures.- Fixed 4-digit resistor R-notation for generic BOM matching of sub-10Ω E96 values.
- MVS v2 layout generation now keeps cache-backed footprint library paths workspace-relative.
0.3.79 - 2026-05-08
Added
- Added simpler version footprint and separate QR to stdlib.
Fixed
- MVS v2 offline builds now load dependency manifests from
vendor/before falling back to the package cache.
0.3.78 - 2026-05-07
Fixed
pcb layoutnow embeds footprint-relative 3D models.pcb layout --checkand board publish now use a semantic managed-footprint/connectivity check instead of byte-comparing shadow-synced KiCad files.- Schematic position parsing for hierarchical labels representing interface nets now works correctly.
0.3.77 - 2026-05-07
Changed
- Capacitor voltage-rating warnings now compare explicit ratings against the connected net voltage difference instead of the inferred 1.5x rounded requirement.
- Hydrated MVS v2 builds now reuse cached loads across packages with identical package-local dependency maps.
0.3.76 - 2026-05-06
Added
- Added SOD-882 TVS diodes with capacitance-based BOM matching.
Changed
- Capacitors now warn when explicit voltage ratings are below the inferred 1.5x rounded net-voltage requirement.
Fixed
- KiCad CLI discovery now checks
PATHbefore platform fallbacks. pcb searchnow refreshes stale local registry and KiCad indexes before non-interactive searches.pcb layoutno longer fails when KiCad groups contain generated tuning-pattern items.- Capacitor auto voltage ratings now round the 1.5x net-voltage requirement up to common capacitor voltage tiers.
0.3.75 - 2026-05-02
Added
- Added API authentication via AWS credentials.
0.3.74 - 2026-04-30
Added
- Added experimental MVS v2 dependency resolution via
pcb sync/pcb add.
0.3.73 - 2026-04-27
Changed
- Generated component
.zenfiles now declare pins as flat top-levelio(Net)assignments instead of aPins = struct(...)block. - Component datasheets now prefer
Partmetadata before component-level datasheets, with KiCad symbol datasheets as the final fallback.
0.3.72 - 2026-04-27
Added
pcb layout,pcb simulate, andpcb testnow support repeatable--config KEY=VALUEoverrides.pcb-versionnow requiresmajor.minor; auto-deps bumps older workspace minors forward and newer-required minors error out.pcb info -f jsonnow includes package entrypoints and top-level KiCad symbol names.
Changed
- Removed
pcb info --tree; it was not reliable and will be added back later when the dependency-tree semantics are more robust. - Removed the hidden
pcb mcpcommand and deleted thepcb-mcp/rquickjsintegration from the workspace. - Board releases no longer generate GLB model files.
- ODB++ release exports now use precision 4.
pcb infonow computes package dirty status from git metadata more efficiently.
Fixed
pcb doc --package <url>now prefers matching local workspace members for bare package URLs.pcb docnow supportschangelog[@latest|@unreleased|@<version>].- Suppressed
binding.rebindwarnings for repeated_discard targets in top-level assignments. - Warn when a BOM-included non-generic component is missing part information.
0.3.71 - 2026-04-20
Added
- Extended house Schottky and TVS BOM ladders with additional higher-voltage entries.
Fixed
- Avoid collisions in generated footprint library names.
Added
pcb fmtnow supports--include=kicad-sym|allto format.kicad_symfiles during directory walks.
0.3.70 - 2026-04-17
Fixed
- Unresolvable inherited KiCad symbol datasheet paths are now dropped silently instead of emitting build warnings.
0.3.69 - 2026-04-17
Fixed
- Fixed
ioprelude handling forgenerics/Rectifier.zenandgenerics/Zener.zen. - Generated component .zen files now omit KiCad
no_connectpins fromio()andComponent(..., pins=...).
0.3.68 - 2026-04-17
Migration Guide
Prefer template-first io(template) over io(type, default=...). default= for io() remains source-compatible for now, but it is deprecated and now emits a warning.
Before:
VDD = io(Power, default=Power("VDD", voltage="3.3V"))
GND = io(Ground, default=Ground("GND"))
After:
VDD = io(Power("VDD", voltage="3.3V"))
GND = io(Ground("GND"))
Example warning:
Warning: io() parameter `default` is deprecated; prefer template-first `io(template)` instead
╭─[ /Users/akhilles/src/diode/registry/reference/TCA9517Ax/TCA9517Ax.zen:46:6 ]
46 │EN = io("EN", Net, optional=True, default=Net(VCC_A))
│ ╰──────────────────────── io() parameter `default` is deprecated; prefer template-first `io(template)` instead
Omit explicit connections for pin.no_connect pins. If a pin is marked no_connect, leave it out of pins and Component() will wire NotConnected() automatically.
Before:
NC = io("NC", Net)
Component(
name="J1",
...,
pins={"A": A, "B": B, "NC": NC},
)
After:
Component(
name="J1",
...,
pins={"A": A, "B": B},
)
Example warning:
Warning: Pin 'NC' on component '1-2199119-3' is marked no_connect but was explicitly connected to Net net 'NC'; omit it from `pins` and Component() will wire NotConnected() automatically
╭─[ /Users/akhilles/src/dioderobot/demo/components/TE_Connectivity/1M2199119M3/1M2199119M3.zen:38:8 ]
38 │ NC=io("NC", Net),
│ ╰─────── Pin 'NC' on component '1-2199119-3' is marked no_connect but was explicitly connected to Net net 'NC'; omit it from `pins` and Component() will wire NotConnected() automatically
Avoid rebinding the same top-level name in a module. If you need to derive a final wiring choice, bind it to a new name instead of overwriting the original io() or intermediate value.
Before:
RT = io("RT", Net)
if rt_value == "GND":
RT = GND
elif rt_value == "VCC":
RT = VCC
After:
RT = io("RT", Net)
if rt_value == "GND":
rt_pin = GND
elif rt_value == "VCC":
rt_pin = VCC
else:
rt_pin = RT
Example warning:
Warning: Rebinding 'CURR_FDBK1_OPAMP_MINUS' in the same scope
╭─[ /Users/akhilles/src/dioderobot/demo/boards/DM0001/src/ShuntSense.zen:43:1 ]
43 │CURR_FDBK1_OPAMP_MINUS = GND
│ ╰─────────── Rebinding 'CURR_FDBK1_OPAMP_MINUS' in the same scope
Use Power() or Ground() for io()s that feed power pins instead of plain Net.
Before:
VDD = io("VDD", Net)
GND = io("GND", Net)
After:
VDD = io(Power())
GND = io(Ground())
Example warning:
Warning: Pin 'VDD' on component 'LIS3DH' is a power pin but is connected to plain Net 'VDD'; consider using Power() or Ground()
╭─[ /Users/akhilles/src/dioderobot/demo/components/STMicroelectronics/LIS3DH/LIS3DH.zen:16:9 ]
16 │ VDD=io("VDD", Net),
│ ╰─────── Pin 'VDD' on component 'LIS3DH' is a power pin but is connected to plain Net 'VDD'; consider using Power() or Ground()
Migrate deprecated generics/Diode.zen usage to the more specific diode generics:
- Use
generics/Rectifier.zenfor standard and Schottky diodes, including small-signal / signaling diodes. - Use
generics/Zener.zenfor reverse-breakdown regulation and reference diodes. - Use
generics/Tvs.zenfor transient-voltage suppressors.
Package mapping:
SMA -> DO-214AC
SMB -> DO-214AA
SMC -> DO-214AB
SOD-123 / SOD-323 / SOD-523 stay the same
Rectifier / Schottky:
Diode(package="SMA", variant="Schottky", v_r="40V", i_f="1A", v_f="500mV", A=A, K=K)
Rectifier(package="DO-214AC", technology="Schottky", reverse_voltage="40V", forward_current="1A", forward_voltage="500mV", A=A, K=K)
Zener:
Diode(package="SOD-123", variant="Zener", v_r="5.1V", A=A, K=K)
Zener(package="SOD-123", zener_voltage="5.1V", A=A, K=K)
TVS:
Tvs(package="DO-214AA", direction="Unidirectional", reverse_standoff_voltage="24V", reverse_clamping_voltage="38.9V", peak_pulse_power="3000W", A=GND, K=VIN)
Added
- Added
generics/Rectifier.zenandgenerics/Zener.zenwith expanded package support and house-part BOM matching coverage. pcb layoutand board publish now fail early when a board was last saved by a newer KiCad major version than the one installed locally.pcb buildnow accept repeatable--config key=valuefor settingconfig()parameters.- Net type physical-value fields now coerce string and scalar inputs like
io()/config(). - Unnamed
Net()/typed nets and generated interface child nets now infer names from assignment targets when possible. - Add
io()direction metadata plusinput()/output()sugar. config(),io(),input(), andoutput()now allow omitting the explicit name when assigned to a top-level variable.config()now supports discreteallowed=sets for scalar and physical-value inputs.- Preserve KiCad symbol pin metadata and add
Component()pin/net compatibility warnings. - Added style advice for redundant explicit names on
io(),config(), nets, and interfaces. - Add pass-based schematic ERC plumbing and net-site
pin.no_connectdiagnostics with inline suppression support. io(template)now infers placeholder types and enforces typed-net voltage compatibility.
Changed
- Component generation no longer automatically scans datasheets.
- Component modifiers can now override
spice_model. - House Murata caps now use vendor MLCC models when available.
voltage_within()now accepts nets with voltage metadata or directVoltagevalues.pcb new componentandpcb searchcomponent imports now place datasheet artifacts under each component'sdocs/subdirectory.- Layout sync and KiCad netlist export now normalize file- and package-based footprints to library-aware FPIDs.
Component()now infersspice_modelfrom symbolSim.*properties.Simulation()now acceptsbom_profile=.- Module-scoped variable rebinding is now a warning.
- Removed the 10uF 100V 1210 stdlib house capacitor from generic matching due to severe derating.
NetandPowernow expose unsetvoltageasNone.- Deprecated
NET=net casts now warn; use positional forms likePower(other_net). - Remove legacy
pcb forksubcommands and reservepcb forkfor future use.
Fixed
- LSP diagnostics now publish to the
.zenfile that owns the root diagnostic span.
0.3.67 - 2026-04-10
Added
- Added workspace-scoped Diode endpoint overrides via
[workspace].endpoint, with auth tokens stored per resolved endpoint.
Changed
- Loading deprecated stdlib physical-unit
*Rangealiases now emits a deprecation warning pointing to the corresponding base unit type. - Deprecated the stdlib
pins.zenandmetadata.zenmodules. - Deprecated the
Schematics()helper. - Deprecated generic modules
generics/Bjt.zen,generics/Diode.zen,generics/Mosfet.zen, andgenerics/OperationalAmplifier.zen. - Deprecated non-standard packages in
generics/Inductor.zen. - Newly added KiCad symbol properties now default to
justify left topandhide yes. pcb scannow resolves local PDFs through the shared datasheet materialization cache by default, and--outputcopies the materialized Markdown and images out of that cache.pcb scannow prints bothPDF:andMarkdown:output paths, with local PDF scans reporting the original input PDF path and URL scans reporting the materialized cached PDF path.pcb searchnow merges docs full-text results for registry packages and KiCad symbols, with consistent phrase handling across indices.
Fixed
pcb build --offlinenow reuses selected locked pseudo-versions for rev-pinned workspace deps.PhysicalValueis now hashable in Starlark, including after freezing.- Layout sync no longer creates empty footprint
(embedded_files)blocks that KiCad removes on save. - Fixed an LSP memory leak during reparsing.
- Rev-pinned dependencies now override stale lockfile-seeded pseudo-versions during resolution.
0.3.66 - 2026-04-06
0.3.65 - 2026-04-03
Added
- Added 10uF 100V 1210 house capacitor in stdlib
Fixed
pcb layoutno longer crashes when a managed component path is numeric-only, such as1053091102.pcb buildnow warns and drops invalid inherited symbol datasheet paths instead of failing the build.
0.3.64 - 2026-04-02
Added
- Added support for KiCad 10.
0.3.63 - 2026-03-30
Changed
- KiCad symbol is now the source of truth for component metadata (footprint, datasheet, part); generated
.zenfiles are minimal wrappers. Component()inheritsskip_bomfrom the KiCad symbolin_bomflag (inverted) when not explicitly set.pcb fork addis now blocked and points users topcb sandbox;pcb fork removeandpcb fork upstreamremain for existing forks.
Added
- Warn when module
io()s are declared but never connected to any realized ports.
Fixed
- Stdlib
CrystalandMountingHoleno longer expose unused variant-specific ports. - Untagged
branch/revdependencies now use0.1.1-0...pseudo-versions so they outrank plain0.1.0deps.
0.3.62 - 2026-03-27
Fixed
pcb doc --package <url>now defaults remote packages to the latest tagged version and accepts an explicit@latestsuffix.
0.3.61 - 2026-03-25
Added
pcb new componentnow prints aModule("...")usage hint when it can infer a qualified URL.
Fixed
- Auto-deps now only upgrades synced workspace member dependency versions.
- Workspace-namespace dependencies now fail locally with a clear missing-member error instead of remote fetch fallback.
0.3.60 - 2026-03-25
Added
- Board publish now blocks outside CI when any
pcb.tomluses[patch]orbranch/revdependencies.
Changed
- Show
Fetching <repo>progress while populating shared bare repos under~/.pcb/bare. - Vendored remote packages now copy only canonical package files instead of whole cache directories.
Fixed
- Git HTTPS fallback probes now run non-interactively before falling back to SSH.
- Exclude
pcb.sumin canonical package hash - LSP now watches
**/pcb.tomland**/pcb.sumfor dependency and workspace updates. - Auto-deps now sync workspace member versions against tags reachable from the current
HEAD, avoiding version bumps from future history on historical checkouts.
0.3.59 - 2026-03-23
Added
pcb searchnow supportskicad:componentsin both the TUI and non-interactive search.
Changed
- Dependency materialization now archives directly from
~/.pcb/barefor tagged and pinned dependencies.
Fixed
- Existing partial bare repos under
~/.pcb/barenow transparently hydrate to full clones before serving pinned local commits.
0.3.58 - 2026-03-21
Added
Usb2TypeCinterface adapter in stdlib to connet USB2 to TypeCDvpinterface for cameras with 8, 10, 12 and 16 bit widthSdRaminterface for 16 bit and 32 bit
Changed
pcb publishfor packages now builds before planning publish waves and aborts if the validation build dirties the repository.
Fixed
pcb updatenow consistently scopes nested paths to the containing package.- Branch and
revdependencies now resolve the pseudo-version matching the pinned commit, avoiding flakypcb.sumentries.
0.3.57 - 2026-03-18
Added
pcb publishnow supports inferred package bumps from conventional commits with--bump=infer.pcb publish -ynow skips the final package publish confirmation prompt.- Include version in dependency/dependent URLs in search results (e.g.
...@1.0).
Changed
- All
@stdlib/kicad/modules (PinHeader,PinSocket,MolexPicoBlade,SolderWire,TagConnect) now emit deprecation warnings. pcb publishnow fetches remote state before preflight checks and verifies local main is in sync with the remote.pcb publishfor packages now requires theCIenvironment variable to be set (use--forceorCI=trueto bypass).- Skill setup and instructions now live in
pcb aiinstead of the mainpcbCLI and MCP server.
Fixed
pcb publishnow generates shorter conventional commit titles for dependency bumps.pcb publishnow rolls back local tags and commits if pushing to remote fails.
0.3.56 - 2026-03-14
Fixed
- Reject same-package package URLs in
Module()and require relative paths instead of adding self-dependencies.
0.3.55 - 2026-03-14
Fixed
- Stop syncing
AlternativesandMatchercomponent metadata into KiCad footprint fields during layout sync. pcb bomnow keeps MOQ-expensive offers in BOM output but marks them hard to source in table summaries instead of dropping them.
0.3.54 - 2026-03-12
Added
- Hidden
pcb kqcommand to inspect KiCad symbol libraries as structured JSON views (sym,metadata,electrical,raw). pcb new component --component-id <id>now installs a web-searched component non-interactively, with optional--part-numberfallback and--manufactureroverride/fallback.[[workspace.kicad_library]]now supportsparts = "<url>", materializing a virtual parts manifest for KiCad symbol repos so@kicad-symbols/...symbols can inherit default parts too.
Changed
- CLI and MCP component search JSON outputs are now aligned, with cleaner payloads and per-source caps for
web:components.
Fixed
pcb publishnow showspatch,minor, andmajorbumps for boards consistently, andmajoron0.xnow produces1.0.0.
0.3.53 - 2026-03-11
Added
pcb new workspacenow creates an emptypcb.sum, sopcb build --locked --offlineworks immediately.pcb scannow acceptshttp(s)datasheet URLs in addition to local PDF paths and prints the resolved markdown path.Partis now in the standard library prelude. UsePart(mpn=..., manufacturer=...)withComponent(part=...)for manufacturer sourcing.pcb doc --installwrites embedded documentation to~/.pcb/docs; runs automatically on first use and afterpcb self update.Component()now inherits defaultpart,alternatives, and part qualifications from manifestpartsentries matched by stablepackage://symbol URIs.
Changed
Partis now the single source of truth for component sourcing.mpnandmanufactureronComponent()still work butpart=is preferred.pcb newnow uses subcommands (workspace,board,package,component) instead of--workspace/--board/--package/--componentflags.pcb new component [DIR]now imports local component directories;pcb search --dirsupport was removed.Netis now defined in@stdlib/interfaces.zenand available via the stdlib prelude instead of being a language builtin.- Removed deprecated backward-compatibility shims:
builtin.physical_range(),builtin.Voltage/Current/etc. attributes,using(). pcb scanremoved--modeland--json; local PDF and URL flows now both resolve to markdown output with default processing.
Fixed
match_component()now skips non-component children such asElectricalCheckinstead of failing on missingmpn.pcb updateno longer proposes updates for KiCad asset libraries (symbols, footprints, 3D models) which publish breaking changes in patch releases.- Auto-dependency detection now resolves relative path imports that cross workspace member boundaries (e.g.
load("../../modules/Lib/Lib.zen", ...)). - Layout sync now applies pad assignments to all same-number KiCad pad objects in a footprint.
0.3.52 - 2026-03-07
Added
config()now supportschecksparameter for validation functions, matchingio().- Stdlib prelude:
Power,Ground,NotConnected,Layout, andBoardare now implicitly available in.zenfiles without explicitload()statements.
Changed
config()parameterconvertis now deprecated and emits a warning.- Bundle the standard library with
pcband make it available automatically in each workspace.
Fixed
- Preserve KiCad zone priorities during
layout.syncand bias fragment zones so overlapping fills keep the intended precedence.
0.3.51 - 2026-03-04
Changed
- Bump stdlib to 0.5.11
Added
- Added typed part metadata with
builtin.Part(...)andComponent(part=...), including JSON netlist serialization andlist[Part]support forproperties["alternatives"].
Fixed
- Apply MVS-selected KiCad asset versions in resolution/materialization and sibling promotion, preventing
@kicad-*alias failures after patch updates. pcb updatenow ignores prerelease dependency versions when selecting updates.
0.3.50 - 2026-03-02
Changed
- Bump stdlib to 0.5.10
Fixed
pcb publishnow skips tracked paths from regular manifest dependencies and correctly copies tracked asset directories, fixing release staging failures on patched/forked module layouts.
0.3.49 - 2026-03-02
Changed
- Replace
[assets]with[[workspace.kicad_library]]for built-in resolution of KiCad symbol, footprint, and 3D model repositories. - Embed referenced 3D models directly into
.kicad_pcblayout files, eliminating the need for external 3D model files at layout time.
0.3.48 - 2026-02-28
Added
pcb simulate: run SPICE simulations directly via ngspice with inlineset_sim_setup(),--netlist/-o -output, workspace discovery, and LSP diagnostics on save. Errors on components missing aSpiceModelto prevent incomplete netlists.- Support net names in f-strings for SPICE simulation setup (e.g.
f"V1 {VIN} {GND} AC 1"), including dot-notation for interface nets ({POWER.vcc}).
Fixed
- Normalize net and component symbol source paths to
package://..., so emitted schematic/netlistsymbol_pathvalues no longer leak absolute cache paths.
0.3.47 - 2026-02-27
Fixed
- Ensure
File()footprint paths resolve topackage://...when dependency files are read from~/.pcb/cache.
0.3.46 - 2026-02-26
Changed
- Use zstd level 17 (was 15) when embedding STEP 3D models into KiCad footprints.
Path(..., allow_not_exist=True)no longer emits missing-path warnings.pcb searchcomponent add now prefers symbol datasheets, using fallback URL scan only when needed.pcb searchadd-component now rewrites symbolManufacturer_Part_Number/Manufacturer_Namemetadata before generating.zen.
Fixed
- Normalize netlist
package_rootscache paths to<workspace>/.pcb/cachefor unvendored remote dependencies (including stdlib). - MCP
resolve_datasheetnow avoids top-level JSON Schema combinators ininputSchema, fixing strict MCP clients (e.g., Claude Code) that rejectoneOfat schema root.
0.3.45 - 2026-02-25
Added
- Added
pcb docguides for bringup, changelog, and readme conventions. - Added MCP tool
resolve_datasheetto produce cacheddatasheet.md+images/fromdatasheet_url,pdf_path, orkicad_sym_path. - Added LSP request
pcb/resolveDatasheet, sharing the same resolve flow as the MCP tool.
Fixed
- Standalone
.zenfiles with inline manifests now mapBoard(..., layout_path=...)topackage://workspace/..., avoiding absolute-path leakage. - Stackup sync now emits dielectric
(type ...)once per grouped layer (not peraddsublayer), preventing spuriouslayout.syncdrift.
0.3.44 - 2026-02-20
Added
Component()now infers missingfootprintfrom symbolFootprint(<stem>or KiCad<lib>:<fp>), reducing duplicated footprint data over.kicad_sym.
Changed
- MCP external tool discovery now prefers
mcp --code-mode=false(raw tools) and falls back tomcponly when needed, avoiding nested code-mode wrappers for compatiblepcb-*backends.
Fixed
- Reduced
layout.syncfalse positives in publish/check flows by normalizing.kicad_pronewline writes and ignoring trailing whitespace-only drift when comparing synced layout files. - Simplified dependency fetch/index concurrency paths and reuse a shared cache index during resolve/fetch phases to reduce open-file pressure on macOS.
- Auto-deps is now conservative and online-only: it adds remote deps only after successful materialization, skips imports already covered by existing
dependencies/assets, and no longer infers missing deps frompcb.sum. - Branch-based dependencies now require commit pinning for reproducibility: online resolve/update pins
branchdeps torev, while--locked/--offlinereject branch-only declarations. - Fixed dotted pin-name handling by resolving port owners with longest-prefix component matching in netlist/layout/publish flows.
0.3.43 - 2026-02-18
Added
pcb importnow imports KiCad design rules (including solder-mask/zone defaults), copies sibling.kicad_dru, and prints the generated board.zenpath.pcb fmtnow formats KiCad S-expression files when given explicit file paths.
Changed
- Bump stdlib to 0.5.9
pcb layout --checknow runs layout sync against a shadow copy.- Removed
--sync-board-config; board config sync is now always enabled for layout sync (CLI, MCPrun_layout, andpcb_layout::process_layout). - Stackup/layers patching in
pcb layoutnow uses structural S-expression mutation + canonical KiCad-style formatting, with unconditional patch/write. pcb layoutstackup sync now also patchesgeneral (thickness ...)from computed stackup thickness.- Removed MCP resource
zener-docs(https://docs.pcb.new/llms.txt) frompcb mcp, with Zener docs now embedded inpcb doc. - Move board-config/title-block patching to Rust; simplify Python sync; only update
.kicad_pronetclass patterns when assignments exist. pcb searchnow formats generated component.kicad_symand.kicad_modfiles with the KiCad S-expression formatter.pcb searchnow rewrites imported symbolproperty "Footprint"to the locallib:footprintform (<stem>:<stem>), matching fp-lib-table resolution during layout sync.pcb searchnow fails fast unless imported.kicad_symcontains exactly one symbol.
Fixed
- Standardized KiCad unnamed-pin handling: empty/placeholder names now fall back to pin numbers in both import and runtime symbol loading, fixing
Unknown pin nameerrors for imported components. - KiCad symbol variant parsing now selects one style per unit using named-pin coverage (tie: lowest style index), avoiding pin-name overrides while supporting
_N_0symbols.
0.3.42 - 2026-02-13
Changed
config()physical-value coercion now accepts numeric scalars (int/float) in addition to strings, matching constructor behavior.config()now enforces required module inputs:optional=Falseemits an error diagnostic even whendefaultis set; omittedoptionalinfers fromdefault.- Bump stdlib to 0.5.8
Fixed
- Fix
package://resolution for workspace and versioned dependencies, preventing absolute path leakage fromFile().
0.3.41 - 2026-02-12
Fixed
- Harden
pcb importpassive value parsing (e.g.1 uF,2,2uF,1uF/16V,10 kΩ,R10) so generic R/C auto-promotion is applied consistently.
0.3.40 - 2026-02-12
Added
load()andModule()with relative paths can now cross package boundaries within a workspace, resolved through the dependency system.
Fixed
pcb publishnow works when run from a board directory with a relative.zenpath (e.g.,pcb publish DM0002.zen).
Changed
- Resolve
Path()andFile()to stable relative paths for machine-independent build artifacts. - Bump stdlib to 0.5.7
pcb importnow scaffolds a full workspace (git init, README, .gitignore) when the output directory is new, matchingpcb new --workspace.
0.3.39 - 2026-02-11
Fixed
- Layout discovery now uses only
.kicad_profiles, ignoring extra.kicad_pcbfiles in the layout directory.
0.3.38 - 2026-02-11
Added
pcb releasenow includesdrc.jsonin the release archive containing the full KiCad DRC report.pcb import <project.kicad_pro> <output_dir>to generate a Zener board from a KiCad project.
Changed
- KiCad layout discovery no longer assumes
layout.kicad_pcb; it now discovers a single top-level.kicad_pro(preferred) or.kicad_pcbin the layout directory and errors on ambiguity.
0.3.37 - 2026-02-09
Added
- Reference designator assignment now opportunistically honors unambiguous hierarchical path hints (e.g.
foo.R22.part). pcb:schcomments now support optionalmirror=x|y, and netlistinstances.*.symbol_positions.*now serializesmirrorwhen set.
Fixed
- Improved LSP file change syncing to prevent spurious diagnostics.
0.3.36 - 2026-02-06
Fixed
- On layout sync, detach all items from removed KiCad groups before deleting the group to avoid
SaveBoardcrashes from stale group handles.
0.3.35 - 2026-02-06
Added
pcb new --boardnow generatesREADME.mdandCHANGELOG.mdfiles from templatespcb new --packagenow generatesREADME.mdandCHANGELOG.mdfiles from templates
Changed
- Bump stdlib to 0.5.6
pcb update <path>limits updates to a single workspace package when<path>points to that package directory.- Reference designator auto-assignment now uses natural sorting of hierarchical instance names (e.g.,
R2beforeR10). - Drop support for v1 workspaces
Fixed
- Stabilize auto-named single-port
NotConnected()net names (e.g.,NC_R1_P2) to reduce layout implicit renames. - Layout sync: explode single-pin multi-pad
NotConnectednets into per-padunconnected-(...)nets. - Accept KiCad copper role
jumperwhen importing stackups. - IPC-2581 rev B: parse
FunctionModelevelattribute as numeric. - Restoring missing KiCad groups no longer triggers fragment placement that can move existing footprints.
0.3.34 - 2026-02-03
Added
pcb preview <path/to/board.zen>to generate a preview link for a release.
Changed
- Board release gerber exports now use Gerber X2 format.
- Board release drill exports now generate separate PTH/NPTH Excellon files and both PDF + GerberX2 drill maps.
Fixed
- Restore
NotConnectedcompatibility: keep normal connectivity (no per-pad net exploding), warn when it connects multiple pins, and only mark padsno_connectfor single-pin cases.
0.3.33 - 2026-02-03
Changed
PhysicalValuenow formats symmetric tolerances as10k 5%(instead ofmin–max (nominal nom.)).
0.3.32 - 2026-02-02
Changed
- Unify physical value and range types (e.g. VoltageRange is just an alias to Voltage)
- Deduplicate pin names when generating component .zen file
0.3.31 - 2026-02-01
Added
config()now auto-converts strings to PhysicalValue/PhysicalRange types (e.g.,voltage = "3.3V")
Fixed
io()default values now correctly apply net type promotion (e.g.,default=NotConnected()promotes to the expected net type)
0.3.30 - 2026-02-01
Added
- Warning for unnamed nets that fall back to auto-assigned
N{id}names - NotConnected nets now preserve their type in schematics and can be passed to any net type parameter
- Layout sync now handles NotConnected pads correctly
Changed
- Bump stdlib to 0.5.4
0.3.29 - 2026-01-26
Changed
pcb publishno longer fails on warnings in non-interactive mode (CI)
Fixed
pcb publishnow correctly handles workspaces with nested packages
0.3.28 - 2026-01-26
Added
pcb publish <path/to/board.zen>to publish a board release
Removed
pcb tagandpcb releaseare no longer supported. Usepcb publish <path/to/board.zen>instead.
Changed
- Bump stdlib to 0.5.3
0.3.27 - 2026-01-23
Added
- Post-sync detection of stale
moved()paths that weren't renamed
Changed
- Bump stdlib to 0.5.2
- Deterministic diagnostic ordering during parallel module evaluation
moved()directives are now skipped if the target path already exists in the layoutmoved()now requires at least one path to be a direct child (depth 1)pcb publishnow uses single confirmation prompt instead of twopcb releasenow works for boards without a layout directorypcb layoutnow auto-detects implicit net renames and patches zones/vias before sync
Removed
- Remove
board_config.jsongeneration frompcb release
Fixed
- Validate that member packages do not have
[workspace]sections during workspace discovery pcb new --boardandpcb new --packageno longer generate[workspace]sections in pcb.tomlpcb updatenow correctly respects interactive selection for breaking changespcb releasenow correctly identifies the board package when workspace root has dependenciescopy_dir_allnow skips hidden files/directories to prevent copying.pcb/,.git/, etc.
0.3.26 - 2026-01-20
Changed
- Bump stdlib to 0.5.1
- Standardize CLI:
build/test/fmttake optional[PATH],layout/bom/sim/open/route/releaserequire<FILE>
0.3.25 - 2026-01-19
Added
- Add
pcb mcp evalto execute JavaScript with MCP tools (also exposed asexecute_toolsMCP tool) - Add
pcb run add-skillto install the pcb skill into any git repository - Add V2 dependency resolution support to
pcb sim(adds--offlineand--lockedflags) - Add
pcb search --modeto specify starting mode (registry:modules,registry:components,web:components) - Add availability, pricing, offers to
pcb search,pcb bom -f json, MCP tools
Changed
pcb layoutnow displays sync diagnostics (orphaned zones/vias, moved path warnings) even without--check- Zones/vias referencing deleted nets are now unassigned instead of heuristically reassigned; use
moved()for intentional net renames - Change
pcb search --jsontopcb search -f jsonfor consistency with other commands - Rename
pcb searchTUI modes:registry→registry:modules/registry:components,new→web:components
Removed
- Remove
--addflag frompcb search - Remove unused
pcb bom --rulesflag
Fixed
- Fix
pcb layoutgroup splitting regression where running layout twice would cause module groups to split into two (one with footprints, one with tracks/zones) - Fix race condition when populating dependency cache
0.3.24 - 2026-01-14
Added
pcb releasenow generates a canonicalnetlist.jsonin the release staging directory
0.3.23 - 2026-01-13
Added
- Add
pcb doc --changelogto view embedded release notes - Add
pcb doc --package <url>for viewing docs of a Zener package - Add
pcb doc --package <pkg> --listto list .zen files in a package as a tree - Add subpath filtering for
pcb doc --package(e.g.,@stdlib/genericsfilters to generics/)
Changed
- Bump stdlib to 0.4.10
- MCP
search_registrytool now returns workspace-relative cache paths when run inside a workspace
Removed
- Remove stdlib hijacking from evaluator. The toolchain now relies on the pinned stdlib version instead of replacing types at runtime.
Fixed
- Fix repeated gitignore parsing when walking multiple directories
0.3.22 - 2026-01-13
Added
- Add
pcb new --workspace <name> --repo <url>to create a new workspace - Add
pcb new --board <name>to create a new board in an existing workspace - Add
pcb new --package <path>to create a new package (e.g.,modules/my_module) - Add
pcb new --componentto search and add a new component via the TUI - Add
pcb doccommand for viewing embedded Zener documentation with fuzzy search - Add HTML export to
pcb ipc2581command - Add surface finish detection and color swatches to
pcb ipc2581 infoand HTML export - Include IPC-2581 HTML export as release artifact at
manufacturing/ipc2581.html
Changed
- Refactor layout sync to use a groups registry (virtual DOM pattern) as source of truth instead of querying KiCad directly
Removed
- Remove
get_zener_docsMCP tool (usepcb docCLI command instead) - Remove
pcb search --legacyflag and the old interactive API search. Use the default TUI-based registry search instead. - Remove
pcb cleancommand. To recover from cache issues, manually delete files in~/.pcb. - Remove
fab_drawing.htmlfrom release artifacts (replaced by IPC-2581 HTML export) - Remove
docs/directory from release staging output
Fixed
- Fix
pcb layoutcrash due to stale SWIG wrappers after removing empty groups - Fix intermittent "No such file or directory" errors during package fetch caused by race conditions between concurrent
pcbprocesses
0.3.21 - 2026-01-10
Added
- Add v2 dependency resolution support to
pcb test
Changed
- Use source layout directly in release instead of separate copy
- Change extra footprint sync diagnostic from error to warning
- Show module path and FPID in layout sync diagnostics (extra_footprint, missing_footprint, fpid_mismatch)
pcb layoutnow auto-replaces footprints when FPID changes (preserving position and nets)- Speed up workspace discovery by pruning unrelated directories
Fixed
- Fix
pcb layout --checkonly reporting first extra footprint instead of all - Fix inconsistent handling of invalid pcb.toml files between
pcb buildandpcb publish - Fix fp-lib-table in release staging to use vendored paths instead of .pcb/cache
- Create
<workspace>/.pcb/cachesymlink pointing to~/.pcb/cachefor stable paths
0.3.20 - 2026-01-09
Added
- Add
pcb routecommand for auto-routing using DeepPCB - Detect footprint sync issues (FPID mismatch, missing/extra components) during layout
Changed
- Skip version prompt for unpublished packages in
pcb publish(always 0.1.0) - Error on path dependencies that point to workspace members
- Error on pcb.toml parse failures
Fixed
- Fix asset resolution to check vendor directory before cache
- Fix inconsistent vendoring with folder assets and subfiles
- Fix TUI package details not loading after fresh index download
0.3.19 - 2026-01-06
Added
- Add
pcb forksubcommands (add,remove,upstream) for local package forking - Add TUI mode to
pcb searchfor browsing registry packages
Changed
- Bump stdlib to 0.4.9
0.3.18 - 2026-01-01
Added
- Support
schematic="embed"/"collapse"as a top-level kwarg - Add
dirtystatus topcb info -f jsonoutput - Warn on duplicate module name
Changed
- Error on invalid type passed to
io() - Format the auto-generated component .zen files