{"adoption": {"forks": 594, "observed_at": "2026-08-28T04:06:56.531596+00:00", "stars": 2492}, "canonical_url": "https://ross.abutalabs.com/products/napalm", "card": {"archived": false, "artifact_type": "library", "description": "Network Automation and Programmability Abstraction Layer with Multivendor support", "domain": ["networking", "developer-tools", "infrastructure-as-code"], "enriched": true, "function": ["networking", "configuration-management", "developer-tools", "workflow-automation"], "health_score": 98, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["napalm-automation/napalm"], "name": "napalm-automation/napalm", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-08-12T20:44:53+00:00", "repo": "napalm-automation/napalm", "stars": 2492, "tags": ["network-automation", "multivendor", "unified-api", "router-configuration", "ansible-integration", "saltstack-integration", "automation"], "topics": [], "urls": [], "use_cases": ["manage network device configurations from multiple vendors with one API", "retrieve operational data from routers and switches programmatically", "push configuration changes to network devices via Python", "integrate network automation into Ansible or SaltStack", "write vendor-agnostic network automation scripts", "compare running and candidate configurations on network devices"], "what_it_is": "NAPALM is a Python library that provides a unified API for interacting with network devices from multiple vendors, such as routers and switches. It abstracts vendor-specific differences to support configuration manipulation and data retrieval across different network operating systems.", "when_to_avoid": ["you need a GUI or turnkey network management system rather than a programmable library", "your devices are not among the supported network operating systems or have known caveats", "you only manage a single vendor and prefer that vendor's native SDK"], "when_to_choose": ["you need to automate devices from multiple network vendors through a single consistent API", "you want to integrate network device management into Ansible, SaltStack, or Nornir workflows", "you are building Python tooling for configuration deployment and state retrieval on routers and switches"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/napalm", "repo": "napalm-automation/napalm", "role": "main", "score": 86}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "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:56.531596+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.531596+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:27:46.200488+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3adb25e892a906a1e6dababe92f31aa40be676d134dcb8f385cbf2e005c6976", "fetched_at": "2026-08-28T04:06:56.531596+00:00", "kind": "readme", "missing": false, "url": "https://github.com/napalm-automation/napalm"}, {"content_hash": "c85052276d9ccea34f17a8e90508c6a0211b748cd49e11148cbd9a009b66caa5", "fetched_at": "2026-08-29T10:09:52.037062+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/napalm/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 63}, "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": 4181, "days_push": 21, "days_rel": 37, "gap_med": 356, "n_releases_24m": 2}, "score": 86, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}