{"adoption": {"forks": 1728, "observed_at": "2026-08-28T04:11:32.657849+00:00", "stars": 22488}, "canonical_url": "https://ross.abutalabs.com/products/hero", "card": {"archived": false, "artifact_type": "library", "description": "Elegant transition library for iOS & tvOS", "domain": ["mobile-development", "frontend", "web-design"], "enriched": true, "function": ["animation", "ui-components", "mobile-framework"], "health_score": 33, "homepage": "https://HeroTransitions.github.io/Hero/", "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["HeroTransitions/Hero"], "name": "HeroTransitions/Hero", "platform": [], "pushed_at": "2025-01-23T20:27:30+00:00", "repo": "HeroTransitions/Hero", "stars": 22488, "tags": ["view-controller-transitions", "uikit", "shared-element-transitions", "interactive-animations", "tvos", "cocoapods", "swift-package-manager", "ios", "swift", "mobile"], "topics": ["animation", "custom-transitions", "swift", "ios", "ios-animation", "ios-transition", "material-design", "transition-animation", "animations", "ios-swift", "ios-lib", "hero", "xcode", "ios-framework", "carthage", "swiftpm", "layout"], "urls": [], "use_cases": ["create custom view controller transitions on iOS", "implement shared element transitions between screens", "add interactive swipe-to-dismiss animations", "apply Material Design motion durations to transitions", "animate modal, navigation, and tab bar transitions declaratively"], "what_it_is": "Hero is a Swift library for building iOS and tvOS view controller transitions with a declarative API layered on top of UIKit's transition system. It matches views by heroID between source and destination screens (like Keynote's Magic Move) and supports gesture-driven interactive animations.", "when_to_avoid": ["your app is built with SwiftUI and you don't touch UIKit view controllers", "you need transitions on Android or cross-platform frameworks", "you only need simple view animations within a single screen rather than controller transitions"], "when_to_choose": ["you build UIKit-based iOS or tvOS apps and want elegant custom transitions without fighting UIKit's transition APIs", "you need shared-element (Magic Move style) animations matched by view IDs", "you want gesture-driven, interruptible transitions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/hero", "repo": "HeroTransitions/Hero", "role": "main", "score": 24}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "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:11:32.657849+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:32.657849+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:57:09.636396+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "edebc6feb9dcf3487b56f0ced583a464c748cea46b25f9a711048c319d2a52f6", "fetched_at": "2026-08-28T04:11:32.657849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/HeroTransitions/Hero"}, {"content_hash": "7e2c58fe56aefdd251cadb3b99136a442b27e47fef41b946a90a30aec46ffba4", "fetched_at": "2026-08-29T07:55:21.517249+00:00", "kind": "homepage", "missing": false, "url": "https://HeroTransitions.github.io/Hero/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 3, "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": 3569, "days_push": 587, "days_rel": 587, "gap_med": null, "n_releases_24m": 1}, "score": 24, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}