{"adoption": {"forks": 563, "observed_at": "2026-08-28T04:07:00.247097+00:00", "stars": 2547}, "canonical_url": "https://ross.abutalabs.com/products/edl", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Inofficial Qualcomm Firehose / Sahara / Streaming / Diag Tools :)", "domain": ["security", "reverse-engineering", "embedded-systems", "hardware", "developer-tools"], "enriched": true, "function": ["security", "reverse-engineering", "cli", "developer-tools"], "health_score": 78, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["bkerler/edl"], "name": "bkerler/edl", "platform": ["windows", "python", "cli", "cross-platform"], "pushed_at": "2026-08-12T11:22:42+00:00", "repo": "bkerler/edl", "stars": 2547, "tags": ["qualcomm", "firehose", "sahara", "edl-mode", "firmware-dumping", "android", "memory-dump", "diag", "linux", "macos"], "topics": ["firehose", "sahara", "streaming", "diag", "qualcomm"], "urls": [], "use_cases": ["dump firmware from a qualcomm smartphone", "flash a bricked android phone in edl mode", "read device memory over firehose", "unbrick a oneplus or xiaomi snapdragon device", "autodetect sahara loader for a qualcomm chipset", "communicate with qualcomm diag mode"], "what_it_is": "A Python CLI tool for communicating with Qualcomm devices in EDL (Emergency Download) mode via the Sahara, Firehose, Streaming, and Diag protocols. It enables flashing, firmware dumping, memory reading, and loader autodetection on Snapdragon-based smartphones.", "when_to_avoid": ["your device uses MediaTek or another non-Qualcomm chipset", "you need a polished GUI flashing tool", "you are unwilling to comply with the GPLv3 license"], "when_to_choose": ["you need low-level EDL access to a Qualcomm device for flashing or dumping", "you work with newer Snapdragon chips needing Sahara V3 support", "you want an open-source alternative to vendor flashing tools"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/edl", "repo": "bkerler/edl", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "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:07:00.247097+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:00.247097+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:24:34.471572+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "206519085fdbed1c40682d0a68fe2d17194d2a76d8d464e1e2529116eaa69658", "fetched_at": "2026-08-28T04:07:00.247097+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bkerler/edl"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 8}, "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": 2842, "days_push": 21, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}