Home  ›  Playgrounds  ›  All 22 scripts + emoji

All 22 Scripts + Emoji

The flagship stress test. One buildDocumentPDFBytes() call, every Unicode script pdfnative supports — 22 writing systems with full BiDi reordering and OpenType GSUB/GPOS shaping — plus native COLRv1 colour emoji, composed into a single PDF entirely in your browser. The text-routing engine inspects every code point and dispatches it to the right embedded font automatically, so a single paragraph can freely mix Arabic, Tamil, Japanese and emoji.

Heads-up: this preset embeds up to 24 fonts (22 scripts + Latin + colour emoji). The first run fetches several megabytes of font data from the CDN — give it a few seconds. Everything after that is instant.

Document title

Heading (H1)

Body paragraphs (one per line; blank line for a new paragraph)

View underlying code

The 22 scripts at a glance

Every writing system below ships as a bundled Noto font module and renders through the same shaping engine. The demo reads this table directly — what you see here is what lands in the PDF.

Script (autonym)Greeting
EnglishHello
ΕλληνικάΓειά σου
РусскийЗдравствуйте
ქართულიგამარჯობა
ՀայերենԲարև
TürkçeMerhaba
Tiếng ViệtXin chào
PolskiDzień dobry
العربيةالسلام عليكم
עבריתשלום
አማርኛሰላም
हिन्दीनमस्ते
বাংলানমস্কার
தமிழ்வணக்கம்
తెలుగునమస్తే
සිංහලආයුබෝවන්
ไทยสวัสดี
ខ្មែរសួស្តី
မြန်မာမင်္ဂလာပါ
བོད་ཡིགབཀྲ་ཤིས་བདེ་ལེགས།
中文你好
日本語こんにちは
한국어안녕하세요
What this exercises:
  • Automatic per-code-point font routing — one mixed paragraph is split into runs and each run dispatched to its embedded CIDFont; Latin stays on Helvetica/Noto Sans.
  • BiDi (UAX #9) — Arabic, Hebrew, and Ethiopic runs are reordered right-to-left and correctly interleaved with left-to-right neighbours and digits.
  • OpenType shaping — GSUB ligatures/conjuncts and GPOS mark positioning for the Indic, Thai, Khmer, Myanmar, Tibetan and Sinhala runs; Arabic joining forms.
  • COLRv1 colour emoji — Noto Color Emoji layers rendered as native PDF vector fills (no rasterization), or monochrome via Noto Emoji.
  • Subsetting — each of the 22+ fonts is subset to only the glyphs used, then embedded as a CIDFont Type2 with Identity-H.

All zero-dependency, all in the browser. The exact same code runs in Node.js, Deno, Bun and Web Workers.