{"adoption": {"forks": 442, "observed_at": "2026-08-28T04:05:50.692645+00:00", "stars": 1894}, "canonical_url": "https://ross.abutalabs.com/products/wechatmagician", "card": {"archived": false, "artifact_type": "plugin", "description": "WechatMagician is a Xposed module written in Kotlin, that allows you to completely control your Wechat.", "domain": ["android-tools", "privacy", "messaging-platforms", "reverse-engineering"], "enriched": true, "function": ["reverse-engineering", "security", "plugin-system"], "health_score": 20, "homepage": "http://repo.xposed.info/module/com.gh0u1l5.wechatmagician", "language": "Kotlin", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "abandoned", "member_repos": ["Gh0u1L5/WechatMagician"], "name": "Gh0u1L5/WechatMagician", "platform": [], "pushed_at": "2018-05-23T20:50:20+00:00", "repo": "Gh0u1L5/WechatMagician", "stars": 1894, "tags": ["xposed-module", "wechat", "anti-revoke", "kotlin", "hooking", "android"], "topics": ["xposed", "wechat", "kotlin", "reverse-engineering"], "urls": [], "use_cases": ["prevent WeChat friends from recalling chat messages", "block ads in WeChat Moments feed", "forward messages to many friends at once", "send more than 9 images in one WeChat message", "mark all chats as read with one tap", "hide Moments posts by keyword", "build a custom Xposed module for WeChat"], "what_it_is": "WechatMagician is an open-source Xposed module written in Kotlin that hooks into the WeChat app to give users full control over chat messages and Moments content. It supports features like preventing message recalls, blocking Moments ads, and bulk forwarding, and doubles as a template for building other WeChat plugins.", "when_to_avoid": ["you use recent WeChat versions, since the project targets WeChat 6.5.3+ and has not been updated since 2018", "you need a non-rooted or non-Xposed solution", "you want guaranteed compatibility or support, as the project appears abandoned"], "when_to_choose": ["you run a rooted Android device with Xposed and want anti-recall or Moments ad blocking in WeChat", "you want an open-source, modular Kotlin codebase to learn or extend WeChat hooking"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/wechatmagician", "repo": "Gh0u1L5/WechatMagician", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "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:50.692645+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.692645+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:12:52.867691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85d0795e3c8e4e23528288f7ae90e52c8aab501c5e6056025da378fcfcaec5f4", "fetched_at": "2026-08-28T04:05:50.692645+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Gh0u1L5/WechatMagician"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3275, "days_push": 3024, "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}}