Quick answer: Unity TextMeshPro showing <b> as literal characters? The component’s Rich Text flag is off, or the tag is malformed.

A dialog system writes <color=red>Danger</color> into a TMP text but the brackets render as text. Rich Text was disabled.

Enable Rich Text

TMP_Text component inspector → Rich Text checkbox. With it on, TMP parses tags. Off = literal output. Default is on but can get toggled off accidentally.

Tag Syntax

Tags are <b>, <i>, <color=#FFAA00>, <size=24>. Case-sensitive. Close tags balance opens. Unbalanced or unknown tags render as text.

Sprite Tags

For inline icons: <sprite name="heart">. Requires a TMP Sprite Asset assigned in the component or globally.

Auto-Escape User Input

If user-provided strings reach TMP, escape < as <noparse>...</noparse> or filter. Otherwise users can inject tags (color, size, sprite swaps).

Verifying

Tags render as styled text. Sprites appear inline. User input shows literally without injection vulnerabilities.

“Rich Text on, tags balanced, <noparse> user input. Three rules.”

Wrap user-generated text in by default — one place to remove if you trust the source, hard to add later when it’s been forgotten everywhere.