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.186: closes #34 Bug B - the cold footprint path no longer requires the user to already have a board; if the machine has none, generate a throwaway one purely to trigger KiCad's plugin scan
5 files changed
+30−7
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.185+0.9.186
adom-bridge-kicad-manifest.json+5−5@@ -1,15 +1,15 @@ { "manifest_version": 1, "name": "kicad",- "version": "0.9.185",- "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.185/adom-bridge-kicad-v0.9.185.zip",- "sha256": "289572d55a9f54487fff3cecba20ad9920f3d72f0b32ba77a15f93b1022a2a54",- "size": 454450,+ "version": "0.9.186",+ "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.186/adom-bridge-kicad-v0.9.186.zip",+ "sha256": "2abae3be4fa6ae7695bb2a7db1aa6f9d2e6a34559f8e4ac40cdf578889f0b25f",+ "size": 454911, "verbPrefixes": [ "kicad_" ], "healthEndpoint": "/status",- "released_at": "2026-08-19T19:00:04Z",+ "released_at": "2026-08-19T19:06:45Z", "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png", "languages": [ "Python",
adom-bridge-kicad-v0.9.186.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.185",+ "version": "0.9.186", "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/show.py+23@@ -159,6 +159,29 @@ def ensure_plugin_ready(kicad_info: dict, waits: int = 14) -> bool: for cand in sorted(docs.glob("adom-*/*.kicad_pcb")) + sorted(docs.glob("*/*.kicad_pcb")): board = str(cand) break+ if not board:+ # WIKI ISSUE #34 (Colby Knox), Bug B: on a box with no board anywhere,+ # the cold path had nothing to open and simply failed - "a user with no+ # board open cannot open the Footprint Editor at all". Generate a+ # throwaway board instead of giving up: it exists only to make KiCad+ # scan its plugin directory, and it costs a few KB in TEMP.+ try:+ import tempfile as _tf+ scratch = _P(_tf.gettempdir()) / "adom-plugin-bootstrap"+ scratch.mkdir(parents=True, exist_ok=True)+ board = str(scratch / "adom-plugin-bootstrap.kicad_pcb")+ if not _os.path.exists(board):+ _P(board).write_text(+ '(kicad_pcb (version 20240108) (generator "adom-bridge")\n'+ ' (general (thickness 1.6))\n'+ ' (paper "A4")\n'+ ' (layers (0 "F.Cu" signal) (31 "B.Cu" signal)\n'+ ' (44 "Edge.Cuts" user))\n'+ ')\n', encoding="utf-8")+ print(f"[show] no board on this machine - generated {board} purely to "+ f"trigger KiCad's plugin scan (issue #34)", file=sys.stderr, flush=True)+ except Exception:+ return False if not board: return False print(f"[show] no plugin bound - opening {board} in the background to bind it",