How to use Social post formatter
- Write or paste your post, or try the sample.
- Select a word or phrase and choose Bold, Italic, Monospace or Underline; Remove styling turns it back into plain text.
- Check the character count for each platform, then pick one to preview the post with its line breaks.
- For X, Threads or Bluesky, a post that is too long is split into a numbered thread at sentence breaks. Copy each post.
Bold and italic where there is no formatting
X, LinkedIn, Instagram, Threads and Bluesky accept plain text only, so there is no bold button. What looks like bold in other people's posts is a set of Unicode characters made for mathematics: a separate alphabet that happens to look bold, italic or monospaced. Select a word or phrase, choose a style, and the letters A to Z and the digits are swapped for their look-alikes. Accented letters and other scripts have no such forms and stay as they are. Remove styling swaps them back.
Those characters come at a cost, and you should know it before you use them. A screen reader may read a bold word letter by letter, as mathematical symbols, or skip it altogether, so a post written mostly in styled text can be unreadable to blind followers. Search inside the apps won't match styled words, and X counts each styled letter as two characters. Use styling for a word or two that matters, never for whole sentences or hashtags. Keep it plain counts, previews and copies the post with all styling removed, without changing what you typed.
Counts that match each platform
A simple character count is often wrong for social posts. X counts every link as 23 characters however long it is, counts emoji, Chinese, Japanese and Korean characters as two, and most other letters as one. The tool follows the weights in X's open-source counting library; it spots links with a simpler pattern than X does, so an unusual address may be counted differently. Bluesky's 300-character limit counts what you see as one character, so a family emoji made of several code points counts once. LinkedIn (3,000), Instagram captions (2,200) and Threads (500) don't publish exactly how they count, so the tool uses the strictest common method, the one a web text box uses, where styled letters and most emoji count two. A post that fits here fits there.
Threads, split at sentences
When a post is too long for X, Threads or Bluesky, it is split into a thread. Posts are filled one sentence at a time, so no post ends mid-sentence unless a single sentence is longer than the limit, in which case it breaks between words. Your line breaks and blank lines are kept. Numbers such as 2/6 are added to the end of each post, with room reserved so every numbered post still fits, and you can turn them off. To choose a break yourself, put --- on a line of its own.
Private
Everything happens in your browser as you type. Your draft isn't saved, sent or logged, and closing the tab clears it, so copy your posts before you leave.
Questions
- How is the bold text made?
- With Unicode's mathematical letters, which look bold or italic in any app that shows plain text. They are different characters from normal letters, so screen readers may spell them out or skip them, and search won't match them. Use them for a word or two, or turn on Keep it plain.
- Why does my count differ from a simple character count?
- Each platform counts differently. X counts every link as 23 characters and counts emoji, Chinese, Japanese and Korean characters and styled letters as 2. Bluesky counts what you see as one character. For LinkedIn, Instagram and Threads, which don't publish their method, the tool uses the strict count a web text box uses, so a post that fits here fits there.
- How is a thread split?
- Posts are filled sentence by sentence, keeping your line breaks. A sentence too long for one post is split between words. Numbers such as 3/7 are added to the end of each post, with room left for them, and a line with only --- forces a new post.
- Is my text saved or sent?
- No. Everything happens in your browser as you type. Nothing is stored, and closing the tab clears it.