{"adoption": {"forks": 272, "observed_at": "2026-08-28T04:05:24.042719+00:00", "stars": 1698}, "canonical_url": "https://ross.abutalabs.com/products/qigsaw", "card": {"archived": false, "artifact_type": "library", "description": "🔥🔥Qigsaw ['tʃɪɡsɔ] is a dynamic modularization library which is based on Android App Bundles(Do not need Google Play Service). It supports dynamic delivery for split APKs without reinstalling the base one.", "domain": ["mobile-development", "android-tools", "developer-tools"], "enriched": true, "function": ["plugin-system", "build-tool", "developer-tools"], "health_score": 20, "homepage": null, "language": "Java", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["iqiyi/Qigsaw"], "name": "iqiyi/Qigsaw", "platform": ["jvm"], "pushed_at": "2023-10-25T03:57:57+00:00", "repo": "iqiyi/Qigsaw", "stars": 1698, "tags": ["android-app-bundle", "split-apk", "dynamic-feature", "dynamic-delivery", "gradle-plugin", "modularization", "no-google-play-services", "android", "mobile"], "topics": ["android", "java", "dynamic", "iqiyi", "android-app-bundle", "plugin-framework", "split-apk", "play", "play-core"], "urls": [], "use_cases": ["deliver Android app features on demand without Google Play", "split a large Android app into dynamic feature modules", "install split APKs dynamically without reinstalling the base app", "use Android App Bundle-style dynamic delivery in China without Play Services", "modularize an Android app and download features at runtime", "host and upload split APKs to your own CDN server"], "what_it_is": "Qigsaw is a dynamic modularization library for Android based on Android App Bundles, enabling dynamic delivery of split APKs without requiring Google Play Services or reinstalling the base APK. It includes a Gradle plugin for building and uploading split APKs and a core library exposing Play Core-like APIs for installing feature modules at runtime.", "when_to_avoid": ["you distribute exclusively through Google Play and can use Play Feature Delivery directly", "you need to update the base APK or split AndroidManifest.xml dynamically", "your project relies on Android App Bundles features Qigsaw does not support"], "when_to_choose": ["your Android app targets users without Google Play Services", "you want Play Core-style dynamic feature delivery with your own hosting and downloader", "you need to modularize a large Android app and ship features on demand"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/qigsaw", "repo": "iqiyi/Qigsaw", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "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:05:24.042719+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.042719+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:37:49.822261+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "92796ea583e7bb2541c5d394120d0f5337eb7f3787b33a8b6c8b1d50d322c8c2", "fetched_at": "2026-08-28T04:05:24.042719+00:00", "kind": "readme", "missing": false, "url": "https://github.com/iqiyi/Qigsaw"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2627, "days_push": 1043, "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}}