The number you need is rarely the number in the documentation, because the documentation gives you the hard limit and the thing that affects you is usually the truncation point.
The limits
| Network | Caption limit | Where it actually cuts |
|---|---|---|
| X | 280 | Hard. Longer needs a thread. |
| Bluesky | 300 | Hard, counted in graphemes. |
| Threads | 500 | Hard. |
| 500 | Description; the title is much shorter. | |
| Discord | 2,000 | Per message. |
| 2,200 | Feed shows ~125 before “more”. | |
| TikTok | 2,200 | Overlaid on video; ~100 is readable. |
| 3,000 | Feed truncates around 140–210. | |
| Telegram | 4,096 | 1,024 when attached to media. |
| YouTube | 5,000 | Description; ~157 visible before “more”. |
| 40,000 | Self-post body. | |
| 63,206 | Feed truncates around 250. |
The three that catch people
Telegram's limit drops to 1,024 when there is media attached. A caption that fits a text message will be rejected on a photo post. This is the single most common surprise in the list.
Bluesky counts graphemes, not bytes or code points. An emoji with a skin-tone modifier is one grapheme and several code points. If you are counting in code, [...string].length is closer than string.length but still not exact for combined sequences.
Links usually count, but not always at their real length. Some platforms substitute a fixed-length shortened form for counting purposes. Assume the URL costs its full length unless you have checked, and you will not be caught out.
Truncation is the number that matters
The hard limit tells you when a post is rejected. The truncation point tells you when a reader stops reading, and it is far shorter on every long-form network:
- Instagram shows roughly 125 characters before “… more”.
- LinkedIn cuts around 140 on mobile, a little more on desktop.
- YouTube descriptions show about 157 above the fold.
- Facebook truncates around 250.
Which means the practical rule for cross-posting is: put the whole point in the first 125 characters, and treat everything after that as available but unread. A caption written to that constraint fits every network in the table without editing.
Checking before you publish
Character-counting is easy to get wrong in the direction that costs you — a post rejected at publish time, hours after you queued it, on one network out of six. Two ways to avoid it:
- Count against every network at once while writing, rather than for the one you are focused on. Our character counter does this in the browser with nothing stored.
- Have the composer refuse rather than truncate. Silent truncation is worse than a rejection, because a sentence cut mid-clause reads as carelessness rather than as an error.
PostWharf's composer previews the post per selected network, strikes through exactly what would be cut, and refuses to queue something a network will reject.
Common questions
What is the character limit on each social network?
They range from a few hundred characters to several thousand. The table above lists the current caption limit for X, Threads, Bluesky, LinkedIn, Instagram, TikTok, YouTube, Pinterest, Facebook, Reddit, Telegram and Discord.
Why does the truncation point matter more than the limit?
Because most networks cut a caption off in the feed long before the hard limit. The number that decides whether your first line survives is the truncation point, not the maximum.
How do I check a caption against every network at once?
Paste it into a character counter that holds all the limits together, so you see which networks would truncate it before you publish rather than afterwards.
PostWharf is priced per workspace rather than per connected channel, and every plan carries unlimited channels. See per-brand pricing.