Bold on X: what works and what does not
X renders plain text. The composer has no bold or italic control for a standard account; Premium subscribers get a formatting option, but that is a small minority of the people reading and replying. Paste a bold word from Google Docs and it arrives plain. Paste a ChatGPT draft and the bold arrives as **asterisks**, because ChatGPT writes markdown and X does not read it. The workaround that has survived every redesign, rename and algorithm change is Unicode: the standard contains complete alphabets of bold, italic and bold-italic letters, originally for mathematics, and X treats them as ordinary characters because they are. Select a word above, click B, and the word is rewritten in those characters. It will show in bold on every client, in quotes and in screenshots, because there is no formatting to strip.
How X counts: the part every other formatter gets wrong
The 280-character limit is not 280 characters. X assigns every character a weight and adds the weights up; the limit is 280 weight. Most text is one per character, but three things are not, and bold text is one of them. The counter on this page is set to X and uses the same rules, so you never paste a post that reads 280 here and 410 on X.
The bare-domain rule (example.com without http) is an approximation of what X auto-links; a link you paste with https:// is always counted at 23.
The practical consequence: a fully bold post holds about 140 characters, not 280. Bold the hook β the first three or four words, a number, a name β and leave the rest plain. That is also what reads best. A timeline full of bold is a timeline where nothing stands out.
Formatting an AI draft for X
- Markdown goes.
**bold** becomes Unicode bold, # headings become plain lines, dash lists become β’ bullets, and link syntax becomes a readable address. - Hidden characters go.Zero-width spaces, non-breaking spaces and the narrow space ChatGPT hides in β3 PMβ are removed. X counts them, and some clients draw them as boxes.
- Em dashes are your call.They are the most recognised AI tell on X, where screenshots of em-dash-heavy posts are a genre. Set βEm dashesβ in the preferences to comma or hyphen; the em dash remover explains the choice.
- Emoji cost double. An AI draft with an emoji per line spends its budget fast. The Remove emojis toggle clears them in one pass; add back the one you want.
Threads of posts, replies and long posts
When a draft is longer than one post, the usual move is a thread: split it at paragraph breaks, number the posts if you like, and keep each under the limit with its own hook. Paste the whole draft here, clean it once, then copy a paragraph at a time β the counter updates as you select. Premium accounts can instead publish a single long post of up to 25,000 characters, which the timeline shows truncated with a Show more link; Unicode bold works there too, though the same restraint applies.
Replies and quote posts have the same 280 limit and the same weights, and a reply from a Premium account to a non-Premium reader is still read in plain text, which is why Unicode bold remains the portable choice even for subscribers.
Hashtags, handles, links and alt text
Keep anything X has to recognise in plain characters. A bolded #hashtag is just text; a bolded @handle does not mention anyone; a bolded domain is not a link. Links are counted at 23 but displayed as the original address, and one link per post is the usual advice. Alt text on images has its own 1,000 character field and is read by screen readers, so leave it plain as well. Everything else β the hook, the punchline, a number worth noticing β is fair game.
Related tools
Private and free
The formatting runs in your browser with client-side JavaScript. Your post is never sent to a server, stored or logged. No account, no limits, no watermark.