Unicode Private Use Area: Custom Characters for Your Application

· 2 min read

Unicode reserves specific ranges of code points as Private Use Areas (PUAs)—code points that have no standard meaning and can be assigned any character by agreement between the parties exchanging the data. They're used by icon fonts, custom glyph systems, internal corporate character sets, and specialised academic or technical applications.

The Three Private Use Ranges

  • U+E000–U+F8FF (BMP PUA, 6,400 code points): The original Private Use Area in the Basic Multilingual Plane. Used by icon fonts like Font Awesome, which maps icons to code points in this range.
  • U+F0000–U+FFFFF (Supplementary PUA-A, 65,534 code points): The entirety of Plane 15, available for private use.
  • U+100000–U+10FFFD (Supplementary PUA-B, 65,534 code points): The bulk of Plane 16.

Browse the planes overview at the planes page to see how PUAs relate to the broader Unicode structure.

Icon Fonts and the PUA

The popular approach of using an icon font (Font Awesome, Material Icons, Ionicons) works by placing icon glyphs at PUA code points and providing a CSS font-face that maps those code points to icon images. When you write <i class="fa-home"></i>, the CSS inserts a PUA character like U+F015 via a ::before pseudo-element, and the icon font renders it as a house icon.

The main downside: PUA code points carry no semantic meaning, so screen readers may announce them as unknown characters unless you add aria-hidden="true". For better accessibility, SVG icons or inline SVGs are preferred in modern applications.

When to Use the PUA

PUA code points are appropriate when you control both ends of the data pipeline—the writer and the reader both understand your private assignment. Never send PUA-encoded data to a system that doesn't know your assignments, and always document your mappings. If your custom characters might ever be interchanged with outside systems, consider requesting standardisation through the Unicode Consortium instead.