Back to Blog

The UAE Dirham Currency Symbol (U+20C3): Why It Took 18 Years and How to Use It Today

ReactTypeScriptOpen SourceUnicodeCurrencyUAEnpmFintechdirhamAEDU+20C3
UAE Dirham currency symbol U+20C3 rendered in a modern web application

For 18 years, the UAE Dirham had no dedicated Unicode symbol. Every major currency got one: the Dollar ($), Euro (€), Pound (£), Yen (¥). The dirham used "AED" in every fintech system on earth. That changed in July 2025 when the Unicode Technical Committee accepted U+20C3 (UAE DIRHAM SIGN) for inclusion in Unicode 18.0.

There's one problem: the symbol won't render on any device until operating systems ship Unicode 18.0 support in September 2026.

The Problem: A Symbol Without a Home

When a currency gets a Unicode codepoint, the typical expectation is that it "just works". Type the character and see the symbol. But Unicode is a standard, not a rendering engine. Each operating system, browser, and font must separately implement support for new characters.

The timeline looks like this:

MilestoneDate
UAE Central Bank proposes Dirham symbol2024
Unicode Technical Committee accepts U+20C3July 22, 2025
Unicode 18.0 publishedSeptember 2026 (scheduled)
Operating systems add font support2026-2027

Until your users' devices ship with Unicode 18.0 fonts, displaying the Dirham symbol requires a workaround.

Why This Took So Long

Currency symbol encoding is not trivial. The Unicode Consortium maintains rigorous standards for:

  1. Uniqueness. The glyph must not conflict with existing characters.
  2. Stability. Once encoded, the codepoint never changes.
  3. Renderability. The glyph must be designable at multiple sizes.
  4. Bank endorsement. The symbol must be officially approved by the issuing central bank.

The UAE Central Bank officially endorsed the symbol design, which was the key requirement for the Unicode proposal. The symbol is based on the existing coin glyph used on the 1 Dirham coin, sourced from the Central Bank of UAE.

The Solution: Use the Codepoint Today, Drop the Font Later

The dirham npm package implements a forward-looking strategy: encode the correct Unicode codepoint (U+20C3) everywhere, then provide a web font as a temporary rendering layer. When native OS support arrives, you simply remove the font import. No code changes required.

This is the core design principle:

Use the correct codepoint now. Drop the workaround later.

typescript
// Today: uses web font to render U+20C3 import 'dirham/css'; // <i class="dirham-symbol">⃃</i> // After Unicode 18.0: remove the import, everything keeps working // All your components, CSS classes, and JS utilities remain valid

Migration Path

TodayAfter Unicode 18.0 (Sept 2026)
CodepointU+20C3U+20C3
RenderingCustom web fontNative OS font
Your codeNo changes neededNo changes needed
ActionKeep importRemove dirham/css import

Package Features

DirhamSymbol SVG Component

DirhamSymbol renders an inline SVG. No font loading required, SSR-compatible:

tsx
import { DirhamSymbol } from 'dirham/react'; <DirhamSymbol size={24} weight="bold" />

Weight variants match the symbol stroke to surrounding text: thin, extralight, light, regular, medium, semibold, bold, extrabold, black.

DirhamPrice React Component

Combines formatting and symbol in one component:

tsx
import { DirhamPrice } from 'dirham/react'; <DirhamPrice amount={1250} /> <DirhamPrice amount={1500000} notation="compact" weight="bold" /> <DirhamPrice amount={100} useCode /> <DirhamPrice amount={750} className="text-white text-2xl" />

Web Components (Framework-Agnostic)

Works in Vue, Angular, Svelte, and vanilla HTML:

Via CDN (no build step):

html
<script type="module" src="https://cdn.jsdelivr.net/npm/dirham/dist/web-component/index.js"></script> <dirham-symbol size="24" weight="bold"></dirham-symbol> <dirham-price amount="1250"></dirham-price> <dirham-price amount="5000000" notation="compact"></dirham-price>

Vue:

vue
<script setup> import 'dirham/web-component'; </script> <template> <dirham-symbol size="24" weight="bold" /> <dirham-price amount="1250" /> </template>

Angular:

typescript
import { CUSTOM_ELEMENTS_SCHEMA, Component } from '@angular/core'; import 'dirham/web-component'; @Component({ schemas: [CUSTOM_ELEMENTS_SCHEMA], template: ` <dirham-symbol size="24" weight="bold"></dirham-symbol> <dirham-price amount="1250"></dirham-price> ` }) export class AppComponent {}

Svelte:

svelte
<script> import 'dirham/web-component'; </script> <dirham-symbol size="24" weight="bold"></dirham-symbol> <dirham-price amount="1250"></dirham-price>

<dirham-price> Attributes

AttributeDefaultDescription
amount0Numeric value to display
locale"en-AE"Intl locale string (e.g. ar-AE)
decimals2Number of decimal places
notation"standard""standard" or "compact"
use-codeBoolean attribute. Shows AED instead of the symbol
symbol-size"1em"SVG symbol width/height
weight"regular"thin, light, regular, bold...
currency"AED"Currency code when use-code is set

CDN (No Bundler)

html
<!-- CSS web font --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dirham/dist/css/dirham.css" /> <i class="dirham-symbol" aria-label="UAE Dirham"></i> <!-- Web Component --> <script type="module" src="https://cdn.jsdelivr.net/npm/dirham/dist/web-component/index.js"></script> <dirham-symbol size="20"></dirham-symbol> <dirham-price amount="1250"></dirham-price>

JavaScript Formatting Utilities

typescript
import { formatDirham, parseDirham, copyDirhamSymbol, DIRHAM_UNICODE, DIRHAM_SYMBOL_TEXT, DIRHAM_CURRENCY_CODE, DIRHAM_HTML_ENTITY, } from 'dirham'; // Format amounts formatDirham(1234.5); // '⃃ 1,234.50' formatDirham(1234.5, { locale: 'ar-AE' }); // '١٬٢٣٤٫٥٠ ⃃' formatDirham(100, { useCode: true }); // 'AED 100.00' formatDirham(1500000, { notation: 'compact' }); // '⃃ 1.5M' parseDirham('⃃ 1,234.50'); // 1234.5 // Copy symbol to clipboard await copyDirhamSymbol(); // copies ⃃ (U+20C3) to clipboard await copyDirhamSymbol('html'); // copies &#x20C3; await copyDirhamSymbol('css'); // copies \20C3

CSS / SCSS

typescript
import 'dirham/css'; // <i class="dirham-symbol" aria-label="UAE Dirham"></i>
scss
@use 'dirham/scss';

CLI Utility

bash
npx dirham # Print symbol info npx dirham copy # Copy ⃃ to clipboard npx dirham copy html # Copy &#x20C3;

Package Exports

ExportContents
dirhamCore utilities, constants, and clipboard
dirham/reactDirhamSymbol, DirhamIcon, DirhamPrice
dirham/web-component<dirham-symbol>, <dirham-price> custom elements
dirham/cssCSS with @font-face
dirham/scssSCSS with @font-face
dirham/font/woff2WOFF2 font file (default)
dirham/font/woffWOFF font file
dirham/font/ttfTTF font file
dirham/font/sans/woff2Sans-serif variant WOFF2
dirham/font/serif/woff2Serif variant WOFF2
dirham/font/mono/woff2Monospace variant WOFF2
dirham/font/arabic/woff2Arabic variant WOFF2

Installation

bash
pnpm add dirham # or npm install dirham # or yarn add dirham

Why This Matters for Your Application

If you're building fintech applications, e-commerce platforms, or any system handling UAE Dirham amounts, you have two choices:

  1. Use "AED" text. Functional but lacking in visual polish.
  2. Use the dirham package. Proper currency symbol with a future-proof migration path.

dirham is the only solution that lets you use the correct Unicode symbol (U+20C3) today while maintaining zero migration effort when operating systems catch up in late 2026.

Resources


GitHub · npm · Live Demo

X / Twitter
LinkedIn
Facebook
WhatsApp
Telegram

About Pooya Golchian

Common questions about Pooya's work, AI services, and how to start a project together.

Get practical AI and engineering playbooks

Weekly field notes on private AI, automation, and high-performance Next.js builds. Each edition is concise, implementation-ready, and tested in production work.

Open full subscription page

Get the latest insights on AI and full-stack development.