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.
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 |
|---|---|
| English | Hello |
| Ελληνικά | Γειά σου |
| Русский | Здравствуйте |
| ქართული | გამარჯობა |
| Հայերեն | Բարև |
| Türkçe | Merhaba |
| Tiếng Việt | Xin chào |
| Polski | Dzień dobry |
| العربية | السلام عليكم |
| עברית | שלום |
| አማርኛ | ሰላም |
| हिन्दी | नमस्ते |
| বাংলা | নমস্কার |
| தமிழ் | வணக்கம் |
| తెలుగు | నమస్తే |
| සිංහල | ආයුබෝවන් |
| ไทย | สวัสดี |
| ខ្មែរ | សួស្តី |
| မြန်မာ | မင်္ဂလာပါ |
| བོད་ཡིག | བཀྲ་ཤིས་བདེ་ལེགས། |
| 中文 | 你好 |
| 日本語 | こんにちは |
| 한국어 | 안녕하세요 |
- 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.