{"adoption": {"forks": 662, "observed_at": "2026-08-28T04:09:41.558483+00:00", "stars": 6302}, "canonical_url": "https://ross.abutalabs.com/products/nwpusher", "card": {"archived": false, "artifact_type": "application", "description": "OS X and iOS application and framework to play with the Apple Push Notification service (APNs)", "domain": ["mobile-development", "developer-tools", "apple-ecosystem"], "enriched": true, "function": ["http-client", "developer-tools", "testing"], "health_score": 20, "homepage": null, "language": "Objective-C", "license": "BSD-2-Clause", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["noodlewerk/NWPusher"], "name": "noodlewerk/NWPusher", "platform": ["cross-platform"], "pushed_at": "2021-03-30T07:00:58+00:00", "repo": "noodlewerk/NWPusher", "stars": 6302, "tags": ["apns", "push-notifications", "objective-c", "mac-app", "ios-framework", "macos", "ios"], "topics": [], "urls": [], "use_cases": ["test push notifications for an iOS app without setting up a server", "send APNs pushes directly from a Mac using keychain certificates", "debug why push notifications are not being delivered", "send push notifications programmatically from an iOS or macOS app", "read the APNs feedback service for invalid device tokens", "verify push certificate and payload setup with detailed error reporting"], "what_it_is": "NWPusher is a macOS and iOS application plus framework for sending push notifications directly to the Apple Push Notification service (APNs). It lets developers test push notifications without setting up a server, using just an SSL certificate and device token.", "when_to_avoid": ["you need a production push backend for many users or scheduled campaigns", "you target platforms other than Apple's APNs (e.g. FCM)", "you need a maintained solution - the project has not seen releases since 2021"], "when_to_choose": ["you need a quick, no-server way to test Apple push notifications", "you want detailed APNs error messages to debug push delivery", "you want to embed APNs sending in your own macOS/iOS app via a lightweight framework"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/nwpusher", "repo": "noodlewerk/NWPusher", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "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:41.558483+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:41.558483+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:46:15.297404+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "070c45ab7bfcfa1f55785bc8d8ed694304e8ca68d7ebbe3a67adf272529edcfe", "fetched_at": "2026-08-28T04:09:41.558483+00:00", "kind": "readme", "missing": false, "url": "https://github.com/noodlewerk/NWPusher"}], "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": 5106, "days_push": 1982, "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}}