{"adoption": {"forks": 539, "observed_at": "2026-08-28T04:07:18.229312+00:00", "stars": 2757}, "canonical_url": "https://ross.abutalabs.com/products/annotator", "card": {"archived": false, "artifact_type": "library", "description": "Annotation tools for the web. Select text, images, or (nearly) anything else, and add your notes.", "domain": ["web-development", "frontend", "developer-tools", "education"], "enriched": true, "function": ["ui-components", "plugin-system", "auth", "authorization"], "health_score": 66, "homepage": "https://annotatorjs.com/", "language": "JavaScript", "license": "NOASSERTION", "license_family": "other", "maturity": "experimental", "member_repos": ["openannotation/annotator"], "name": "openannotation/annotator", "platform": ["browser"], "pushed_at": "2026-04-11T19:53:16+00:00", "repo": "openannotation/annotator", "stars": 2757, "tags": ["annotation", "web-annotation", "text-annotation", "dom-selection", "notes", "highlighting", "annotatorjs", "javascript", "web"], "topics": [], "urls": [], "use_cases": ["add text annotation to any web page", "let users highlight and comment on documents in the browser", "build a collaborative annotation layer for web content", "store user annotations on a remote server", "integrate annotation with an existing login and permissions system", "annotate images on web pages"], "what_it_is": "Annotator is a JavaScript library for building web annotation applications, letting users select text, images, or other page content and attach notes. It provides composable modules for annotation UI, persistence to remote storage, and identity/authorization integration.", "when_to_avoid": ["you need a fully maintained, production-stable library with active support", "you want a turnkey hosted annotation service like Hypothesis", "you need annotation features outside the browser"], "when_to_choose": ["you need an embeddable, composable annotation library rather than a hosted service", "you want pluggable storage, identity, and authorization modules", "you are building education, publishing, or research tools where users annotate documents in the browser"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/annotator", "repo": "openannotation/annotator", "role": "main", "score": 57}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "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:07:18.229312+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:18.229312+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:18:49.091224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c67531e712859d93f4550a6547d0178ca3ca57196032e81b5c96fc4643816885", "fetched_at": "2026-08-28T04:07:18.229312+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openannotation/annotator"}, {"content_hash": "3ccd279dab0846047c7abae0a92e8d4cc20aadaf61fb0d550669354a93a9009c", "fetched_at": "2026-08-29T09:56:58.474535+00:00", "kind": "homepage", "missing": false, "url": "https://annotatorjs.com/"}, {"content_hash": "42460916ad3728a25aff4c207b457bd147c7a64f786945a2546d2ab4078ca005", "fetched_at": "2026-08-29T09:56:58.483855+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/docs"}, {"content_hash": "3edb81d39621bc8b3b5d3cd6d89ead871db0d5380b3bd5a1912345649a7a7a08", "fetched_at": "2026-08-29T09:56:58.489309+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/annotator"}, {"content_hash": "e820efce28dc380a37e8fb0630372699f0b7e0794c55ca94e94181e747ce5667", "fetched_at": "2026-08-29T09:56:58.485767+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/releases"}, {"content_hash": "463d39c1aa5b251f888c38deb8905a005f8fcf140489c7e137ae9dabde119c98", "fetched_at": "2026-08-29T09:56:58.487508+00:00", "kind": "site_page", "missing": false, "url": "https://annotatorjs.com/plugins"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 76, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5720, "days_push": 144, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 57, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}