{"adoption": {"forks": 319, "observed_at": "2026-08-28T04:07:41.600292+00:00", "stars": 3071}, "canonical_url": "https://ross.abutalabs.com/products/googlechromelabs-bubblewrap", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Bubblewrap is a Command Line Interface (CLI) that helps developers to create a Project for an Android application that launches an existing Progressive Web App (PWAs) using a Trusted Web Activity.", "domain": ["web-development", "mobile-development", "developer-tools", "cross-platform"], "enriched": true, "function": ["cli", "developer-tools", "build-tool", "mobile-framework"], "health_score": 97, "homepage": null, "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["GoogleChromeLabs/bubblewrap"], "name": "GoogleChromeLabs/bubblewrap", "platform": ["cli", "cross-platform"], "pushed_at": "2026-07-31T07:16:56+00:00", "repo": "GoogleChromeLabs/bubblewrap", "stars": 3071, "tags": ["pwa", "trusted-web-activity", "twa", "apk-generation", "android-packaging", "typescript", "nodejs", "android"], "topics": [], "urls": [], "use_cases": ["wrap a pwa into an android app", "generate an apk from my progressive web app", "publish my website to the google play store", "create a trusted web activity project", "update an existing twa android app", "validate a trusted web activity project"], "what_it_is": "Bubblewrap is a Node.js CLI and library from GoogleChromeLabs that generates, builds, and updates Android application projects that launch existing Progressive Web Apps via Trusted Web Activity. It also includes a validator library for checking TWA projects against quality criteria.", "when_to_avoid": ["you need a fully native Android app with custom native features beyond a TWA wrapper", "you prefer a GUI workflow, in which case PWABuilder may be simpler", "you are targeting iOS or desktop rather than Android"], "when_to_choose": ["you have an existing PWA and want a Play Store-ready Android app without writing native code", "you want CLI automation or programmatic generation of TWA projects", "you need to keep an Android wrapper app in sync with your web app"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/googlechromelabs-bubblewrap", "repo": "GoogleChromeLabs/bubblewrap", "role": "main", "score": 96}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "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:07:41.600292+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.600292+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:28:00.300440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "14361ecf5f23d462fee4ede685b604e23e30323c91851df5a686f6c474503a28", "fetched_at": "2026-08-28T04:07:41.600292+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GoogleChromeLabs/bubblewrap"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 95}, "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": 2490, "days_push": 33, "days_rel": 33, "gap_med": 26, "n_releases_24m": 10}, "score": 96, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}