{"adoption": {"forks": 260, "observed_at": "2026-08-28T04:05:11.158135+00:00", "stars": 1613}, "canonical_url": "https://ross.abutalabs.com/products/nornir", "card": {"archived": false, "artifact_type": "framework", "description": "Pluggable multi-threaded framework with inventory management to help operate collections of devices", "domain": ["networking", "developer-tools", "infrastructure-as-code"], "enriched": true, "function": ["workflow-automation", "plugin-system", "concurrency", "developer-tools"], "health_score": 100, "homepage": "https://nornir.readthedocs.io/", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["nornir-automation/nornir"], "name": "nornir-automation/nornir", "platform": ["python", "cross-platform", "cli"], "pushed_at": "2026-08-26T07:18:38+00:00", "repo": "nornir-automation/nornir", "stars": 1613, "tags": ["network-automation", "inventory-management", "device-configuration", "multi-threaded", "network-devices", "automation"], "topics": [], "urls": [], "use_cases": ["automate configuration of network devices at scale", "run tasks against many routers and switches in parallel", "manage network device inventory from Python", "gather facts and state from network equipment", "push firmware or config changes to device fleets", "replace DSL-based tools like Ansible for network automation"], "what_it_is": "Nornir is a pure Python automation framework for operating collections of network devices, providing pluggable inventory management and multi-threaded task dispatch. Unlike DSL-based tools, everything is controlled directly from Python code.", "when_to_avoid": ["you need a turnkey tool with built-in device connection plugins out of the box", "your team prefers declarative DSL-based automation like Ansible", "you are not comfortable writing Python code"], "when_to_choose": ["you want network automation written purely in Python without a DSL", "you need multi-threaded execution against large device inventories", "you prefer debugging with standard Python tools like pdb", "you want a pluggable framework you can extend with custom plugins"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/nornir", "repo": "nornir-automation/nornir", "role": "main", "score": 87}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/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:05:11.158135+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.158135+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:51:07.325793+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0fb830cc248779d8162bee53deb705457f60be52a293e8c445fffcf84f94615", "fetched_at": "2026-08-28T04:05:11.158135+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nornir-automation/nornir"}, {"content_hash": "889854124682c68a3a74bc4462a3929b25f39dd63a3f2910d2dd34f849a50454", "fetched_at": "2026-08-29T11:23:26.736484+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nornir/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 64}, "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": 3547, "days_push": 7, "days_rel": 31, "gap_med": 570, "n_releases_24m": 2}, "score": 87, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}