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
control-surfaces.svgadded+83@@ -0,0 +1,83 @@+<svg xmlns="http://www.w3.org/2000/svg" width="920" height="560" viewBox="0 0 920 560" font-family="'Segoe UI',Roboto,Helvetica,Arial,sans-serif">+ <defs>+ <marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">+ <path d="M0,0 L10,5 L0,10 z" fill="#64748b"/>+ </marker>+ <style>+ .lbl{fill:#0f172a;font-size:14px;font-weight:600}+ .sub{fill:#475569;font-size:11.5px}+ .pill{fill:#f1f5f9;stroke:#cbd5e1;stroke-width:1}+ .edge{stroke:#64748b;stroke-width:1.6;fill:none}+ .edgeL{fill:#64748b;font-size:11px}+ .surf{fill:#eff6ff;stroke:#3b82f6;stroke-width:1.4}+ .surfT{fill:#1e3a8a;font-size:13px;font-weight:700}+ .kicad{fill:#ecfdf5;stroke:#10b981;stroke-width:1.4}+ @media (prefers-color-scheme: dark){+ .lbl{fill:#e2e8f0}.sub{fill:#94a3b8}.pill{fill:#1e293b;stroke:#334155}+ .surf{fill:#172554;stroke:#3b82f6}.surfT{fill:#bfdbfe}+ .kicad{fill:#052e2b;stroke:#10b981}.edgeL{fill:#94a3b8}+ }+ </style>+ </defs>++ <!-- Cloud / AI -->+ <rect class="pill" x="330" y="18" width="260" height="52" rx="9"/>+ <text class="lbl" x="460" y="40" text-anchor="middle">Claude / Adom Desktop AI</text>+ <text class="sub" x="460" y="58" text-anchor="middle">calls kicad_* verbs over the relay</text>++ <!-- AD -->+ <rect class="pill" x="330" y="100" width="260" height="52" rx="9"/>+ <text class="lbl" x="460" y="122" text-anchor="middle">Adom Desktop (Tauri, user's laptop)</text>+ <text class="sub" x="460" y="140" text-anchor="middle">spawns the bridge · provisions Python · ADOM_BIND_HOST</text>++ <!-- Bridge -->+ <rect class="pill" x="300" y="182" width="320" height="56" rx="9" fill="#fef9c3" stroke="#eab308"/>+ <text class="lbl" x="460" y="206" text-anchor="middle">KiCad Bridge — server.py</text>+ <text class="sub" x="460" y="224" text-anchor="middle">HTTP on 127.0.0.1:{port} · POST /command · GET /status</text>++ <line class="edge" x1="460" y1="70" x2="460" y2="100" marker-end="url(#arrow)"/>+ <line class="edge" x1="460" y1="152" x2="460" y2="182" marker-end="url(#arrow)"/>++ <!-- four surfaces -->+ <g>+ <rect class="surf" x="24" y="300" width="200" height="86" rx="9"/>+ <text class="surfT" x="124" y="322" text-anchor="middle">1 · kicad-cli</text>+ <text class="sub" x="124" y="342" text-anchor="middle">headless subprocess</text>+ <text class="sub" x="124" y="358" text-anchor="middle">DRC/ERC, export</text>+ <text class="sub" x="124" y="374" text-anchor="middle">gerber/pdf/svg/step/bom</text>++ <rect class="surf" x="248" y="300" width="200" height="86" rx="9"/>+ <text class="surfT" x="348" y="322" text-anchor="middle">2 · KiCad IPC (kipy)</text>+ <text class="sub" x="348" y="342" text-anchor="middle">KiCad 9+ API</text>+ <text class="sub" x="348" y="358" text-anchor="middle">board/schematic</text>+ <text class="sub" x="348" y="374" text-anchor="middle">introspection + place</text>++ <rect class="surf" x="472" y="300" width="200" height="86" rx="9"/>+ <text class="surfT" x="572" y="322" text-anchor="middle">3 · Embedded Python</text>+ <text class="sub" x="572" y="342" text-anchor="middle">adom_bridge.py in-proc</text>+ <text class="sub" x="572" y="358" text-anchor="middle">JSON-RPC on wx thread</text>+ <text class="sub" x="572" y="374" text-anchor="middle">ping/frames/wm_command</text>++ <rect class="surf" x="696" y="300" width="200" height="86" rx="9"/>+ <text class="surfT" x="796" y="322" text-anchor="middle">4 · Win32 / UIA</text>+ <text class="sub" x="796" y="342" text-anchor="middle">user32 ctypes</text>+ <text class="sub" x="796" y="358" text-anchor="middle">WM_COMMAND, SendInput</text>+ <text class="sub" x="796" y="374" text-anchor="middle">PrintWindow screenshots</text>+ </g>++ <line class="edge" x1="380" y1="238" x2="124" y2="300" marker-end="url(#arrow)"/>+ <line class="edge" x1="430" y1="238" x2="348" y2="300" marker-end="url(#arrow)"/>+ <line class="edge" x1="490" y1="238" x2="572" y2="300" marker-end="url(#arrow)"/>+ <line class="edge" x1="540" y1="238" x2="796" y2="300" marker-end="url(#arrow)"/>++ <!-- KiCad -->+ <rect class="kicad" x="180" y="452" width="560" height="72" rx="10"/>+ <text class="lbl" x="460" y="478" text-anchor="middle">KiCad 7–10 on Windows</text>+ <text class="sub" x="460" y="498" text-anchor="middle">project manager · eeschema · pcbnew · symbol/footprint editors · 3D viewer · kicad-cli</text>+ <text class="sub" x="460" y="514" text-anchor="middle">host app — the bridge DETECTS it, never bundles it</text>++ <line class="edge" x1="124" y1="386" x2="300" y2="452" marker-end="url(#arrow)"/>+ <line class="edge" x1="348" y1="386" x2="410" y2="452" marker-end="url(#arrow)"/>+ <line class="edge" x1="572" y1="386" x2="510" y2="452" marker-end="url(#arrow)"/>+ <line class="edge" x1="796" y1="386" x2="620" y2="452" marker-end="url(#arrow)"/>+</svg>