{"adoption": {"forks": 217, "observed_at": "2026-08-28T04:03:47.910817+00:00", "stars": 1155}, "canonical_url": "https://ross.abutalabs.com/products/pushd", "card": {"archived": false, "artifact_type": "service", "description": "Blazing fast multi-protocol mobile and web push notification service", "domain": ["mobile-development", "backend", "developer-tools"], "enriched": true, "function": ["message-queue", "http-server", "webhook", "middleware"], "health_score": 20, "homepage": null, "language": "CoffeeScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["rs/pushd"], "name": "rs/pushd", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2020-07-15T14:40:12+00:00", "repo": "rs/pushd", "stars": 1155, "tags": ["push-notifications", "apns", "gcm", "wns", "mpns", "eventsource", "redis-backend", "coffeescript", "messaging", "nodejs"], "topics": [], "urls": [], "use_cases": ["send push notifications to ios and android apps from one server", "unified push notification service for multiple mobile platforms", "notify mobile devices when events happen on my backend", "broadcast notifications to all subscribed devices", "self-hosted alternative to push notification services", "subscribe devices to events and deliver via apns or gcm"], "what_it_is": "Pushd is a self-hosted unified push notification server that lets backend applications send notifications to mobile and web clients across multiple protocols (APNs, GCM/C2DM, MPNS, WNS, HTTP, EventSource) from a single API. It manages device subscriptions to events with a Redis backend and supports pluggable custom protocols.", "when_to_avoid": ["you only target modern Firebase Cloud Messaging or a single platform and prefer an official SDK", "you need actively maintained software - the latest release dates to 2020 and protocols like C2DM are deprecated", "you want a managed SaaS push service without operating your own Redis and Node.js infrastructure"], "when_to_choose": ["you need to fan out notifications to devices across iOS, Android, and Windows platforms through one entry point", "you want a self-hosted push server with pluggable protocols and Redis-backed subscription management", "you need event-based subscription semantics with badges, templates, and broadcast support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pushd", "repo": "rs/pushd", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "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:47.910817+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:47.910817+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:32:14.226461+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9cd530363f20235a1037872043f6676996e414a7599627467e806ddb816fd1e2", "fetched_at": "2026-08-28T04:03:47.910817+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rs/pushd"}, {"content_hash": "79338103a0bc8ac0f496935b214ec81dd76c2a1892555a193adb1b984550d927", "fetched_at": "2026-08-29T12:37:51.538772+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/pushd"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5271, "days_push": 2240, "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}}