{"adoption": {"forks": 1486, "observed_at": "2026-08-28T04:10:42.331514+00:00", "stars": 10555}, "canonical_url": "https://ross.abutalabs.com/products/knockout", "card": {"archived": false, "artifact_type": "library", "description": "Knockout makes it easier to create rich, responsive UIs with JavaScript", "domain": ["web-development", "frontend"], "enriched": true, "function": ["frontend-framework", "state-management", "templating", "ui-components"], "health_score": 82, "homepage": "http://knockoutjs.com/", "language": "JavaScript", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["knockout/knockout"], "name": "knockout/knockout", "platform": ["browser", "cross-platform"], "pushed_at": "2026-03-25T05:16:23+00:00", "repo": "knockout/knockout", "stars": 10555, "tags": ["mvvm", "data-binding", "observables", "javascript", "declarative-bindings", "spa", "nodejs"], "topics": ["knockout", "javascript", "mvvm", "data-binding"], "urls": [], "use_cases": ["keep dom in sync with javascript data model automatically", "build rich responsive single-page application uis with mvvm", "bind form fields to viewmodel with two-way data binding", "render nested lists and templates from observable arrays", "create custom declarative bindings and custom elements", "maintain legacy javascript app with old browser support"], "what_it_is": "Knockout is a JavaScript MVVM library that keeps your UI automatically in sync with an underlying data model using observables and declarative bindings. It is small, dependency-free, works with any server or framework, and includes templating and component support.", "when_to_avoid": ["you're starting a new modern SPA - React, Vue, or Svelte have larger ecosystems", "you need server-side rendering or a virtual DOM", "you want a batteries-included framework with routing, state, and build tooling", "you need strong TypeScript-first tooling"], "when_to_choose": ["you want lightweight, dependency-free data binding without a full framework", "you need to support very old browsers like IE6+", "you're maintaining or extending an existing Knockout codebase", "you prefer explicit MVVM viewmodels over component-based frameworks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/knockout", "repo": "knockout/knockout", "role": "main", "score": 80}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "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:10:42.331514+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.331514+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:18:32.503953+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "276e5f5b0c67b1c829ea93429d6655803c034ce84433c7b08bf38cea9fc85772", "fetched_at": "2026-08-28T04:10:42.331514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/knockout/knockout"}, {"content_hash": "7c52b4abbd6b6791992b88f705d7271ee4716d20d6e2dce59a245734fbaae01e", "fetched_at": "2026-08-29T08:18:06.388119+00:00", "kind": "homepage", "missing": false, "url": "http://knockoutjs.com/"}, {"content_hash": "e36dd9a56c8750a4b5d741291e852e05dc049f53ee10646b550057064df262c8", "fetched_at": "2026-08-29T08:18:06.399386+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/introduction.html"}, {"content_hash": "65233a65b9de4bd4a630793ed036d70cd1c0c73d0354e20fe4fe3db38a2b002a", "fetched_at": "2026-08-29T08:18:06.401226+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/observables.html"}, {"content_hash": "17485ccd9734d405ea560df4950839f7416d591217bfcf28a321f9842b7cc29b", "fetched_at": "2026-08-29T08:18:06.403086+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/documentation/links.html"}, {"content_hash": "436726b03c3fc5e79bddf4d55a065b11476065e92033da4bde1a1866e09e73b3", "fetched_at": "2026-08-29T08:18:06.405170+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/knockout"}, {"content_hash": "08f3f88251e73e8b907a78faf8e0636b07f240311b1b9810138e54b56fe63a9c", "fetched_at": "2026-08-29T08:18:06.397354+00:00", "kind": "site_page", "missing": false, "url": "https://knockoutjs.com/downloads/index.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 74, "longevity": 100, "rhythm": 76}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5903, "days_push": 161, "days_rel": 161, "gap_med": 16, "n_releases_24m": 2}, "score": 80, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}