Changelog

All notable changes to this project are recorded here, grouped as Added, Changed, Fixed, Removed and Security. The project uses Semantic Versioning. From 1.0.0, releases are minor and patch only: the API only grows, and a change of results moves MUNI_RESULTS_VERSION and is named here. Before 1.0.0, any release could change the API, the ABI and every data format.

1.2.0 (2026-11-05)

Added

No results change: the Unicode data is still 18.0.0 and MUNI_RESULTS_VERSION stays 2, so stored normalized keys, skeletons and verdicts from 1.1.2 stay valid.

1.1.2 (2026-11-05)

Fixed

No results change: the Unicode data is still 18.0.0 and MUNI_RESULTS_VERSION stays 2, so stored normalized keys, skeletons and verdicts from 1.1.1 stay valid.

1.1.1 (2026-11-04)

Fixed

No results change: the Unicode data is still 18.0.0 and MUNI_RESULTS_VERSION stays 2, so stored normalized keys, skeletons and verdicts from 1.1.0 stay valid.

1.1.0 (2026-11-04)

Added

Changed

No results change: the Unicode data is still 18.0.0 and MUNI_RESULTS_VERSION stays 2, so stored normalized keys, skeletons and verdicts from 1.0.0 stay valid.

1.0.0 (2026-11-03)

The API is settled. 1.0.0 has the API and the results of 0.13.0; what changes is what a caller may rely on from here. The promise is in What 1.0.0 promises.

Changed

No results change: the Unicode data is still 18.0.0 and MUNI_RESULTS_VERSION stays 2, so stored normalized keys, skeletons and verdicts from 0.13.0 stay valid.

0.13.0 (2026-11-02)

Added

Changed

Removed

0.12.0 0.13.0
muniCutUtf8(text, length, budget, unit, &cut) muniMeasureUtf8(text, length, unit, budget, SIZE_MAX, &cut, NULL)

0.12.0 (2026-11-02)

Added

Changed

0.11.0 (2026-11-02)

Added

0.10.0 (2026-11-02)

⚠ BREAKING CHANGES

Added

Changed

0.9.1 (2026-11-01)

Changed

Fixed

0.9.0 (2026-10-31)

Changed

0.8.0 0.9.0
typedef uint8_t muniBidiDirection (and the 15 other kinds) typedef int32_t muniBidiDirection
muniBreakClassOverride.value: uint8_t int32_t

Fixed

0.8.0 (2026-10-29)

Changed

0.7.0 0.8.0
muniToLower muniGetLowercase
muniToUpper muniGetUppercase
muniToTitle muniGetTitlecase
muniToNfkcCasefold muniGetNfkcCasefold

0.7.0 (2026-10-29)

Changed

0.6.0 0.7.0
muniResultName muniGetResultName
muniFeedSegmentIterator muniSegmentIterator_Feed
muniNextSegmentBreak muniSegmentIterator_NextBreak
muniNextLineBreak muniSegmentIterator_NextLineBreak
muniSetComplexBreaker muniSegmentIterator_SetComplexBreaker
muniSetBreakClassOverrides muniSegmentIterator_SetBreakClassOverrides
muniSetLineOptions(iterator, muni_lineCjAsIdeographic) muniSegmentIterator_EnableCjAsIdeographic(iterator, true)
muniFeedScriptIterator muniScriptIterator_Feed
muniNextScriptRun muniScriptIterator_NextRun

The initializers (muniInitLineIterator and the others), the muniFind* calls, muniEncodeUtf8 and every other text and code point function keep their names. - Breaking: whether a line iterator breaks before Line_Break=CJ characters, such as the small kana and the prolonged sound mark, is now a switch, which muniSegmentIterator_EnableCjAsIdeographic turns on with true and off with false. It is off in a new line iterator, which then follows the default rules of UAX #14, as an iterator without options did before. As the option was, it is set before the first break and refused for any iterator that is not a line iterator (#150).

Added

Removed

0.6.0 (2026-10-28)

Changed

Fixed

0.5.0 (2026-10-28)

Added

Changed

Fixed

0.4.0 (2026-10-27)

Changed

Fixed

0.3.1 (2026-10-27)

Fixed

0.3.0 (2026-10-25)

Added

Changed

0.2.0 (2026-10-25)

Changed

0.1.1 (2026-10-25)

Fixed

0.1.0 (2026-10-25)

Word, sentence and line segmentation can follow a language's conventions where locale data such as CLDR gives a character another class.

Added

Changed

0.0.1 (2026-10-23)

The first release: Unicode algorithms and character properties from Unicode 18.0.0, passing every official conformance file for the algorithms it implements.

Added