{"adoption": {"forks": 266, "observed_at": "2026-08-28T04:04:04.502151+00:00", "stars": 1232}, "canonical_url": "https://ross.abutalabs.com/products/rauc", "card": {"archived": false, "artifact_type": "application", "description": "Safe and secure software updates for embedded Linux", "domain": ["embedded-systems", "iot", "operating-systems", "security"], "enriched": true, "function": ["security", "cryptography", "deployment", "cli", "configuration-management"], "health_score": 98, "homepage": "https://rauc.io", "language": "C", "license": "LGPL-2.1", "license_family": "copyleft", "maturity": "stable", "member_repos": ["rauc/rauc"], "name": "rauc/rauc", "platform": ["embedded", "cli", "iot"], "pushed_at": "2026-08-24T16:43:30+00:00", "repo": "rauc/rauc", "stars": 1232, "tags": ["ota-updates", "firmware-update", "a-b-partitioning", "update-bundles", "bootloader-integration", "dbus-api", "delta-updates", "embedded-linux", "devops", "linux"], "topics": ["embedded", "linux", "update", "client", "iot", "rauc", "ota", "fota", "software-update", "firmware-update", "firmware-updates", "ota-firmware-updates"], "urls": [], "use_cases": ["update firmware on embedded linux devices over the air", "create signed update bundles for an A/B root filesystem setup", "stream updates over https without intermediate storage on the target", "integrate OTA update management into a Yocto or Buildroot based device", "verify cryptographic signatures of firmware update packages", "perform atomic bootloader and partition updates on eMMC or UBI", "control update installation and progress from a custom application via D-Bus"], "what_it_is": "RAUC (Robust Auto-Update Controller) is an open-source update client and host tool for embedded Linux systems that manages fail-safe, atomic, cryptographically signed firmware/software updates. It supports A/B redundant setups, multiple bootloaders, HTTP(S) streaming, and bundle creation and verification.", "when_to_avoid": ["you need updates for non-Linux embedded platforms like RTOS or microcontrollers", "you want a fully managed cloud OTA service rather than a self-hosted update client", "your target is a desktop or server Linux distribution with package-based updates"], "when_to_choose": ["you maintain embedded Linux devices needing fail-safe A/B or recovery updates", "you require X.509 signed and optionally encrypted update bundles", "you need support for diverse storage like SquashFS, UBI, eMMC boot partitions, or raw flash", "you want bootloader integration with u-boot, barebox, grub, or EFI", "you need a D-Bus API for application-level update control"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/rauc", "repo": "rauc/rauc", "role": "main", "score": 87}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.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:04:04.502151+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:04.502151+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:22:22.846990+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fba0aafd720f5968988bb230b57b37da6dd5ea2125cf9ccf67833226d274ceae", "fetched_at": "2026-08-28T04:04:04.502151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rauc/rauc"}, {"content_hash": "e4783f482874dc182375645596ef80308a18120af5e12a33fea33962c6109b88", "fetched_at": "2026-08-29T12:21:55.027148+00:00", "kind": "homepage", "missing": false, "url": "https://rauc.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 65}, "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": 4134, "days_push": 9, "days_rel": 159, "gap_med": 74.5, "n_releases_24m": 5}, "score": 87, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}