{"adoption": {"forks": 680, "observed_at": "2026-08-28T04:08:18.477973+00:00", "stars": 3782}, "canonical_url": "https://ross.abutalabs.com/products/echotrace", "card": {"archived": false, "artifact_type": "application", "description": "EchoTrace 是一个本地、安全的微信聊天记录导出、分析与年度报告生成工具 | EchoTrace is a local, secure tool for exporting, analyzing, and generating annual reports of WeChat chat records", "domain": ["data-visualization", "analytics", "privacy", "developer-tools"], "enriched": true, "function": ["data-visualization", "analytics", "pdf", "nlp"], "health_score": 81, "homepage": null, "language": null, "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["ycccccccy/echotrace"], "name": "ycccccccy/echotrace", "platform": ["windows", "cross-platform"], "pushed_at": "2026-03-20T14:11:25+00:00", "repo": "ycccccccy/echotrace", "stars": 3782, "tags": ["wechat", "chat-history", "annual-report", "flutter", "local-first", "chat-export", "word-cloud", "macos", "desktop"], "topics": ["annual-reports", "chat-history", "data-analysis", "data-visualization", "wechat"], "urls": [], "use_cases": ["export wechat chat history locally", "generate annual report from wechat chats", "analyze my wechat chat statistics", "create word cloud from chat messages", "decrypt wechat chat database", "share chat history as html", "see who I chat with most on wechat"], "what_it_is": "EchoTrace is a fully local, privacy-focused desktop application for exporting, decrypting, and analyzing WeChat chat records. It generates personalized annual reports and visualizations (word clouds, statistics) from your chat history, with export to shareable formats like HTML.", "when_to_avoid": ["you need real-time chat features or ongoing maintenance - the project is no longer maintained (see WeFlow or Miyu alternatives)", "you use messaging platforms other than WeChat", "you need a server-side or multi-user analytics solution"], "when_to_choose": ["you want a fully local, offline tool with no data leaving your machine", "you want a visual annual report or word cloud from WeChat chats", "you want to export WeChat messages to shareable HTML"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/echotrace", "repo": "ycccccccy/echotrace", "role": "main", "score": 60}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "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:08:18.477973+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.477973+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.533996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c55f2acbadbbc89c2e6b5c99a965ef52305047ff5dba56b01d2db9b59413da8", "fetched_at": "2026-08-28T04:08:18.477973+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ycccccccy/echotrace"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 73, "longevity": 22, "rhythm": 66}, "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": 320, "days_push": 166, "days_rel": 227, "gap_med": 0, "n_releases_24m": 34}, "score": 60, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}