FormattingX

How to make bold text on X (Twitter)

X has no bold button. Bold text on Twitter is Unicode characters that look bold, and here is what that costs you in accessibility, search and characters.

September 20, 2026The bbuddy team9 min read

X has no bold button. There is no formatting in the composer at all, no bold, no italic, no markdown, so the only way to get bold text on Twitter is to paste characters that are already drawn bold: substitutes from a Unicode block called Mathematical Alphanumeric Symbols, swapped in one for each letter you typed. It works in a post, in a bio and in a display name, and it survives the paste because X is not formatting anything. It is showing you the characters you gave it.

Doing that takes about ten seconds. The part the generators leave out is what it costs: stylised letters are not letters, and three specific things break when you use them.

Why there is no bold button on X

A post on X is a single plain text field. The composer gives you line breaks and nothing else, and the same is true of your bio, your display name and your alt text. Paste formatted text in from a document and the formatting is stripped on the way, and there is no markdown fallback either: asterisks around a word stay asterisks.

That is a decision rather than an oversight. One string has to render in a timeline, a quote post, a notification, an embed on somebody else's site and an API response, and a field with no styling renders the same in all of them. It also avoids an arms race: if bold were available, every post competing for attention in the same feed would be bold inside a week and the advantage would be gone. Nothing inside X will change that, so everything below is a workaround that happens outside it.

What the Unicode substitution actually is

Unicode has a block called Mathematical Alphanumeric Symbols, running from U+1D400 to U+1D7FF. It exists for mathematical notation, where a paper needs to distinguish the vector B from the scalar B, so the standard encodes a separate bold B, a separate italic B, a separate script B and so on as distinct characters with their own meanings. Twelve of those styles are in general use, from bold and italic through script, fraktur, double-struck and monospace.

A font generator walks your text and swaps each A to Z and a to z for its counterpart in the style you picked. That is the entire mechanism: no font is loaded, no styling applied, no markup involved. The output is a string of different characters that happen to be drawn as a heavy version of what you typed, and you can paste it anywhere that accepts text.

Two details give the trick away immediately. Only five of the twelve styles have real digits: bold, double-struck, sans-serif, sans-serif bold and monospace. There is no italic 3 and no script 7, because a mathematician does not italicise a numeral, so Unicode never encoded one. And the block covers the unaccented Latin alphabet only, so an é, a ß, a word in Greek or Cyrillic, an emoji and every piece of punctuation pass through untouched. A styled French or German line comes out as a mix of heavy and plain letters.

The three real costs

None of these surface at the moment you paste.

A screen reader spells it out. Assistive technology does not recognise a mathematical bold B as the letter B. It falls back to announcing the character by name, one at a time, so a stylised word becomes a slow string of spelled-out mathematical symbols rather than a word. On a display name that costs a listener one mangled item. On a full bio it means the part of your profile that explains who you are cannot be listened to at all.

Search stops matching. A styled word is a different string from the plain one, so an exact-match search for the plain spelling does not find it. That applies to X's own search and to any search engine indexing your profile page. The trap is that styling gets used on exactly the words that matter: the job title, the city, the niche. The rest of that thinking is in the guide to what goes in a bio.

It costs double against the limit. X weighs characters rather than counting them: anything outside the Latin, Cyrillic, Greek, Hebrew and Arabic ranges weighs 2, and every character in this block sits well above U+FFFF, far outside them. A ten-letter word in bold is 20 of your 280. A 160-character bio written entirely in bold weighs 320 and simply will not save. The full mechanic, including why emoji and Japanese behave the same way, is in the character limit guide.

2xWeighted character costStyled letters sit outside the light ranges, so X charges 2 each
80Styled characters a bio holdsThe bio limit is 160, and each styled letter weighs 2
24Empty slots in the blockReserved positions that render as a box if a tool emits them

Where it is fine, and where it is not

The costs are bounded, and they scale with how much text you style. That gives a usable rule: style something short and decorative, never something long or load-bearing.

Fine. A display name, which has 50 characters to play with and is decoration rather than an index. A one-word tagline. A single label used as a marker, like the word at the head of each post in a series. In each case the bill is one mangled item for a listener, one word that stops matching and a handful of extra characters: a fair trade for standing out in a feed where nobody else can use weight.

Not fine. The body of a post, where every stylised sentence costs double and reads as symbols to anyone listening. A whole bio, for the same reason twice over. Anything containing a keyword you want to be found by. And alt text, the sharpest case of all: it exists for precisely the reader that stylised characters break, so styling it removes the only thing it was there for.

Your handle is not an option either way. X allows letters, numbers and underscores only in a username, so there is nothing to substitute and the paste simply fails. If that is what you were trying to solve, the actual levers are in the guide to choosing a username.

One more case, because it is the most common reason people reach for bold at all: trying to stop the important line getting lost or truncated in the timeline. Styling does not fix that and it makes the post cost more. The structural fix is in why your posts get cut off.

Why it sometimes shows up as boxes

The empty rectangle people call tofu means the device could not draw the character. Two different things cause it, and only one of them is your fault.

The first is the reader's device. Rendering these characters needs a font that covers the block, and not every system ships one. Some older Android builds and plenty of locked-down corporate Windows images carry a reduced font set, and anything outside it comes out as boxes. They see a row of rectangles where your name should be, with no hint of what it was meant to say.

The second is the generator. The block has 24 permanently reserved positions that are empty and always will be, because the characters that belong there were encoded years earlier in a different block, Letterlike Symbols at U+2100 to U+214F. Script capital H lives there as ℋ, so the slot for it in the mathematical block is empty forever. A tool that builds its map by adding a fixed offset to each letter lands on those holes and emits codepoints that do not exist, which render as tofu everywhere. Script capital H is the usual casualty. A correct implementation patches each hole back to the real character.

You cannot test either problem on the device you made it on, which is the trap: it looks perfect on your phone. Before you commit a display name to a style, check it on a second device you did not choose.

None of this makes the trick worthless. It makes it a trade: visual weight in a feed where nobody else has any, paid in accessibility, in matching and in double characters. On a display name that is cheap. On a bio it is not. The rest of the X mechanics where the obvious answer and the working answer have quietly separated are collected in the X guides.

Frequently asked questions

Can you make text bold on X?

Not with formatting. X has no bold button and the composer takes plain text only, so there is nothing in the app that will make a word bold. What people do instead is paste characters that are already drawn bold, substituted from the Unicode block called Mathematical Alphanumeric Symbols. X treats them as ordinary text, which is why they survive the paste, but they are not the letters they look like.

How do you make bold text on Twitter?

Type your text into a font generator, copy the bold line it produces, and paste it into your post, your bio or your display name. The generator swaps each letter for a different Unicode character that happens to be drawn bold. Nothing is installed and nothing is applied to your account, because the result is just text you pasted.

Does bold text count as more characters on X?

Yes, exactly twice as many. X weighs characters rather than counting them, and anything outside the Latin, Cyrillic, Greek, Hebrew and Arabic ranges weighs 2. Almost every styled letter sits outside those ranges, so a ten-letter word in bold costs 20 of your 280. A 160-character bio written entirely in bold weighs 320 and will not save.

Is bold text on X bad for accessibility?

For anything longer than a word or two, yes. A screen reader does not recognise a mathematical bold B as the letter B, so it announces the characters one at a time as symbols instead of reading the word. A styled display name costs a listener one mangled word. A styled bio or a styled post is unreadable to them.

Does bold text hurt your search visibility on X?

It stops the word matching. A styled word is a different string from the plain one, so somebody searching the plain spelling will not find it, on X search or in a search engine indexing your profile. That matters most in the one place people like to use styling: a bio, where the keyword you want to be found by is usually the word being styled.

Can you make text italic on X?

The same way and with the same trade-offs. Unicode encodes a mathematical italic alphabet alongside the bold one, so a generator can substitute it, and X will display what you paste. One quirk: there are no italic digits. Unicode encoded mathematical digits for only five styles, so numbers come through as plain ASCII in an italic line.

Why does my fancy text show up as boxes or question marks?

Either the device has no font covering those characters, which happens on some older Android builds and locked-down corporate Windows machines, or the generator emitted a codepoint that does not exist. The Unicode block has 24 permanently empty positions, and a generator that just adds a fixed offset to each letter lands on them. Script capital H is the usual casualty.

Free toolX (Twitter) Character CounterCounts what X counts, not what your text editor counts. Links weigh 23, emoji weigh 2, and Japanese weighs double. Free, no account, nothing you type leaves your browser.
Try it for your brand

Your AI co-worker for social media.

Five minutes to set up. Drafts in your voice from the first session.

Start with email