{"id":50170171,"url":"https://github.com/kidandcat/fragua","last_synced_at":"2026-05-27T00:02:07.884Z","repository":{"id":356877455,"uuid":"1230824500","full_name":"kidandcat/fragua","owner":"kidandcat","description":"AI-native PCB design tool. The agent designs the board, the human watches and steers. Schematic → routing → fab-ready zip in one loop.","archived":false,"fork":false,"pushed_at":"2026-05-24T22:32:48.000Z","size":993,"stargazers_count":0,"open_issues_count":12,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-24T23:30:00.943Z","etag":null,"topics":["agent","ai","autorouter","eda","gerber","jlcpcb","kicad-alternative","mit-license","pcb","placement","rust","tauri"],"latest_commit_sha":null,"homepage":"https://kidandcat.github.io/fragua/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kidandcat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-06T11:03:20.000Z","updated_at":"2026-05-24T22:32:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kidandcat/fragua","commit_stats":null,"previous_names":["kidandcat/fragua"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/kidandcat/fragua","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidandcat%2Ffragua","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidandcat%2Ffragua/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidandcat%2Ffragua/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidandcat%2Ffragua/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kidandcat","download_url":"https://codeload.github.com/kidandcat/fragua/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidandcat%2Ffragua/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33543973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"ssl_error","status_checked_at":"2026-05-26T15:22:15.568Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","ai","autorouter","eda","gerber","jlcpcb","kicad-alternative","mit-license","pcb","placement","rust","tauri"],"created_at":"2026-05-24T23:00:59.581Z","updated_at":"2026-05-27T00:02:07.844Z","avatar_url":"https://github.com/kidandcat.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fragua\n\n[![CI](https://github.com/kidandcat/fragua/actions/workflows/ci.yml/badge.svg)](https://github.com/kidandcat/fragua/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-d6905b.svg)](LICENSE)\n[![Landing](https://img.shields.io/badge/landing-kidandcat.github.io%2Ffragua-d6905b)](https://kidandcat.github.io/fragua/)\n\nAI-native PCB design tool. The agent does the work, the human watches and steers.\n\n- 🌐 Landing: \u003chttps://kidandcat.github.io/fragua/\u003e\n- 🧭 [VISION.md](VISION.md) — what we are building and why\n- 🏗️ [ARCHITECTURE.md](ARCHITECTURE.md) — the stack and crate layout\n- 🤝 [CONTRIBUTING.md](CONTRIBUTING.md) — how to help\n\n## Status\n\nEnd-to-end agent loop, schematic → board → fab-ready zip:\n\n- `pcb-core`: project model (schematic, board, library, pours), nm\n  fixed-point geometry, tokio broadcast event bus, JSON persistence\n  (`.fragua` files; legacy `.json` still loads).\n- `pcb-script`: line-oriented agent DSL — `lib`, `sym`, `net`, `class`,\n  `palette`, `place`, `auto-place`, `route`, `erc`, `drc`, `auto-pour`,\n  `pack`. The full reference is printed at app launch and served at\n  `GET /`.\n- `pcb-router`: A* on a 2-layer grid + rip-up-and-reroute + negotiated\n  congestion + Steiner-ish multi-source. Honours per-net `NetClass`\n  for trace width / clearance.\n- `pcb-placer`: simulated annealing on HPWL + soft gap penalty +\n  rasterised pad-bbox congestion proxy.\n- `pcb-drc`: pad/trace clearance, drill, edge clearance, narrow trace,\n  routing efficiency. Per-net class overrides supported.\n- `pcb-erc`: floating pin/net, duplicate pin, orphan symbol, phantom\n  net; role-based: multiple drivers, unpowered power net, undriven\n  input. Heuristic: missing decoupling cap, missing I²C pull-up.\n- `pcb-fab`: `Provider { Jlcpcb, Pcbway, Generic }` + manufacturing-DRC\n  (min trace, drill, annular ring, board size) + per-provider BOM and\n  CPL formats + `pack(...)` that ships a single ready-to-upload `.zip`.\n- `pcb-gerber`: RS-274X writer (rounded outlines emit arcs), Excellon\n  drill files, BOM + pick-and-place CSV.\n- `pcb-render`: Board → SVG. Substrate (with rounded corners), copper,\n  silkscreen (Hershey strokes; auto-relocation when a label would\n  spill off the outline), DRC marker overlay.\n- `src-tauri` + `frontend`: Tauri 2 shell. Hosts a stateless local HTTP\n  API on `127.0.0.1:7878` (`POST /script`, `POST /save`, `GET /` for\n  the script reference). Frontend pans/zooms an SVG of the live state\n  and surfaces the activity log.\n\n`cargo test --workspace` is green.\n\n## Install\n\nOne-liner (macOS arm64/x64, Linux x64):\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/kidandcat/fragua/master/scripts/install.sh | sh\n```\n\nDrops the `fragua` binary in `/usr/local/bin` (or `~/.local/bin` if it\ncan't write there). Windows users: grab `fragua-\u003cver\u003e-windows-x64.zip`\nfrom the [releases page](https://github.com/kidandcat/fragua/releases/latest).\n\nThen just tell your AI to design the hardware using the `fragua` CLI —\nit launches the window, exposes the HTTP script API on\n`127.0.0.1:7878`, and the agent drives the rest.\n\n## Run it\n\n```sh\n# Build the frontend bundle once (release build embeds it).\nnpm --prefix frontend install\nnpm --prefix frontend run build\n\n# Run the desktop app.\ncargo run --release --bin fragua\n\n# …or open an existing project:\ncargo run --release --bin fragua /path/to/project.fragua\n```\n\nThe window opens and the local HTTP API starts on `127.0.0.1:7878`.\n\n## Drive it from an agent\n\nStateless HTTP — every request is independent. From any tool that can\nmake HTTP calls (Claude Code, GPT, a shell loop):\n\n```sh\n# Discover the full action surface.\ncurl -s http://127.0.0.1:7878/\n\n# Run a multi-line script.\ncurl -s http://127.0.0.1:7878/script \\\n  -H 'content-type: application/json' \\\n  -d '{\"script\": \"outline 80 30 radius=2\\nstatus\"}'\n\n# Persist when launched without a file argument.\ncurl -s http://127.0.0.1:7878/save \\\n  -H 'content-type: application/json' \\\n  -d '{\"path\": \"/tmp/board.fragua\"}'\n```\n\nReplies are `text/plain`: per-line outcomes in the form\n`[L\u003cn\u003e ok|FAIL \u003ctool\u003e] \u003ctext\u003e`, plus a warning when the session is\nmemory-only.\n\n## End-to-end recipe\n\n```text\nclass ground pour=both\nclass power width=0.4\n\nsym U1 ic key=esp32_s3_zero\n  pin 1 L 3V3 role=power_in\n  pin 2 L GND role=power_in\n  ...\nsym C1 capacitor key=c_0603 lcsc=C14663\nsym R1 resistor key=r_0603 lcsc=C25804\n\nnet GND  U1.GND C1.2 R1.2 class=ground\nnet +3V3 U1.3V3 C1.1 class=power\n\nerc\n\npalette U1 esp32_s3_zero\npalette C1 c_0603 value=100nF\npalette R1 r_0603 value=10k\nplace U1 25 15\nplace C1 35 15\nplace R1 35 25\n\nauto-place R1 C1 seed=42\nroute\npack fab=jlcpcb out=/tmp\n```\n\nThe final line writes `/tmp/\u003cproject\u003e-jlcpcb.zip` ready to upload.\n\u003c/content\u003e\n\u003c/invoke\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkidandcat%2Ffragua","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkidandcat%2Ffragua","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkidandcat%2Ffragua/lists"}