{"adoption": {"forks": 653, "observed_at": "2026-08-28T04:05:34.663792+00:00", "stars": 1776}, "canonical_url": "https://ross.abutalabs.com/products/speeduino", "card": {"archived": false, "artifact_type": "application", "description": "Speeduino - Arduino based engine management", "domain": ["embedded-systems", "hardware"], "enriched": true, "function": ["embedded"], "health_score": 98, "homepage": "http://speeduino.com", "language": "C++", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "stable", "member_repos": ["speeduino/speeduino"], "name": "speeduino/speeduino", "platform": ["embedded", "iot"], "pushed_at": "2026-08-26T13:40:11+00:00", "repo": "speeduino/speeduino", "stars": 1776, "tags": ["ecu", "engine-management", "firmware", "automotive", "arduino", "fuel-injection", "ignition-control", "engine-tuning", "diy-hardware"], "topics": [], "urls": [], "use_cases": ["open source ECU firmware for a car or engine swap", "DIY engine management system based on Arduino", "control fuel injection and ignition timing on a budget", "low-cost alternative to commercial aftermarket ECUs", "build and tune my own programmable engine computer", "standalone ECU for a hobbyist or motorsport project"], "what_it_is": "Speeduino is an open-source engine management system (ECU) firmware built on the Arduino platform, controlling fuel injection and ignition for internal combustion engines. It ships hardware designs, firmware, and supporting software under open licenses as a low-cost, DIY-friendly alternative to commercial aftermarket ECUs.", "when_to_avoid": ["you need OEM-level diagnostics, emissions compliance, or factory warranty-safe engine control", "you require certified, safety-critical engine management for a road-legal vehicle without expert tuning", "you are not comfortable assembling hardware, flashing firmware, and tuning engine parameters yourself"], "when_to_choose": ["you want an affordable, hackable open-source ECU for a hobbyist or enthusiast build", "you want full control over fuel and ignition maps on Arduino-compatible hardware", "you value a large community, extensive wiki, and a design with 1000+ real installations"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/speeduino", "repo": "speeduino/speeduino", "role": "main", "score": 89}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "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:05:34.663792+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:34.663792+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:25:18.955189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f371435ad28a1b549508298179966138f5a4f79e7682d61cef5187cdfce0bc", "fetched_at": "2026-08-28T04:05:34.663792+00:00", "kind": "readme", "missing": false, "url": "https://github.com/speeduino/speeduino"}, {"content_hash": "ed73b1ea7681c6e73cb82b2cbf905b42efbd227f342c76adaa6487e29d32fbdc", "fetched_at": "2026-08-29T11:03:44.317564+00:00", "kind": "homepage", "missing": false, "url": "http://speeduino.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 69}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4958, "days_push": 7, "days_rel": 131, "gap_med": 67.5, "n_releases_24m": 9}, "score": 89, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}