{"adoption": {"forks": 146, "observed_at": "2026-08-28T04:04:17.682575+00:00", "stars": 1301}, "canonical_url": "https://ross.abutalabs.com/products/confetti", "card": {"archived": false, "artifact_type": "library", "description": "An Android particle system library for displaying confetti!", "domain": ["mobile-development", "android-tools", "graphics"], "enriched": true, "function": ["animation", "ui-components"], "health_score": 20, "homepage": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["jinatonic/confetti"], "name": "jinatonic/confetti", "platform": ["jvm"], "pushed_at": "2020-08-31T16:49:07+00:00", "repo": "jinatonic/confetti", "stars": 1301, "tags": ["particle-system", "confetti", "android-ui", "celebration-effects", "view-animations", "android", "mobile"], "topics": ["android", "android-animation", "android-ui", "particle-system"], "urls": [], "use_cases": ["add confetti celebration animation to android app", "animate particles falling from top of screen on android", "create explosion particle effect in android view", "render custom bitmap particles with physics on android", "show rain of confetti when user wins a game", "android library for particle emitter effects"], "what_it_is": "A high-performance Android particle system library for rendering confetti animations on any view. It lets developers configure emission sources, physics constraints like velocity and acceleration, and custom confetto shapes, then animates them automatically.", "when_to_avoid": ["you are building for iOS, web, or desktop platforms", "you need a general-purpose game engine or full 2D physics engine", "you require actively maintained support - the latest release was in 2020", "you need Kotlin-first APIs or Jetpack Compose integration"], "when_to_choose": ["you need celebratory confetti or particle effects in an Android app", "you want configurable physics like velocity, acceleration, rotation, and bounds", "you need to animate arbitrary bitmaps or shapes as particles", "you want a lightweight Java library with simple one-line setup via CommonConfetti"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/confetti", "repo": "jinatonic/confetti", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "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:04:17.682575+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:17.682575+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:52:15.428819+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "56dd9eb5dc38dce853937b355aa09d5ff52fed9b5694803ccd89a82f1b087790", "fetched_at": "2026-08-28T04:04:17.682575+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jinatonic/confetti"}, {"content_hash": "fa4c3fee77ea724966e201946aedfd124e2655886248c1ef4b53021e0ebb2c19", "fetched_at": "2026-08-29T12:09:40.099334+00:00", "kind": "homepage", "missing": false, "url": "https://medium.com/@jinatonic/its-parfetti-time-f40634472608"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3666, "days_push": 2193, "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}}