{"adoption": {"forks": 166, "observed_at": "2026-08-28T04:03:52.610200+00:00", "stars": 1177}, "canonical_url": "https://ross.abutalabs.com/products/chn-iplist", "card": {"archived": false, "artifact_type": "dataset", "description": "Chnroutes rules for routers、Shadowrocket、Quantumult、acl、v2rayNG、v2rayN、pac、v2rayA、dae、RouterOS、v2ray、xray、sing-box config file.", "domain": ["networking", "privacy", "censorship-circumvention", "self-hosted"], "enriched": true, "function": ["networking", "proxy", "security"], "health_score": 79, "homepage": null, "language": "RouterOS Script", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["PaPerseller/chn-iplist"], "name": "PaPerseller/chn-iplist", "platform": ["cross-platform"], "pushed_at": "2026-08-16T02:50:49+00:00", "repo": "PaPerseller/chn-iplist", "stars": 1177, "tags": ["chnroutes", "geoip", "china-ip-list", "shadowrocket", "quantumult", "v2ray", "xray", "sing-box", "routeros", "pac", "rule-list", "ad-blocking", "router", "ios", "android"], "topics": ["chnroutes", "shadowrocket", "quantumult", "rules", "acl", "v2ray", "v2rayng", "v2rayn", "xray", "v2raya", "routeros", "dae", "sing-box", "loon", "pac", "chn-ip", "gfw", "cnip", "geoip"], "urls": [], "use_cases": ["route China IPs directly on a router while proxying the rest", "subscribe to chnroute rules in Shadowrocket or Quantumult", "configure v2ray or xray with China IP routing rules", "get China IPv4 and IPv6 CIDR lists for sing-box or dae", "set up split tunneling based on Chinese IP ranges", "add ad-blocking rules alongside chnroute lists"], "what_it_is": "A regularly updated dataset of China IP routes (chnroutes) for IPv4 and IPv6, packaged as subscription rules for proxy clients like Shadowrocket, Quantumult, v2ray, xray, sing-box, and RouterOS. It merges multiple upstream sources and includes a small set of ad-blocking rules, refreshing every 15 days.", "when_to_avoid": ["you need fine-grained domain-based routing rules rather than IP-based ones", "you require more frequent updates than every 15 days", "you need a maintained proxy client itself rather than rule data"], "when_to_choose": ["you need ready-made, auto-updated China IP routing rules for common proxy clients", "you want both IPv4 and IPv6 chnroute coverage in one place", "you run a router (RouterOS, OpenWrt-style setups) and want chnroute config files"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/chn-iplist", "repo": "PaPerseller/chn-iplist", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "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:52.610200+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.610200+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:26:10.688513+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "930beddb1d5051f99425d0da05bdb96c68980c093f1a1b29581b1f4a46cba1f4", "fetched_at": "2026-08-28T04:03:52.610200+00:00", "kind": "readme", "missing": false, "url": "https://github.com/PaPerseller/chn-iplist"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "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": 3132, "days_push": 17, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 76, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}