{
  "unicodeVersion": "18.0.0",
  "sourceDate": "2026-07-31 00:00:00 GMT [KL]",
  "generatedAtUtc": "2026-10-15T21:29:55.292716+00:00",
  "license": "Unicode-3.0",
  "sourceUrls": [
    "https://www.unicode.org/Public/UCD/latest/ucd/Unihan.zip",
    "https://www.unicode.org/Public/UCD/latest/ucd/CJKRadicals.txt",
    "https://www.unicode.org/license.txt"
  ],
  "sourceSha256": {
    "Unihan.zip": "4c93ea9c1f636451729a840978f1667a53886af37ba854fdcce109721c63d43e",
    "CJKRadicals.txt": "689e2e5852699e7115823dc0b6d3e615eb767c7f477b615678f4f989d1f06105",
    "UNICODE-LICENSE.txt": "e7a93b009565cfce55919a381437ac4db883e9da2126fa28b91d12732bc53d96"
  },
  "documentation": "https://unicode.org/reports/tr38/",
  "pinyinProperties": [
    "kMandarin",
    "kHanyuPinyin",
    "kHanyuPinlu",
    "kXHC1983",
    "kTGHZ2013"
  ],
  "japaneseProperties": [
    "kJapaneseKun",
    "kJapaneseOn"
  ],
  "cantoneseProperties": [
    "kCantonese"
  ],
  "radicalProperties": [
    "kRSUnicode",
    "kTotalStrokes"
  ],
  "variantProperties": [
    "kSimplifiedVariant",
    "kTraditionalVariant"
  ],
  "fieldCoverage": {
    "kRSUnicode": 102999,
    "kTotalStrokes": 102999,
    "kIICore": 9810,
    "kCantonese": 29936,
    "kMandarin": 44355,
    "kHanyuPinyin": 34130,
    "kTGHZ2013": 8105,
    "kXHC1983": 11072,
    "kJapaneseKun": 11296,
    "kJapaneseOn": 13177,
    "kHanyuPinlu": 3799,
    "kTraditionalVariant": 6840,
    "kSimplifiedVariant": 7291
  },
  "radicalFormOccurrences": {
    "0": 99582,
    "1": 3792,
    "2": 81,
    "3": 6
  },
  "datasets": {
    "chinese-candidates.json": {
      "records": 44364,
      "bytes": 7741945,
      "gzipBytes": 768411,
      "sha256": "e1ddf8c77468126b1dd9e836420706a062ded960a9734037252934b2b6465380"
    },
    "japanese-candidates.json": {
      "records": 13395,
      "bytes": 2417805,
      "gzipBytes": 302480,
      "sha256": "7251634f8eaafd1b718d3de2800c5413e1857dedfd06c045df6bdcf238493d90"
    },
    "cantonese-candidates.json": {
      "records": 29936,
      "bytes": 4534302,
      "gzipBytes": 372930,
      "sha256": "efea9e74d763f70edcfcdcfb308a9fb08f94a7b491f792293ad44a3c49f6cdf1"
    },
    "han-radicals.json": {
      "records": 102999,
      "bytes": 9806419,
      "gzipBytes": 466119,
      "sha256": "ee4036c50bc91805f796ba45750ab5cf9d3881953620482d48d52f8d51c2e033"
    },
    "radical-catalog.json": {
      "records": 246,
      "bytes": 21552,
      "gzipBytes": 2249,
      "sha256": "26efcd3bc0449876dfef4b5052c95a3193c32c3b1761046477d117a9929eaaad"
    }
  },
  "notes": [
    "Independent parser and data transformation; no Lexilogos implementation or dataset used.",
    "Pinyin fields are parallel only before deduplication; plain/number arrays are sets, not index-aligned.",
    "Unmarked pinyin readings are assigned neutral tone 5; input with no requested tone should search pinyinPlain.",
    "pinyinPlain preserves ü and ê; normalize v and u: to ü in search.",
    "Japanese kun is lowercase; ON is uppercase. Both are uppercase in source, separated by property.",
    "Chinese sorting uses available corpus counts, then IICore and basic block priority; not a universal frequency ranking.",
    "radicals.form: 0 traditional radical; 1 Chinese simplified radical; 2 non-Chinese simplified radical; 3 secondary non-Chinese simplified radical.",
    "A radical form does not classify the entire character as simplified/traditional Chinese.",
    "Character variant arrays are directed relations, may contain self references or multiple variants, and are not safe for blind phrase conversion.",
    "strokes is an array of total stroke counts; radicals.additionalStrokes is a residual count and can be negative.",
    "Absence of a reading means the source supplies no value, not that a character cannot be read.",
    "Counts describe the source dataset, not full phrase IME coverage or guaranteed font glyph coverage."
  ],
  "validation": "All parser assertions passed."
}
