August 31, 2026
Character limits for every network, and what actually counts
Caption limits are the most common reason a cross-post gets held up, and the number itself is rarely the surprising part. What catches people out is what counts — hashtags do, overrides do not, and one network counts differently from all the others.
Here are the limits PostStage enforces, and the three rules that decide when you hit them.
The limits
| Network | Caption limit |
|---|---|
| 5,000 | |
| Telegram | 4,096 |
| 3,000 | |
| 2,200 | |
| TikTok | 2,200 |
| Discord | 2,000 |
| Google Business | 1,500 |
| 800 | |
| Threads | 500 |
| Mastodon | 500 |
| Bluesky | 300 |
| X | 280 |
| YouTube | title 100, description uncapped |
| Tumblr | uncapped |
| WordPress | uncapped |
Pinterest's 800 is the pin description, not a caption in the usual sense.
YouTube is two fields, not one. The title is capped at 100 characters and is the one that will stop you; the description is effectively uncapped here.
Rule 1: hashtags count
The hashtag field is not free. When your post publishes, PostStage joins the caption and the hashtags into one body:
your caption
#one #two #three
So hashtags cost their own length plus two characters for the blank line between. Twelve hashtags averaging eight characters is about 110 characters — over a third of an X post before you have written anything.
This is why the composer's counter moves when you edit hashtags. It is counting what the network will actually receive, not what is in the caption box.
Rule 2: a per-network override replaces everything
When you write an override for one network, that text becomes the complete final post for it. The shared hashtag field is not appended.
That is usually what you want — the reason to override X is that 280 characters has no room for eleven hashtags — but it does mean hashtags you expect to be there will not be. If you want them on an overridden network, put them in the override text itself.
The counter reflects this: for an overridden network it counts only the override.
Rule 3: Bluesky counts differently
Every other limit here counts the way software naturally counts. Bluesky counts graphemes — what a person would call a character.
The difference shows up with emoji and with several Indic scripts. A single family emoji is one grapheme but several units of ordinary length. A Devanagari syllable with a vowel sign and a conjunct is one character to a reader and several to a counter.
PostStage counts graphemes for Bluesky specifically, so the number you see matches what Bluesky will accept. If you write mainly in English without emoji, you will never notice. If you write in Hindi, Marathi, Tamil or Bengali, the naive count can be nearly twice the real one — and it is the reason a caption that "looks" 40 characters over is often fine.
What happens when you go over
The composer tells you before you schedule, per network, with the network named. It does not truncate.
Truncation is tempting and wrong: a caption cut at 280 characters ends mid-sentence, and the network that received it is the one where your audience is largest. Deciding what to cut is an editorial decision, and it belongs to you.
The practical move for a long post going somewhere short is an override — write the full version once, then a tighter version for X or Bluesky. The rest of the networks keep the original.