{"adoption": {"forks": 35, "observed_at": "2026-08-28T04:05:08.626220+00:00", "stars": 1591}, "canonical_url": "https://ross.abutalabs.com/products/tornis", "card": {"archived": false, "artifact_type": "library", "description": "Tornis helps you watch and respond to changes in your browser's viewport 🌲", "domain": ["frontend", "web-development", "browser-extensions"], "enriched": true, "function": ["state-management", "developer-tools"], "health_score": 20, "homepage": "https://tornis.robbowen.digital", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["robb0wen/tornis"], "name": "robb0wen/tornis", "platform": ["browser"], "pushed_at": "2023-01-06T01:50:48+00:00", "repo": "robb0wen/tornis", "stars": 1591, "tags": ["viewport-tracking", "scroll-velocity", "mouse-position", "requestanimationframe", "performance-optimization", "javascript"], "topics": [], "urls": [], "use_cases": ["track scroll position and velocity in the browser", "react to mouse cursor movement and velocity", "create parallax and scroll-driven effects", "monitor viewport size changes on resize", "track device orientation and pixel ratio", "optimize scroll/resize handlers for render performance"], "what_it_is": "Tornis is a minimal JavaScript library that watches and tracks the state of the browser's viewport, including mouse position, scroll position and velocity, viewport size, and device orientation. It uses a throttled, requestAnimationFrame-based store so subscribed functions only run when values change and the browser is ready to render.", "when_to_avoid": ["you need a full parallax library with built-in effects", "you're working in a framework with its own reactive state system", "you need server-side or non-browser viewport tracking"], "when_to_choose": ["you need combined viewport state (scroll, mouse, size) in one store", "you want performant, throttled viewport tracking instead of raw event handlers", "you're building scroll- or cursor-driven visual effects in vanilla JS"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tornis", "repo": "robb0wen/tornis", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "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:08.626220+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:08.626220+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:54:45.639314+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "548288c5d5b9533f5f0ffaf0ed7de6c682040bb9913013a196237ec77711a150", "fetched_at": "2026-08-28T04:05:08.626220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/robb0wen/tornis"}, {"content_hash": "adfd566ff6674690bed6b083063041345dcc8cdd396edf8a9d4f796669345f86", "fetched_at": "2026-08-29T11:25:36.068187+00:00", "kind": "homepage", "missing": false, "url": "https://tornis.robbowen.digital"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2666, "days_push": 1336, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}