{"adoption": {"forks": 431, "observed_at": "2026-08-28T04:09:13.211413+00:00", "stars": 5220}, "canonical_url": "https://ross.abutalabs.com/products/knuff", "card": {"archived": false, "artifact_type": "application", "description": "The debug application for Apple Push Notification Service (APNs).", "domain": ["developer-tools", "mobile-development", "apple-ecosystem"], "enriched": true, "function": ["developer-tools", "gui", "http-client"], "health_score": 20, "homepage": null, "language": "Objective-C", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["KnuffApp/Knuff"], "name": "KnuffApp/Knuff", "platform": [], "pushed_at": "2022-09-04T18:39:25+00:00", "repo": "KnuffApp/Knuff", "stars": 5220, "tags": ["apns", "push-notifications", "debugging", "objective-c", "mac-app", "macos", "desktop", "ios"], "topics": [], "urls": [], "use_cases": ["send test push notifications to APNs without configuration", "debug why a push notification is not delivered to a device", "test custom JSON payloads for APNs", "export push certificates to PEM format", "automatically detect device tokens in iOS apps", "verify development vs production APNs environment setup"], "what_it_is": "Knuff is a macOS desktop application for debugging Apple Push Notification Service (APNs) deliveries. It lets developers send test push notifications with custom JSON payloads, automatically grabbing certificates from the keychain and detecting device tokens and environments.", "when_to_avoid": ["you need to send push notifications on Linux or Windows servers in production", "you need automated or CI-based push notification testing", "you target push services other than Apple's (e.g., FCM)"], "when_to_choose": ["you develop iOS/macOS apps that use push notifications and need a quick APNs testing tool", "you want a GUI instead of writing scripts or curl commands against the APNs API", "you need to inspect APNs error response codes during development"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/knuff", "repo": "KnuffApp/Knuff", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "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:09:13.211413+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.211413+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:00:08.454282+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7e2f366a566af552cf9dc5e190e34dac297effb0bde83c4e875ce59ca2414bf", "fetched_at": "2026-08-28T04:09:13.211413+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KnuffApp/Knuff"}], "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": 5438, "days_push": 1459, "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}}