{"adoption": {"forks": 341, "observed_at": "2026-08-28T04:07:41.960642+00:00", "stars": 3083}, "canonical_url": "https://ross.abutalabs.com/products/cnchar", "card": {"archived": false, "artifact_type": "library", "description": "🇨🇳 功能全面的汉字工具库 (拼音 笔画 偏旁 成语 语音 可视化等) (Chinese character util)", "domain": ["developer-tools", "cross-platform"], "enriched": true, "function": ["nlp", "speech-recognition", "tts", "image-processing", "sdk"], "health_score": 83, "homepage": "https://theajack.github.io/cnchar", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["theajack/cnchar"], "name": "theajack/cnchar", "platform": ["browser", "cross-platform"], "pushed_at": "2026-08-02T00:09:33+00:00", "repo": "theajack/cnchar", "stars": 3083, "tags": ["chinese-characters", "pinyin", "stroke-order", "hanzi", "traditional-chinese", "wubi", "text-to-speech", "speech-to-text", "typescript", "natural-language-processing", "localization", "nodejs", "web-server", "electron"], "topics": ["spell-stroke", "draw", "chinese-characters", "pinyin", "speak", "voice-recognition"], "urls": [], "use_cases": ["get the pinyin of Chinese characters including polyphonic words", "count strokes and render stroke order animations for hanzi", "convert between simplified and traditional Chinese characters", "look up radicals and character structure of Chinese characters", "add Chinese text-to-speech and speech recognition to a web app", "sort or generate Chinese characters by pinyin or stroke count", "get wubi input codes for Chinese characters"], "what_it_is": "cnchar is a comprehensive TypeScript library for Chinese character processing, offering pinyin conversion, stroke counts, stroke order drawing, radicals, idioms, traditional/simplified conversion, and speech synthesis/recognition. It works across browsers, Node.js, mini-programs, and mobile frameworks with a plugin-based, modular design.", "when_to_avoid": ["you need full NLP like segmentation or translation rather than character-level utilities", "your project is not JavaScript/TypeScript based", "you need machine-translation-grade linguistic analysis of Chinese text"], "when_to_choose": ["you need rich Chinese character utilities (pinyin, strokes, radicals, drawing) in JavaScript/TypeScript", "you want one library that runs in browser, Node.js, mini-programs, and ReactNative/Electron", "you need offline or custom-deployable Chinese character data with modular package sizes"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cnchar", "repo": "theajack/cnchar", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "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:41.960642+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.960642+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:46:31.077132+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a9b53a79b62710f2db9590c462bed6e00de2992498f5aa18e29d6e0a9a2614f", "fetched_at": "2026-08-28T04:07:41.960642+00:00", "kind": "readme", "missing": false, "url": "https://github.com/theajack/cnchar"}, {"content_hash": "73dee53493f1b3fede5db853ee3d71efd42399f05c6a5d5fdd31df95d5114aeb", "fetched_at": "2026-08-29T09:43:06.482098+00:00", "kind": "homepage", "missing": false, "url": "https://theajack.github.io/cnchar"}, {"content_hash": "aff65c634b68bf2d536d6d2b4ece2b890abf7ecb86f40863fe765a73c6261e07", "fetched_at": "2026-08-29T09:43:06.485211+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/cnchar"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "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": 2341, "days_push": 32, "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}}