{"adoption": {"forks": 371, "observed_at": "2026-08-28T04:10:42.497368+00:00", "stars": 10589}, "canonical_url": "https://ross.abutalabs.com/products/iringo", "card": {"archived": false, "artifact_type": "plugin", "description": "解锁完整的 Apple功能和集成服务", "domain": ["apple-ecosystem", "privacy", "censorship-circumvention", "self-hosted"], "enriched": true, "function": ["proxy", "middleware", "configuration-management", "geospatial"], "health_score": 64, "homepage": "https://NSRingo.github.io", "language": null, "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["NSRingo/iRingo"], "name": "NSRingo/iRingo", "platform": ["cross-platform"], "pushed_at": "2026-03-27T02:03:32+00:00", "repo": "NSRingo/iRingo", "stars": 10589, "tags": ["surge", "loon", "quantumultx", "stash", "shadowrocket", "mitm-rewrite", "siri", "apple-maps", "weatherkit", "apple-news", "testflight", "boxjs", "automation", "ios", "macos"], "topics": ["siri", "spotlight", "safari", "lookup", "geolocation", "apple-news", "apple-maps", "apple-weather-app", "ios", "macos", "ipados"], "urls": [], "use_cases": ["unlock Apple Weather data types like air quality and hourly precipitation", "remove region restrictions from Apple News and Apple TV apps", "customize Siri and Spotlight search behavior outside supported regions", "switch TestFlight region and enable multi-account support", "blend international Apple Maps features into a local account", "customize location services mixing GPS and internet-based region detection"], "what_it_is": "iRingo is a collection of rewrite and script modules for iOS proxy tools (Surge, Loon, Stash, Quantumult X, Shadowrocket, Egern) that unlock region-locked Apple services and features. It modifies requests to Apple endpoints for WeatherKit, Location Services, Maps, Siri, Apple TV, Apple News, TestFlight, and Apple Watch via MitM rewriting.", "when_to_avoid": ["you do not use a MitM-capable proxy app on Apple devices", "you are unwilling to install trusted certificates and intercept Apple traffic", "you need a jailbreak tweak or system-level modification rather than network-level rewriting"], "when_to_choose": ["you already use Surge, Loon, Stash, Quantumult X, or Shadowrocket and want Apple service unlocks", "you live in a region where Apple features like News, TV, or full WeatherKit data are unavailable", "you want a visual configuration panel via BoxJs for Apple service tweaks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/iringo", "repo": "NSRingo/iRingo", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "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:10:42.497368+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:42.497368+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:18:29.962523+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f657361039257187ef2266458655d298ef50988aec4d8f322a712399fbc83080", "fetched_at": "2026-08-28T04:10:42.497368+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NSRingo/iRingo"}, {"content_hash": "7984f6e0b09ee136bf69f98c3e48e5bc5d29fffe2fb69fb154c5424520b9c90f", "fetched_at": "2026-08-29T08:17:59.723663+00:00", "kind": "homepage", "missing": false, "url": "https://NSRingo.github.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 74, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1783, "days_push": 160, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}