{"adoption": {"forks": 321, "observed_at": "2026-08-28T04:07:16.566779+00:00", "stars": 2742}, "canonical_url": "https://ross.abutalabs.com/products/fair", "card": {"archived": false, "artifact_type": "framework", "description": "A Flutter package used to update widget tree dynamically. Fair提供一整套Flutter动态化解决方案", "domain": ["mobile-development", "cross-platform", "frontend", "developer-tools"], "enriched": true, "function": ["mobile-framework", "ui-components", "plugin-system", "developer-tools"], "health_score": 27, "homepage": "https://fair.58.com", "language": "Dart", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "active", "member_repos": ["wuba/Fair"], "name": "wuba/Fair", "platform": ["cross-platform"], "pushed_at": "2024-10-25T07:58:11+00:00", "repo": "wuba/Fair", "stars": 2742, "tags": ["flutter", "dynamic-ui", "hot-update", "code-push", "dart-compiler", "widget-tree", "over-the-air-updates", "react-native-alternative", "android", "ios", "mobile"], "topics": ["flutter", "dynamic-widget", "flutter-fair", "code-push", "dart", "dynamic", "flutter-dynamic", "js", "jsx", "react-native", "android", "flutter-app", "flutter-examples", "ios", "flutter-demo", "flutter-ui", "flutter-apps", "flutter-widget"], "urls": [], "use_cases": ["push new Flutter pages without an app store release", "hot update Flutter widget tree dynamically", "replace or patch parts of an existing Flutter page remotely", "fix UI bugs in production without waiting for the next release", "dynamically modify typography and styles of operation bits", "build a hot update platform for Flutter apps"], "what_it_is": "Fair is a dynamic framework for Flutter that converts native Dart source files via a compiler so widget trees and state can be updated dynamically without releasing a new app version. It distributes business bundles and JS to push new pages or partial UI updates over the air, similar to React Native's model.", "when_to_avoid": ["your app store policies prohibit dynamic code/UI updates", "you are not using Flutter or Dart", "you only need simple remote feature flags or config changes rather than full UI dynamism", "you need a very mature ecosystem like React Native's"], "when_to_choose": ["you ship a Flutter app and need over-the-air UI updates without app store review", "you want pixel-perfect dynamic pages rendered losslessly against native Flutter widgets", "you need a lightweight, low-intrusion dynamic solution with a pluggable component model"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/fair", "repo": "wuba/Fair", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "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:16.566779+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:16.566779+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:19:07.951639+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e300f7b6e13f64db4553d428055e22bef725c82d5dd3dc5deb9a9a0f9c22b3d4", "fetched_at": "2026-08-28T04:07:16.566779+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wuba/Fair"}, {"content_hash": "7b450f68a37f7619f7e100a31310e825fe60196031e60448149623bcc24c30ba", "fetched_at": "2026-08-29T09:57:14.997636+00:00", "kind": "homepage", "missing": false, "url": "https://fair.58.com"}], "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": 2100, "days_push": 677, "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}}