{"adoption": {"forks": 41, "observed_at": "2026-08-28T04:04:10.337280+00:00", "stars": 1262}, "canonical_url": "https://ross.abutalabs.com/products/ease", "card": {"archived": false, "artifact_type": "library", "description": "It's magic.", "domain": ["mobile-development", "graphics"], "enriched": true, "function": ["animation", "state-management"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["roberthein/Ease"], "name": "roberthein/Ease", "platform": [], "pushed_at": "2020-07-14T19:30:10+00:00", "repo": "roberthein/Ease", "stars": 1262, "tags": ["spring-animation", "observer-pattern", "uikit", "scenekit", "event-driven", "ios", "swift", "mobile"], "topics": ["swift", "ease", "easing", "event", "events", "animation", "animations", "system", "observe", "observer", "observer-pattern", "observable", "observables", "spring", "scenekit", "gyroscope", "uiscrollview", "swift5", "swift-5", "spring-animation"], "urls": [], "use_cases": ["animate view positions with spring physics in iOS", "add spring behavior to any value change in Swift", "create gesture-following animations that update in real time", "animate SceneKit 3D objects with springs", "observe value changes and drive animations from them"], "what_it_is": "Ease is a Swift library providing an event-driven animation system that combines the observer pattern with custom spring animations. It lets you animate any value type with natural spring behavior, updating trajectories dynamically as target values change.", "when_to_avoid": ["you need cross-platform or Android animations", "your project targets platforms beyond iOS 9+ UIKit/SceneKit", "you need keyframe or timeline-based animation rather than springs"], "when_to_choose": ["you need spring animations on arbitrary value types in iOS apps", "you want animation targets that update fluidly during gestures", "you prefer a lightweight observer-based animation API over heavy frameworks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ease", "repo": "roberthein/Ease", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "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:04:10.337280+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:10.337280+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:04:14.965317+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7aa0f087725af35c19e83f0981567f474cebe64b3e4837baaf331df4e2d8e83f", "fetched_at": "2026-08-28T04:04:10.337280+00:00", "kind": "readme", "missing": false, "url": "https://github.com/roberthein/Ease"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 3185, "days_push": 2241, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}