{"adoption": {"forks": 164, "observed_at": "2026-08-28T04:05:44.321305+00:00", "stars": 1851}, "canonical_url": "https://ross.abutalabs.com/products/pulltobounce", "card": {"archived": false, "artifact_type": "library", "description": "Animated \"Pull To Refresh\" Library for UIScrollView.  Inspired by https://dribbble.com/shots/1797373-Pull-Down-To-Refresh", "domain": ["mobile-development", "frontend"], "enriched": true, "function": ["animation", "ui-components"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["takuoka/PullToBounce"], "name": "takuoka/PullToBounce", "platform": [], "pushed_at": "2019-11-05T17:44:15+00:00", "repo": "takuoka/PullToBounce", "stars": 1851, "tags": ["pull-to-refresh", "uiscrollview", "cocoapods", "swift", "ios", "mobile"], "topics": ["library", "animation", "ios"], "urls": [], "use_cases": ["add animated pull-to-refresh to a UITableView", "customize bounce animation for scroll view refresh", "implement pull-down-to-refresh in UICollectionView", "replace default UIRefreshControl with a playful animation", "add refresh indicator to any UIScrollView"], "what_it_is": "A Swift library that adds an animated 'pull to refresh' indicator to UIScrollView, UITableView, and UICollectionView on iOS. It wraps the scroll view and provides customizable bounce animations with an event handler for refresh actions.", "when_to_avoid": ["you need a library with recent updates or long-term maintenance", "you prefer the built-in UIRefreshControl with minimal dependencies", "your project is in Objective-C without bridging"], "when_to_choose": ["you want a visually distinctive, customizable pull-to-refresh animation on iOS", "your project uses Swift and CocoaPods", "you need refresh support for UITableView, UICollectionView, or any UIScrollView"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pulltobounce", "repo": "takuoka/PullToBounce", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "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:44.321305+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:44.321305+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:16:56.290200+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73e80bf7fc8d49453d8206bbdeef94ae99627f3ff37b6fd1f419c9fe49426eb2", "fetched_at": "2026-08-28T04:05:44.321305+00:00", "kind": "readme", "missing": false, "url": "https://github.com/takuoka/PullToBounce"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4039, "days_push": 2493, "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}}