A character limit is only half the story. The other half is what each platform counts as a character, and that’s why a post that fits on one network fails on the next.
Limits at a glance
| Platform | Field | Limit |
|---|---|---|
| X | post | 280 weighted (Premium: 25,000) |
| Bluesky | post | 300 graphemes |
| Threads | post | 500 |
| Mastodon | post | 500 by default (set per server) |
| post / headline / About | 3,000 / 220 / 2,600 | |
| caption / bio | 2,200 / 150 | |
| TikTok | caption | 4,000 in the app (2,200 via the API) |
| YouTube | title / description | 100 / 5,000 |
| title / description | 100 / 500 | |
| post | 63,206 | |
| post title | 300 | |
| SMS | one message | 160 GSM-7 characters or 70 Unicode |
Platforms adjust limits from time to time, and some third-party sources disagree (Pinterest descriptions are sometimes listed as 800). The figures above are what we use in our counters and review regularly.
The counting rules that catch people out
X weights characters
X counts with the open-source twitter-text library. Most Latin, Greek and Cyrillic characters weigh 1. Emoji and characters from Chinese, Japanese and Korean weigh 2. Every URL counts as 23, however long or short, because it’s wrapped in a t.co link. So 140 Chinese characters fill a post.
Bluesky counts what you see
Bluesky’s 300 limit counts grapheme clusters (user-perceived characters) so a family emoji or a flag counts once.
Mastodon discounts links and remote names
Links count as 23 characters, and a mention like @[email protected] counts only the @user part.
SMS switches encoding
An SMS is sent in GSM-7 (160 characters, 153 per segment when split) unless any character falls outside that small alphabet (an emoji, a curly apostrophe, an em dash), in which case the whole message becomes Unicode: 70 characters, 67 per segment. One smart quote can double the cost of a message.
The fold matters more than the limit
Feeds truncate long posts. Roughly the first 125 characters of an Instagram caption and 210 of a LinkedIn post show before “…more”, depending on device and line breaks. Put the hook there.
Practical tips
- Draft once, check everywhere. A multi-platform counter avoids surprises.
- Split long text deliberately. A thread splitter that breaks at sentences reads better than one that cuts mid-thought.
- Use CamelCase hashtags (#WritingTips) so screen readers pronounce them.
- Avoid styled Unicode “fonts” for important words: they’re hard for screen readers and search.
Sources
- X Developer Platform, “Counting characters”, and the twitter-text configuration on GitHub.
- Bluesky documentation on post length (300 graphemes).
- YouTube Help: video chapters requirements.
- 3GPP TS 23.038, GSM 7-bit default alphabet.