{"adoption": {"forks": 228, "observed_at": "2026-08-28T04:08:13.042421+00:00", "stars": 3651}, "canonical_url": "https://ross.abutalabs.com/products/atopile", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️", "domain": ["hardware", "embedded-systems", "developer-tools"], "enriched": true, "function": ["compiler", "programming-language", "developer-tools", "editor", "cli"], "health_score": 89, "homepage": "https://atopile.io", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["atopile/atopile"], "name": "atopile/atopile", "platform": ["python", "cli", "cross-platform", "editor-plugin"], "pushed_at": "2026-06-13T02:58:22+00:00", "repo": "atopile/atopile", "stars": 3651, "tags": ["eda", "electronics-design", "pcb", "kicad", "hardware-description-language", "vscode-extension", "circuit-design", "automation"], "topics": ["cad", "eda", "electronics", "agent", "ai"], "urls": [], "use_cases": ["design circuit boards with code", "reuse hardware modules like software libraries", "automatically pick electronic components from parametric specs", "validate electronics designs with assertions and tolerances", "version control and collaborate on hardware designs", "generate KiCad PCB layouts from declarative files"], "what_it_is": "atopile is a language, compiler, and toolchain for designing electronic circuit boards as code using declarative .ato files. It provides design reuse, validation, version control, and parametric component selection, integrating with KiCad for PCB layout.", "when_to_avoid": ["you need a traditional GUI schematic capture and layout workflow", "your EDA flow is built around Altium, Eagle, or other non-KiCad tools", "you need mature, industry-proven EDA tooling for production-critical designs"], "when_to_choose": ["you want software-like workflows (reuse, versioning, review) for electronics design", "you prefer declarative text-based circuit definitions over schematic capture", "you use KiCad and want automated component selection and constraint checking"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/atopile", "repo": "atopile/atopile", "role": "main", "score": 72}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:13.042421+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:31:41.160700+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c256799b7bbd59d046c732ff552bf5ac7d0ad256465a3aa84b0737fbfc97d6d1", "fetched_at": "2026-08-28T04:08:13.042421+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atopile/atopile"}, {"content_hash": "93179bc8299d9513705e876b90ddeb2290477502199b79c97bec263bfab62866", "fetched_at": "2026-08-29T09:25:56.282872+00:00", "kind": "homepage", "missing": false, "url": "https://atopile.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 87, "longevity": 70, "rhythm": 54}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 988, "days_push": 81, "days_rel": 225, "gap_med": 1, "n_releases_24m": 70}, "score": 72, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}