Generator Grove

Bubble Text Generator

Circled letters in both flavours, outlined and filled, plus a check that paints every character on this device and tells you which ones your fonts have no glyph for.

Outlined

Filled

Glyph check on this device

Four blocks impersonating one alphabet

Bubble text looks like a single set of characters and is not. The outlined letters come from Enclosed Alphanumerics: capitals at U+24B6 to U+24CF, lowercase at U+24D0 to U+24E9, digits one to nine at U+2460 to U+2468. Zero was added later and sits apart from the rest at U+24EA.

The filled letters live somewhere else entirely, in the Enclosed Alphanumeric Supplement at U+1F150 to U+1F169, above U+FFFF. Filled digits come from a third place, the Dingbats block at U+2776 onward, and filled zero from a fourth, back at U+24FF. A single filled word can draw on three of those at once.

Fonts are built block by block, so a device that renders outlined bubbles perfectly can have nothing for the supplement. That is why filled text is the style people report as broken, and why the check inside the tool exists.

The hole: there is no filled lowercase

Unicode encodes twenty-six negative circled capitals and not one negative circled small letter. Not a partial set, not a scattered handful — none. Any tool that hands you a filled version of a lowercase word has therefore uppercased it, because there is nothing else it could have done.

You get the choice here. Use the filled capital and lose the case; borrow the outlined lowercase, which keeps the word's shape but visibly mixes two weights; or leave the plain letter. There is no fourth option, because the characters were never encoded.

Filled capitals also cost more than they appear to. Sitting above U+FFFF, each one occupies two UTF-16 code units, so a ten-letter filled name spends twenty units against a field limit that counts them. Both panes print their code-unit length underneath for that reason.

Numbers get treated oddly

Unicode encoded whole numbers, not just digits. Ten through twenty each have their own single character — U+2469 to U+2473 outlined, U+24EB to U+24F4 filled — so a 12 in your text can be two bubbles or one. The checkbox applies only to one- and two-digit runs that land in that range, and it is off by default because reading digit by digit is what most people expect.

There is one asymmetry worth knowing. The outlined characters carry compatibility decompositions, so NFKC normalisation turns the circled ten back into the two characters 10 and a circled letter back into a plain one. The filled characters carry no decomposition at all. Where a platform normalises before it indexes, outlined bubble text stays searchable as ordinary text and filled bubble text does not.

Beyond letters and digits there is nothing. No circled punctuation, no circled accented letters, no circled Greek, Cyrillic, Hebrew or CJK in this range, and no way to bubble an emoji. Anything the tool cannot convert is passed through untouched rather than dropped, so your spacing and punctuation survive.

What the glyph check does, and what it cannot do

The check paints each distinct output character onto an off-screen canvas in the same font stack the page displays, then compares the result against a codepoint that is guaranteed to have no glyph. A character that renders identically to that box, or renders as nothing at all, is reported as missing.

It describes this device only. It cannot tell you what a reader on an older phone will see, and it is a heuristic rather than a font-table query. If the two control codepoints disagree with each other — which happens when a browser randomises canvas output to resist fingerprinting — the check disables itself and says so rather than guessing.

Frequently asked questions

Why does the filled style turn my lowercase into capitals?

Because filled lowercase letters were never encoded. The negative circled range covers A to Z and stops. Uppercasing is the default here because it keeps the style consistent, but the dropdown lets you borrow the outlined lowercase or keep the plain letter instead. Whatever you pick, the case information in your original text is not recoverable from the filled output.

Can I convert bubble text back into ordinary letters?

Outlined text, yes: run it through NFKC normalisation in any language with Unicode support and the plain characters come back, because each outlined character records which one it is a variant of. Filled text, no. Those characters record no such relationship, so reversing them means building a lookup table of twenty-six letters and ten digits by hand.

Do bubble letters count as one character each?

Outlined ones do — they sit below U+FFFF, so one character, one code unit. Filled letters are two code units each. Platforms count in code units, codepoints or grapheme clusters depending on who wrote the field, so treat the numbers under each pane as a guide and trust the real field over both.

Will a bubble name still show up in search?

Only for the outlined style, and only on services that normalise before indexing. Filled characters pass through normalisation untouched, so an ordinary-text query never reaches them. Many services normalise nothing, in which case neither flavour is discoverable. If being found matters, put the undecorated spelling into the bio or another field on the same profile.

Accessibility, and where the text is made

State this plainly: bubble text is worse for people using assistive technology. Depending on the reader, a bubbled word may be spelled out one character at a time, announced with each character's full Unicode name, or skipped in silence, and braille output is no better. A decorated name is a name some readers cannot hear, so keep anything carrying real meaning in ordinary letters.

Conversion and the glyph check both run locally. Nothing you type is transmitted anywhere, and the whole tool still functions after you disconnect; the advertising placeholder higher up the page will be third-party and will fetch whatever it needs independently once advertising is enabled. What no page can do is show you a stranger's screen, so send yourself a test message before committing to anything.