{"adoption": {"forks": 142, "observed_at": "2026-08-28T04:06:07.784264+00:00", "stars": 2033}, "canonical_url": "https://ross.abutalabs.com/products/fissure", "card": {"archived": false, "artifact_type": "framework", "description": "The RF and reverse engineering framework for everyone. Follow and ★ to show your support!", "domain": ["security", "reverse-engineering", "hardware"], "enriched": true, "function": ["reverse-engineering", "security", "fuzzing", "machine-learning", "plugin-system", "developer-tools"], "health_score": 97, "homepage": "https://twitter.com/FissureRF", "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ainfosec/FISSURE"], "name": "ainfosec/FISSURE", "platform": ["python", "cross-platform"], "pushed_at": "2026-08-25T19:30:14+00:00", "repo": "ainfosec/FISSURE", "stars": 2033, "tags": ["sdr", "rf", "gnuradio", "signal-analysis", "wireless-security", "iq-data", "protocol-reverse-engineering", "tak-integration", "hackrf", "rtl-sdr", "wireless", "automation", "linux", "desktop"], "topics": ["gnuradio", "protocols", "reverse-engineering", "rf", "sdr", "signals", "tools", "bladerf", "hackrf", "rtl-sdr", "usrp", "wifi", "limesdr", "plutosdr", "python", "sdrplay", "scapy", "wireless", "machine-learning"], "urls": [], "use_cases": ["reverse engineer wireless protocols with an SDR", "detect and classify RF signals", "capture and replay IQ recordings", "fuzz radio protocols for vulnerabilities", "geolocate RF emitters", "learn software-defined radio and RF reverse engineering", "coordinate distributed RF sensing nodes"], "what_it_is": "FISSURE is an open-source RF and reverse engineering framework built around software-defined radios, supporting signal detection, classification, protocol discovery, fuzzing, and vulnerability analysis. It serves both operational deployments and research/education, with AI/ML integration and distributed sensor node coordination.", "when_to_avoid": ["you have no SDR hardware (HackRF, RTL-SDR, USRP, etc.)", "you only need simple Wi-Fi auditing rather than broad RF work", "you need a lightweight single-purpose tool instead of a full framework"], "when_to_choose": ["you need an integrated toolkit for SDR-based signal analysis and protocol reverse engineering", "you want RF fuzzing, replay, and geolocation in one framework", "you're teaching or researching SDR and wireless security", "you need TAK integration for tactical RF operations"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/fissure", "repo": "ainfosec/FISSURE", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "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:06:07.784264+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:07.784264+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:59:27.053780+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3276af710c3a600b8b287feb0f995123c73e3916dfe39d708cc465b744c8aa33", "fetched_at": "2026-08-28T04:06:07.784264+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ainfosec/FISSURE"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 34}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1486, "days_push": 8, "days_rel": 224, "gap_med": null, "n_releases_24m": 1}, "score": 76, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}