i

Where text breaks

49 classes · 217,414 characters

The Unicode line-breaking classes, counted by character.

The finding. Every design system assumes a word is a run of letters between spaces. That describes one character in eight. Ideographic characters — which break almost anywhere — outnumber alphabetic ones 6.4 to 1, and an entire class cannot be broken at all without a dictionary.

breaks anywhere 84.7%
breaks spaces 12.9%
breaks attaches 1.2%
breaks other 0.6%
breaks locale 0.4%
breaks dictionary 0.3%
What an engine must know

The two-letter codes are the specification's, and they are not guessable. ID reads as identifier and means ideographic; NS is nonstarter, a character that may not begin a line; PR and PO are the symbols that sit before and after a number and must never be separated from it. Every class carries its name, an example you can look at, and what it forces a layout engine to know.

ClassNameLooks likeCharactersWhat it means
ID Ideographic 漢 字 仮 172,561 Breaks between almost any two characters. No spaces required, and none used.
XX Unknown 137,468 Unassigned codepoints, taking the default behaviour. The largest class by count, and it is empty of actual characters.
AL Alphabetic A b C 26,954 Breaks at spaces — the Latin model, and the one every design system assumes.
H3 Hangul LVT Syllable 각 난 10,773 A Korean syllable block with a trailing consonant.
CM Combining Mark ◌́ ◌̈ 2,512 Takes the class of the character it attaches to. An accent has no line-breaking behaviour of its own.
SG Surrogate 2,048 Half of a code unit pair. Not a character on its own, and never appears in well-formed text.
SA Complex Context Dependent ก ข ค 757 Cannot be broken without a dictionary or a trained model — Thai, Lao, Khmer, Myanmar. There is no space and no character that marks the word edge.
AI Ambiguous ± × ÷ 718 Resolved by locale, not by the character. The same codepoint breaks differently in two languages.
NU Numeric 0 1 2 705 Digits, which must not be split from their separators.
H2 Hangul LV Syllable 가 나 399 A Korean syllable block of lead consonant plus vowel.
AK Aksara क ख 329 A Brahmic orthographic syllable. Breaking inside one is wrong, and finding its edge takes cluster analysis rather than a lookup.
BA Break After – ⁄ 263 A break opportunity follows this character.
AS Aksara Start ক খ 214 The consonant that begins a Brahmic orthographic syllable.
JT Hangul T Jamo ᆨ ᆩ 137 A Korean trailing consonant, as a separate codepoint.
EB Emoji Base 👍 🙌 134 An emoji that a skin-tone modifier can attach to.
JL Hangul L Jamo ᄀ ᄁ 125 A Korean leading consonant, as a separate codepoint.
OP Open Punctuation ( [ 「 95 An opening bracket or quote. Nothing may break after it — it must stay with what it opens.
JV Hangul V Jamo ᅡ ᅢ 95 A Korean vowel, as a separate codepoint.
CL Close Punctuation ) ] 。 、 94 A closing bracket, or the CJK full stop and comma. Nothing may break before it.
HL Hebrew Letter א ב ג 75 Hebrew letters. Split from Alphabetic because a hyphen behaves differently after them — Hebrew does not break at a maqaf the way Latin breaks at a hyphen.
PR Prefix Numeric £ $ € + 67 A symbol that comes before a number and must not be separated from it — a currency sign, a plus, a minus.
CJ Conditional Japanese Starter ぁ ァ ー 60 May or may not start a line depending on Japanese typographic preference — strict or normal.
BB Break Before ´ ˈ 55 A break opportunity precedes this character.
GL Non-breaking Glue   41 Forbids a break on both sides — the non-breaking space, and what holds “10 km” together.
EX Exclamation / Interrogation ! ? ! 40 Nothing may break before it. The mark belongs to the sentence it ends.
QU Quotation " ' « 39 A quote mark that may open or close, so the engine cannot tell from the character which side needs protecting.
PO Postfix Numeric % ° ℃ 38 A symbol that comes after a number and must not be separated from it — a percent sign, a degree, a unit.
NS Nonstarter 々 ゝ ヽ 37 Cannot begin a line. Japanese small kana and iteration marks belong to the character before them, so a break in front of one is a typographic error.
RI Regional Indicator 🇬🇧 26 Letters that only mean anything in pairs — two of them make a flag, and a break between them makes two letters.
HH Unambiguous Hyphen 11 The real hyphen character, added because the ASCII one could not be read reliably.
IS Infix Numeric Separator . , : ; 10 Sits inside a number and must not be split from it — the decimal point in 3.14, the comma in 1,000.
VI Virama ◌् ◌্ 7 The mark that removes a Brahmic consonant's inherent vowel and joins it to the next.
CP Close Parenthesis ) ] 6 Split from Close Punctuation so that a letter may follow it — the case of (s) in “form(s)”.
IN Inseparable ‥ … 6 A run that must not be broken internally — the dots of an ellipsis or a table-of-contents leader.
AP Aksara Pre-Base ◌ெ ◌െ 6 A Brahmic vowel sign written before the consonant it is pronounced after.
EM Emoji Modifier ✋🏻 ✋🏿 5 A skin-tone modifier, which never separates from the emoji it follows.
BK Mandatory Break U+000C U+2028 4 Always breaks. The line ends here whatever else is true.
B2 Break Before and After 3 A break may fall on either side, but not between two of them.
VF Virama Final ◌് 2 A virama at the end of a cluster, which does not join anything to it.
WJ Word Joiner U+2060 2 Invisible, and forbids a break. The inverse of the zero width space.
LF Line Feed U+000A 1 Always breaks.
CR Carriage Return U+000D 1 Always breaks, and pairs with a line feed as one break rather than two.
SP Space U+0020 1 The break opportunity itself, and the only one most software knows about.
HY Hyphen - 1 The ASCII hyphen-minus, which is a hyphen, a minus sign and a dash depending on context — so the engine has to guess.
SY Symbols Allowing Break After / 1 The solidus. A break may follow it, which is why a long URL can wrap after a slash.
NL Next Line U+0085 1 Always breaks. An EBCDIC inheritance that survives in Unicode.
ZW Zero Width Space U+200B 1 An invisible break opportunity. Nothing is drawn, and the line may end there.
ZWJ Zero Width Joiner U+200D 1 Invisible. Binds what is either side of it into one unit — how multi-person and profession emoji are built.
CB Contingent Break U+FFFC 1 The character stands in for an embedded object, and the object decides. An inline image, in other words.

Forty-nine classes, and one of them is the one every design system implements. “Breaks at spaces” covers 12.9% of assigned characters. The rest of the table is what a text layout engine has to do after the easy case runs out — and what a component library that measures a string by counting spaces silently gets wrong.

Source. Unicode Character Database, LineBreak.txt (UAX #14) · Unicode Licence · retrieved 2026-07-31. This collection is reproduced.

The documents. UAX #14 Line Breaking · Unicode Character Database