Where text breaks
49 classes · 217,414 charactersThe 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.
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.
| Class | Name | Looks like | Characters | What 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