{"adoption": {"forks": 320, "observed_at": "2026-08-28T04:03:25.506461+00:00", "stars": 1059}, "canonical_url": "https://ross.abutalabs.com/products/grassmarlin", "card": {"archived": true, "artifact_type": "application", "description": "Provides situational awareness of Industrial Control Systems (ICS) and Supervisory Control and Data Acquisition (SCADA) networks in support of network security assessments. #nsacyber", "domain": ["security", "networking"], "enriched": true, "function": ["monitoring", "data-visualization", "networking", "security"], "health_score": 10, "homepage": null, "language": "Java", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["nsacyber/GRASSMARLIN"], "name": "nsacyber/GRASSMARLIN", "platform": ["cross-platform", "jvm"], "pushed_at": "2020-02-24T16:24:07+00:00", "repo": "nsacyber/GRASSMARLIN", "stars": 1059, "tags": ["ics", "scada", "network-discovery", "passive-monitoring", "topology-mapping", "nsa", "industrial-control-systems", "desktop"], "topics": ["ics", "scada", "network", "networking", "monitor", "monitoring", "analysis", "visualization", "ics-scada", "scada-security", "control-systems"], "urls": [], "use_cases": ["map an ICS/SCADA network topology passively", "discover devices on industrial control networks without disrupting operations", "visualize critical infrastructure network layouts for security assessments", "inventory and account for devices on SCADA networks", "generate reports on industrial network security posture"], "what_it_is": "GRASSMARLIN is a Java-based desktop application from NSA that provides IP network situational awareness for Industrial Control Systems (ICS) and SCADA networks. It passively maps and visually displays network topology while performing safe device discovery, accounting, and reporting on cyber-physical systems.", "when_to_avoid": ["you need active scanning or deep packet inspection of industrial protocols", "you require a tool with recent updates and active community support", "you need cloud-based or automated continuous network monitoring"], "when_to_choose": ["you need passive, non-intrusive discovery of ICS/SCADA network devices", "you are conducting a security assessment of industrial control systems", "you want a visual topology map of a cyber-physical network"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/grassmarlin", "repo": "nsacyber/GRASSMARLIN", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "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:03:25.506461+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.506461+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:57:15.672666+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bfdd13fc8a7c9000e1b4aaf822330e03ce27ded9d63b0ef0b4ce71de16a73808", "fetched_at": "2026-08-28T04:03:25.506461+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nsacyber/GRASSMARLIN"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["archived", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3915, "days_push": 2382, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}