Repository navigation
Released on October 24, 2026.
gukhanmun
- Added
Builder::hanja_variant_set()for selecting the hanja spelling used in rendered output independently of the rendering mode. A separately selected variant set remains in effect when the rendering mode changes, while completeRenderOptionsreplace both settings. [#11, #12] - Added
Builder::punctuation()withpreserve,modern,traditional, andtraditional-verticaloutput profiles and custom role styles. The default preserves punctuation across plain text, HTML, and Markdown. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Changed
Enginestreaming boundaries: a sole non-block rootClosewith pending text is emitted at the next token,flush(), orfinish().finish()supplies EOF evidence whileflush()stays conservative; particle lookahead retains four extra source scalars beyond the dictionary tail allowance. [#20, #25] - Added candidate-aware dictionary APIs and deterministic default reading selection while preserving existing bundled defaults. Higher-priority dictionaries replace all readings for a key. [#19, #22]
- Dictionary-wide homophone marking now includes the selected candidate's suffix reading, including custom
MapDictionarysuffixes. [#19, #22] - Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
- Added the
loanwordsfeature,loanwordsmodule andBuilder::bundled_loanwords()to compose loanword examples after user dictionaries and before preset dictionaries. Theloanwordsfeature is enabled by default;ko-krincludes the dictionary automatically, whileko-kpleaves it disabled. UseBuilder::no_bundled_loanwords()to disable only this dictionary. Builds without default features must enableloanwordsor callBuilder::no_bundled_loanwords()forko-kr; otherwisebuild()returnsError::Config. [#18, #26, #31] - Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
- Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
- Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]
gukhanmun-cdb
- Added v2 candidate payloads and
lookup().candidates(), preserving v1 loading and selected-default lookup methods. [#19, #22]
gukhanmun-cli
- Added
--hanja-variant-setfor selectingas-dictionary,shinjitai,kanxi,simplified, orasahimojiwhenever the selected rendering mode emits hanja. [#11, #12] - Added
--punctuationand--punctuation-profileto normalize punctuation with a built-in profile or custom JSON configuration. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
- Enabled the bundled NIKL loanword examples by default for
ko-kr, before the preset dictionary and after user dictionaries. Use--no-loanwordsto disable them, or--loanwordsto enable them forko-kp.--no-bundled-dictionariesdisables all bundled dictionaries. [#18, #26, #31] - Included NOTICE.md in CLI binary archives to retain attribution for bundled dictionary data, including the NIKL loanword examples. [#18, #26]
- Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
- Load candidate-bearing FST/CDB v2 dictionaries through existing dictionary options, retaining bundled default readings and positional forms. [#19, #22]
- Dictionary-wide homophone marking includes selected suffix readings. [#19, #22]
- Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
- Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]
gukhanmun-core
- Added
ReadingCandidate,ReadingCandidates, candidate lookup/enumeration methods, andMapDictionary::insert_candidates(). Selection happens before segmentation; alternatives retain their own marks and positional forms. Existing custom dictionary implementations remain supported. [#19, #22] - Dictionary-wide homophone marking indexes only selected candidates and includes their suffix readings. [#19, #22]
- Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Changed
Enginestreaming boundaries: a sole non-block rootClosewith pending text is emitted at the next token,flush(), orfinish().finish()supplies EOF evidence whileflush()stays conservative; particle lookahead retains four extra source scalars beyond the dictionary tail allowance. [#20, #25] - Added dictionary-guided recognition of Unicode z-variants, traditional/simplified forms, CJK compatibility ideographs, Joyo kanji old/new forms, and Asahi variants. Ambiguous variant relations are accepted only when the dictionary identifies one matching sense, while exact source matches remain authoritative. Compatibility ideographs are folded before fallback reading and numeral lookup. [#11, #12]
- Added
HanjaVariantSetwithAsDictionary,Shinjitai,Kanxi,Simplified, andAsahimojioutput profiles.Annotation::canonical_hanja()exposes the dictionary spelling for a dictionary match and the source hanja for a fallback annotation, so rendering and policy middlewares use the same lexical identity. [#11, #12] - Added opt-in output punctuation profiles, including custom marks and contextual spacing, through
PunctuationProfileand the post-annotationPunctuationNormalizer. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. [#27, #28]
gukhanmun-dict-extract
- Added loanword collection and deterministic extraction with explicit editorial decisions, provenance reports and complete matching sweeps. Enable
loanwords-clifor offline commands orloanwords-collectfor HTTPS collection usingNIKL_LOANWORD_API_KEY. [#18, #26] - Loanword output preflight rejects filesystem aliases before publication, and generated reports can be checked beyond the offline input size limit. Encoded service keys are decoded once, and unsafe Trace logging configurations are rejected before authentication. Partial response bodies count toward the collection byte limit even when the request is retried. [#18, #26]
- Fixed stale failure diagnostics that remained after successful loanword extraction. Diagnostics are removed after both the TSV and report are published; check and audit-only modes preserve them. [#18, #26]
gukhanmun-fst
- Added v2 candidate payloads and
lookup().candidates(), preserving v1 loading and selected-default lookup methods. [#19, #22]
gukhanmun-html
- Added
HtmlPunctuationTextCodecfor punctuation normalization across literal and HTML character reference spellings, with original spelling retained for untouched references. Opt-in reader options protect unmatched end tags. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
gukhanmun-loanwords
- Added a separately selectable, offline dictionary from NIKL loanword spelling examples with source provenance and explicit choices for competing readings. [#18, #26]
- Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
gukhanmun-markdown
- Added
MarkdownWriteOptionsandwrite_markdown_with_options()to preserve Markdown structure when punctuation normalization changes text. [#27, #28] - Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25]
gukhanmun-mkdict
- Accept candidate rows with
preferenceandsuffix_readingin TSV/CSV, orpreferenceandsuffixReadingin JSONL. Merge policies replace whole sets across files, and reading rules apply to individual candidates. The builder emits v1 for scalar dictionaries and v2 when candidates or suffixes require it; old runtimes must be updated to read v2. [#19, #22]
gukhanmun-napi
- Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
- Added the
punctuationJsonoption andpunctuationProfileJson()resolved view for output punctuation profiles, including custom role styles. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Load candidate-bearing FST/CDB dictionaries without changing the JavaScript options, and include selected suffixes in dictionary-wide homophone marking. [#19, #22]
gukhanmun-opendict
- Added all competing readings and sorted source sense identifiers to the category TSV snapshots of the Open Korean Dictionary. Curated defaults keep existing category choices reproducible; regenerate or check the snapshots with
mise run opendict-extract -- /path/to/pinned-dump.zipandmise run opendict-extract-check -- /path/to/pinned-dump.zip. [#21, #24] - Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
gukhanmun-stdict
- Retain competing readings and source record IDs during extraction, with curated equal-priority decisions preserving all existing default readings. Candidate-specific suffixes now survive raw FST/CDB loading. Use
mise run stdict-extractto regenerate andmise run stdict-extract-checkto check a source dump without modifying outputs. [#19, #22] - Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]
gukhanmun-wasm
- Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
- Added the
punctuationJsonoption andpunctuation_profile_json()resolved view for output punctuation profiles, including custom role styles. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Load candidate-bearing FST/CDB dictionaries without changing the JavaScript options, and include selected suffixes in dictionary-wide homophone marking. [#19, #22]
@gukhanmun/loanwords-cdb
- Added
@gukhanmun/loanwords-cdbto load the bundled NIKL loanword examples throughloanwordsCdb()in the WASM and native bindings. [#18, #26] - Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
@gukhanmun/loanwords-fst
- Added
@gukhanmun/loanwords-fstto load the bundled NIKL loanword examples throughloanwordsFst()in the WASM and native bindings. [#18, #26] - Changed weekly data updates to target the maintenance branch of the newest stable release series that ships the dictionary, with a separate PR keeping main current. Before the dictionary's first stable release, updates target main only. [#18, #26]
@gukhanmun/napi
- Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
- Added the
hanjaVariantSetconverter option for selecting the hanja spelling emitted by the Node-API binding. [#11, #12] - Added the
punctuationoption for built-in and custom output profiles, including HTML character references. Resolved styles are available as a copied, deeply frozenoptions.punctuationview. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Load candidate-bearing FST/CDB v2 dictionaries through existing dictionary options, retaining bundled default readings and positional forms. [#19, #22]
- Dictionary-wide homophone marking includes selected suffix readings. [#19, #22]
@gukhanmun/opendict-cdb
- Changed the bundled Open Korean Dictionary data to retain competing readings within each category, preserving existing default choices and category priority. Source identifiers remain in the extraction TSVs. [#21, #24]
- Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
@gukhanmun/opendict-fst
- Changed the bundled Open Korean Dictionary data to retain competing readings within each category, preserving existing default choices and category priority. Source identifiers remain in the extraction TSVs. [#21, #24]
- Updated the bundled Open Korean Dictionary (우리말샘) snapshot to 2026-10-04. [#29, #30]
@gukhanmun/stdict-cdb
- Bundle v2 data retaining competing readings and positional forms, with all previous default readings preserved. Requires a binding that reads dictionary format v2. [#19, #22]
- Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]
@gukhanmun/stdict-fst
- Bundle v2 data retaining competing readings and positional forms, with all previous default readings preserved. Requires a binding that reads dictionary format v2. [#19, #22]
- Updated the bundled Standard Korean Dictionary (標準國語大辭典) snapshot to 2026-10-12. [#29, #30]
@gukhanmun/types
- Added punctuation profile types and
GukhanmunOptions.punctuation, with a resolved profile available throughGukhanmun.options.punctuation. [#27, #28] - Added the
HanjaVariantSettype and thehanjaVariantSetfield onGukhanmunOptionsfor the shared JavaScript API. [#11, #12]
@gukhanmun/wasm
- Added automatic reading selection from a fully delimited following Korean particle, including
으로/로and combinations such as으로는. Conversion keeps the source particle and falls back to the dictionary default when evidence is uncertain or no reading fits; explicit dictionary overrides stay authoritative. [#20, #25] - Added competing readings to the bundled Open Korean Dictionary data, preserving existing default choices and dictionary priority. [#21, #24]
- Added the
hanjaVariantSetconverter option for selecting the hanja spelling emitted by the WebAssembly binding. [#11, #12] - Added the
punctuationoption for built-in and custom output profiles, including HTML character references. Resolved styles are available as a copied, deeply frozenoptions.punctuationview. Technical guards include Unicode Latin letters, and contextual spaces do not detach combining marks or format controls. HTML block, list, and table elements trim contextual spaces without changing annotation windows. [#27, #28] - Load candidate-bearing FST/CDB v2 dictionaries through existing dictionary options, retaining bundled default readings and positional forms. [#19, #22]
- Dictionary-wide homophone marking includes selected suffix readings. [#19, #22]