KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
Releases 350
Standalone per-platform binaries to download and run, no tools needed. The newest is pinned on top.
Stable link for websites and docs: /download/adom/kicad-bridge/latest
All releases showing 301-320 of 350
New verb kicad_make_part_project {partName}: generates a small real project (kicad_pro, wired kicad_sch, routed kicad_pcb with edge cuts and the part's 3D model reference) around a part installed in the Adom library, so the project / schematic / 2D board / 3D board surfaces have something true to show for a single component. This is the missing piece for per-part demo buttons: install symbol+footprint+model, make_part_project, then the four show_* file surfaces. Also: install_symbol / install_footprint (and model) now accept filePath as an alternative to base64 fileContent, so large assets (a 214KB step overflows the CLI arg limit as base64) can be staged with ab send_files and installed by path.
kicad_install_footprint now accepts model:{fileName,fileContent} — a base64 3D model (.step/.wrl) installed to Documents/KiCad//3dmodels/Adom/ and wired into the footprint's (model ...) reference (injected when the footprint ships without one). Closes the wiki-component gap: pages ship symbol+footprint+step, and the step used to be dropped so kicad_show_3d_chip rendered an empty viewer. kicad_uninstall now also removes 3dmodels/Adom.
send_key chords no longer need the foreground: wx menu items carry their accelerators ('Save\tCtrl+S'), so a chord is resolved from the window's Win32 menu bar and fired as PostMessage(WM_COMMAND) — background, robust, attributed in the response as method:menu-command. The foreground path survives only for chords with no menu accelerator. Both Alt+3 keystroke fallbacks are deleted (the Win32-menu tier owns 3D-viewer opens).
Forced-foreground courtesy captions: every last-resort allowFocusSteal/allowForeground path now fires a branded ab toast (attributed to the calling AI thread) telling the user WHY their screen is about to be taken, ~1.2s before the grab. Six call sites: Ctrl+Shift+E footprint load, both Alt+3 3D-viewer fallbacks, symbol search typing, send_key chords, real-cursor clicks. Doctrine: a forced foreground without the announce is a bug.
The final background-window design, per John: the bridge only ever manipulates KICAD's own windows. A KiCad window that reaches the foreground is minimize-bounced (Windows itself re-activates the user's previous window — the bridge never locates or raises any user window), shown again unfocused, dropped to the bottom, and NOACTIVATE-suppressed. All user-window capture/restore/adopt machinery is deleted. foreground:true remains the explicit opt-in to bring a window to the user.
Focus restore no longer fights the user: the end-of-verb restore only fires when a KICAD window currently holds the foreground. Previously it blindly re-raised the window captured at verb START — if the user switched windows during a long verb, verb completion yanked them back into the old window (reported live: the browser kept coming to the foreground).
Guardian v2.1: while any guard is active, every visible KiCad window (existing AND newly created, ~0.5s sweep) gets WS_EX_NOACTIVATE up front — the 0.9.101 run showed each fresh window still got one free visible steal before suppression; now the first offense is refused too. Styles cleared at guard end / foreground:true / close as before.
Focus guardian v2 — prevent, don't react: KiCad windows that grab the foreground get WS_EX_NOACTIVATE so Windows refuses their self-activation outright (the reactive yank-back showed as constant flashes + focus churn during test runs). Style cleared when guards end, on foreground:true, and by kicad_close so the user can always click in afterwards. Plus a verb-suite crash fix.
Background-contract audit fixes: the background kicad_demo job now arms a focus guardian for its FULL duration from inside the worker thread (the dispatcher's guard expired 45s in while beats kept opening windows for ~100s — including the board_3d render self-raise); the slow-tier dispatcher guard is 120s so cold show_3d_* flows are covered end-to-end.
#26 3D viewer cold open: new Tier 0 resolves the 3D Viewer command straight from the wxFrame's native Win32 menu bar (GetMenu/GetSubMenu walk) and fires it with PostMessage(WM_COMMAND) — plugin-free, focus-free, works from cold without the late-binding plugin or an opaque toolbar.
Focus-guardian coverage fix: the show_* surface verbs wrap open_* but the dispatcher keys on the command name, so show_* were bypassing the background guardian AND the foreground:true opt-in. Added all eight to _SPAWNS_WINDOW + SPAWNS_WINDOW_FOCUS; show_3d* get the 45s guard tier.
Background-first, enforced (John's principle): (1) the symbol/footprint keystroke+SendKeys fallbacks are now OFF by default — they fired GLOBAL keys against a non-foregrounded window, leaking into whatever the user was typing in; opt-in via allowFocusSteal, which now does a real foreground. (2) foreground:true / showToUser on any window verb is the sanctioned user-choice path — the dispatcher brings that KiCad window TO the user instead of keeping it background. (3) the full principle + an audit rule are in the kicad-bridge-background dev skill.
kicad_show_project completes the surface family: the whole electronics project (KiCad Project Manager, optionally on a .kicad_pro) — the top of the design tree. All eight surfaces (project, schematic, 2d board, 3d board, symbol, footprint, 3d chip, library) now have a clean named verb.
#26: open_3d_viewer's Footprint-Editor path now has the plugin-free UIA-invoke tier the PCB path already had, so show_3d_chip works from cold without waiting on the late-binding plugin. 3D-window detection now polls up to 9s (software-OpenGL renders lag the invoke).
show_3d_board and show_3d_chip now wait for the board/footprint editor window to materialize (open is async) before opening the 3D viewer, fixing a 'PCB Editor is not open' race when called with a filePath from cold.
kicad_show_* family, mirroring the Fusion bridge's fusion_show_*: one clean, named verb per KiCad surface so a caller never hand-assembles a workflow — show_symbol, show_footprint, show_3d_chip, show_schematic, show_2d_board, show_3d_board, show_library. Thin wrappers over the existing open_* handlers (same background-first, verified loads). Plus 0.9.92's library-browse mode.
Library browse: open_symbol_editor/{libraryName} and open_footprint_editor/{library} with NO part name now filter+select the library in the tree and report success as a browse (libraryShown), instead of failing because no part loaded.
Footprint editor cold-open: wait up to 34s for the spawned pcbnew to load the full fp-lib-table before declaring failure (stock-library restore made cold opens slower and the old 8s poll always lost).
Footprint editor cold-start: the PM-menu plugin tier now retries after the project manager launches (it previously only ran before, when nothing existed to answer). With 0.9.89's background load tier this makes footprintName/library work from fully closed.
Footprint editor parity with the symbol editor: plugin-free background load (WM_SETTEXT filter + Down + tree-targeted Enter/dblclick, title-verified) and honest success:false when a requested footprint doesn't load. Clears the last user-visible symptom of #21.