{"adoption": {"forks": 47, "observed_at": "2026-08-28T04:03:24.873731+00:00", "stars": 1057}, "canonical_url": "https://ross.abutalabs.com/products/typist", "card": {"archived": false, "artifact_type": "library", "description": "Swift UIKit keyboard manager for iOS apps.", "domain": ["mobile-development", "developer-tools"], "enriched": true, "function": ["ui-components", "developer-tools"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["totocaster/Typist"], "name": "totocaster/Typist", "platform": [], "pushed_at": "2021-05-27T23:32:20+00:00", "repo": "totocaster/Typist", "stars": 1057, "tags": ["keyboard-manager", "uikit", "event-callbacks", "swift", "ios", "mobile"], "topics": ["event-callback", "keyboard-events", "keyboard-layout", "keyboard-listeners", "keyboard"], "urls": [], "use_cases": ["handle keyboard show and hide events in iOS", "animate views when the keyboard appears", "implement interactive keyboard dismissal with scroll views", "manage input accessory view animation with keyboard frame changes", "replace NotificationCenter keyboard observers with clean Swift callbacks"], "what_it_is": "Typist is a small drop-in Swift UIKit keyboard manager for iOS apps. It lets developers respond to keyboard show/hide/frame-change events via closures instead of NotificationCenter and Objective-C boilerplate.", "when_to_avoid": ["building with SwiftUI where native keyboard APIs may suffice", "needing cross-platform keyboard handling beyond iOS", "requiring a library with frequent updates, as the latest release is from 2021"], "when_to_choose": ["building an iOS app in Swift with UIKit that needs keyboard event handling", "wanting a lightweight drop-in keyboard manager without notification center", "needing interactive keyboard dismissal tied to scroll views"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/typist", "repo": "totocaster/Typist", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "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:03:24.873731+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.873731+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:58:02.097322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "39e97ce0c350047f2d97e44531ae001b19d8ababe65635f04c587b701209e829", "fetched_at": "2026-08-28T04:03:24.873731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/totocaster/Typist"}], "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": 3628, "days_push": 1924, "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}}