{"adoption": {"forks": 285, "observed_at": "2026-08-28T04:04:47.332917+00:00", "stars": 1460}, "canonical_url": "https://ross.abutalabs.com/products/batfish", "card": {"archived": false, "artifact_type": "service", "description": "Batfish is a network configuration analysis tool that can find bugs and guarantee the correctness of (planned or current) network configurations. It enables network engineers to rapidly and safely evolve their network, without fear of outages or security breaches.", "domain": ["networking", "security"], "enriched": true, "function": ["security", "testing", "parser", "configuration-management", "developer-tools"], "health_score": 93, "homepage": "http://www.batfish.org", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["batfish/batfish"], "name": "batfish/batfish", "platform": ["jvm", "python", "self-hosted"], "pushed_at": "2026-08-26T18:44:55+00:00", "repo": "batfish/batfish", "stars": 1460, "tags": ["network-verification", "network-configuration-analysis", "intent-based-networking", "pre-deployment-validation", "network-automation", "automation", "devops", "docker"], "topics": ["network", "configuration", "configuration-parser", "configuration-analysis", "network-verification", "network-analysis", "network-security", "network-validation", "network-automation"], "urls": [], "use_cases": ["validate network configuration changes before deployment", "find bugs and policy violations in router and firewall configs", "verify end-to-end reachability and failure impact across the network", "check ACL and firewall rule changes cause no collateral damage", "compare configurations from different vendors for functional equivalence", "audit configuration compliance for SSH, AAA, NTP, and MTU settings"], "what_it_is": "Batfish is an open-source network configuration analysis tool that builds complete models of network behavior from device configurations to find bugs and guarantee correctness of planned or current networks. It requires no direct device access and validates security, reliability, and compliance properties before deployment.", "when_to_avoid": ["you need real-time traffic monitoring or packet capture rather than configuration analysis", "your network devices' configurations are not available or are heavily generated outside standard vendor syntax"], "when_to_choose": ["you need pre-deployment validation of network changes in CI/CD workflows", "you want correctness guarantees for reachability, security, and compliance without touching live devices", "you manage multi-vendor networks and need configuration analysis"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/batfish", "repo": "batfish/batfish", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "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:47.332917+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:47.332917+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:35:23.623473+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c172b65e54fe4ad83d1b62323ff3055d41f0c9b8efa9d832d9431395447a8149", "fetched_at": "2026-08-28T04:04:47.332917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/batfish/batfish"}, {"content_hash": "18af1e818731fb472a861b7d86bda857225d4c53f98fdd79d738ac4e54f29479", "fetched_at": "2026-08-29T11:44:06.091224+00:00", "kind": "homepage", "missing": false, "url": "http://www.batfish.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 8}, "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": 4291, "days_push": 7, "days_rel": 422, "gap_med": null, "n_releases_24m": 1}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}