About bubble text
Bubble text is plain Unicode dressed up to look like letters trapped in circles. The generator maps each ASCII character to a codepoint in the U+24B6 to U+24E9 Enclosed Alphanumerics range (outline bubbles) or to U+1F150 to U+1F169 in the Enclosed Alphanumeric Supplement (filled bubbles), then concatenates the result. Nothing about the styling lives in CSS, so the circles travel intact into Instagram bios, TikTok display names, Discord nicknames, and any other field that accepts raw Unicode.
How it works
The algorithm is a single-pass lookup table. For every input code point, the generator checks whether the character has a bubble equivalent in the chosen block, substitutes it, and falls through to the original character if no mapping exists. There is no randomness, no server call, and no statefulness; the same input always produces the same output.
outline_bubble(c) = c in [A-Z] ? U+24B6 + (c - 'A')
: c in [a-z] ? U+24D0 + (c - 'a')
: c in [0-9] ? U+2460 + (c - '1') (1-9)
: U+24EA (0)
filled_bubble(c) = c in [A-Z] ? U+1F150 + (c - 'A')
: c in [a-z] ? U+1F170 + (c - 'A') (Microsoft renders filled lowercase as filled uppercase)
: c (unchanged)
The Mixed style alternates between the two tables based on character index, producing the Ⓜ🅸🆇🅴🅳 pattern visible above.
Worked example
Take the four characters Hi 7 (capital H, lowercase i, space, digit 7) and pass them through each style:
- Outline bubble: H (U+0048) maps to Ⓗ (U+24BD). i (U+0069) maps to ⓘ (U+24D8). Space (U+0020) has no entry, so it passes through unchanged. 7 (U+0037) maps to ⑦ (U+2466). Result:
Ⓗⓘ ⑦. - Filled bubble: H maps to 🅗 (U+1F157). i has no filled lowercase entry in the Supplement block, so the generator falls back to filled uppercase 🅘 (U+1F158). Space passes through. 7 has no filled-digit codepoint in the block, so it stays as 7. Result:
🅗🅘 7. - Mixed: index 0 (H) uses outline -> Ⓗ. Index 1 (i) uses filled -> 🅘. Index 2 (space) unchanged. Index 3 (7) uses outline -> ⑦. Result:
Ⓗ🅘 ⑦.
Unicode block reference
Bubble letters do not all live in the same block. Coverage gaps are the main reason output sometimes shows boxes on the receiving device.
| Style | Block | Range | Coverage |
|---|---|---|---|
| Outline uppercase A-Z | Enclosed Alphanumerics | U+24B6 to U+24CF | Universal since Unicode 1.1 (1993) |
| Outline lowercase a-z | Enclosed Alphanumerics | U+24D0 to U+24E9 | Universal since Unicode 1.1 |
| Outline digits 1-9, 0 | Enclosed Alphanumerics | U+2460 to U+2468, U+24EA | Universal since Unicode 1.1 |
| Filled uppercase A-Z | Enclosed Alphanumeric Suppl. | U+1F150 to U+1F169 | Added in Unicode 5.2 (2009); patchy on pre-2015 Android |
| Negative circled digits | Dingbats | U+2776 to U+277E | Universal but visually inconsistent across fonts |
Common pitfalls and limitations
- Accessibility cost. Screen readers (VoiceOver, NVDA, TalkBack) read Ⓗ as "circled capital H", not as "H". A bubble-text bio becomes an exhausting verbal slog for blind users. The W3C WCAG 2.1 success criterion 1.3.1 (Info and Relationships) explicitly flags Unicode style swaps as an accessibility failure.
- Search invisibility. Twitter, Instagram, and most platform search engines index by raw Unicode, not by NFKC normalisation, so Ⓢⓐⓛⓔ will not appear for a search of "sale". Avoid bubble text in copy meant to be discoverable.
- Filled lowercase tofu. The Enclosed Alphanumeric Supplement block has no filled lowercase letters; the generator substitutes filled uppercase. On older Android phones (below Android 7) and Windows 7, even the uppercase versions render as .notdef boxes.
- Username vs bio. Instagram, TikTok, Twitter, Facebook, and YouTube all restrict @handle to ASCII; bubble characters only work in the display name and bio fields.
- Copy-paste corruption. Some apps (Slack, older Microsoft Teams, some email clients) silently normalise Unicode to ASCII on paste, stripping the bubble effect.
Frequently asked questions
Why does bubble text sometimes look like boxes on my friend's phone?
The receiving device must have a font that includes the U+24B6 to U+24E9 Enclosed Alphanumerics block. Most modern phones and desktops do, but older Android builds, Windows 7, and some custom Linux setups ship fonts that lack these glyphs and display a .notdef box (tofu) instead. Filled bubble letters (U+1F150 to U+1F169) are in the Enclosed Alphanumeric Supplement block and have even patchier coverage, especially on pre-2018 devices.
Can screen readers read bubble text?
Mostly yes, but awkwardly. VoiceOver and NVDA read U+24B6 (Circled Latin Capital Letter A) as "circled capital A" rather than just "A", so a bubble-text bio reads aloud as "circled capital H circled lowercase e circled lowercase l circled lowercase l circled lowercase o". The W3C explicitly discourages using Unicode style variants for emphasis precisely because they are read this way. Use it for visual flair, not for important content.
Is bubble text allowed in Instagram and TikTok usernames or bios?
Bios accept the full Unicode range on both platforms. Usernames are tighter: Instagram allows only ASCII letters, digits, period, and underscore; TikTok allows letters, digits, period, and underscore. So bubble characters are blocked at the @handle layer but fine in the display name and bio. Twitter/X allows them in display name only.
Will bubble text hurt my search ranking on Twitter or Google?
Yes, when used in indexable copy. Search engines and platform search index by normalised characters (NFKC), but social search uses naive substring matching: a post saying "Ⓢⓐⓛⓔ" will not surface for a query of "sale". Keep bubble characters out of post bodies and hashtags. They are safe in display names where discoverability does not matter.
Sources and further reading
- Unicode Consortium (2024) Enclosed Alphanumerics, U+2460 to U+24FF.
- Unicode Consortium (2024) Enclosed Alphanumeric Supplement, U+1F100 to U+1F1FF.
- W3C (2018) Web Content Accessibility Guidelines 2.1, success criterion 1.3.1 Info and Relationships.
- Unicode Consortium (2024) UAX #15 Unicode Normalization Forms (NFC, NFD, NFKC, NFKD).
