app
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.
← Commit history
v0.9.135: board3d beat waits for the PCB editor to be findable before invoking the 3D viewer (mid-transition race made a 5/6)
5 files changed
+21−8
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.134+0.9.135
adom-bridge-kicad-manifest.json+5−5@@ -1,15 +1,15 @@ { "manifest_version": 1, "name": "kicad",- "version": "0.9.134",- "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.134/adom-bridge-kicad-v0.9.134.zip",- "sha256": "2e2586a98ab1fc48e47ac01cf507dd0a28de2e76777df1eca02d9e15cb216b23",- "size": 415193,+ "version": "0.9.135",+ "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.135/adom-bridge-kicad-v0.9.135.zip",+ "sha256": "5e58616cdda140e14dcdc5d569d8638e979e51c381c6513f484863f5e445e9a7",+ "size": 415353, "verbPrefixes": [ "kicad_" ], "healthEndpoint": "/status",- "released_at": "2026-08-16T20:27:28Z",+ "released_at": "2026-08-16T20:31:11Z", "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png", "languages": [ "Python",
adom-bridge-kicad-v0.9.135.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.134",+ "version": "0.9.135", "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.", "homepage": "https://wiki.adom.inc/adom/adom-bridge", "author": "Adom Inc.",
handlers/demo.py+14−1@@ -420,7 +420,20 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict: "'Pads 12' in the status bar — proof the footprints loaded"], "raw": r} if step == "board3d":- import time; time.sleep(2)+ # Wait for the PCB editor to actually be findable — the board beat can+ # return while pcbnew is mid-transition (title swap / repaint), and the+ # 3D open's precheck then misses it (5/6 flake, 2026-08-16).+ import time+ try:+ from .kicad_ui import _find_all_kicad_windows+ for _ in range(15):+ if any("pcb editor" in (w.get("title") or "").lower()+ for w in _find_all_kicad_windows()):+ break+ time.sleep(1)+ except Exception:+ pass+ time.sleep(2) r = handle_open_3d_viewer(kicad_info, {"editor": "pcb"}) return {"ok": bool(r.get("success")), "window": "3D Viewer", "title": "3/6 · The whole board in 3D",