Social Media Character Limits 2026: X, Bluesky, LinkedIn & More
Current character limits for X, Bluesky, LinkedIn, Instagram, Threads, Mastodon and TikTok in 2026 - and how each counts emoji, URLs and multibyte text.
In 2026 the headline post limits are: X 280 characters (25,000 with Premium), Bluesky 300, Threads and Mastodon 500, Instagram and TikTok 2,200-character captions, and LinkedIn 3,000. The catch is what counts as one character - emoji, shortened URLs, and complex scripts are measured differently on each platform, so identical text can fit one and overflow another.
Here’s where every limit stands in 2026 and what each platform is actually measuring.
The headline numbers
| Platform | Post limit | URL handling | Emoji counting |
|---|---|---|---|
| X (Twitter) | 280 (free), 25,000 (Premium) | Shortened to 23 chars | 2 code points = 2 “weight” |
| Bluesky | 300 | Not shortened | Grapheme clusters |
| 3,000 | Not shortened | UTF-16 code units | |
| 2,200 (caption) | Not shortened | UTF-16 code units | |
| Threads | 500 | Not shortened | Grapheme clusters |
| Mastodon | 500 (default, server-configurable) | Not shortened | UTF-16 code units (varies by server) |
| TikTok | 2,200 (caption) | Not shortened | UTF-16 code units |
| 63,206 | Not shortened | UTF-16 code units |
These numbers shift — platforms raise limits, premium tiers change — but the structure of “what counts” is more stable.
The four ways platforms count characters
1. UTF-16 code units
This is what JavaScript’s String.prototype.length returns. Characters in the Basic Multilingual Plane (the first ~65k Unicode code points, covering most living languages) count as 1. Characters outside it — including most emoji, many ancient scripts, and mathematical symbols — count as 2.
"hello".length // 5
"👋".length // 2
"Привет".length // 6
"你好".length // 2
Instagram, LinkedIn, Mastodon (default server config), and TikTok all use UTF-16 code units. A post with a wave emoji burns 2 of your characters even though visually it’s one character.
2. Grapheme clusters
A grapheme is what a human perceives as a single visible character. 👨👩👧👦 (family emoji) is a grapheme consisting of four emoji joined by zero-width joiners. A grapheme-counting platform treats it as 1 character. A UTF-16 counting platform treats it as 11 (each emoji takes 2, plus the joiners).
Bluesky and Threads use grapheme clusters. This is the most user-friendly approach: what you see is what’s counted.
3. “Weighted” characters (X / Twitter)
Twitter, since around 2018, uses a hybrid scheme. Most Basic Latin and some common extended ranges (Latin-1, some CJK) count as 1. Other characters count as 2. The rationale was to give Latin-alphabet writers the same effective space as CJK writers, but it produces its own complications.
A tweet in Russian, Arabic, or Hebrew uses characters that count as 2 each. A tweet using mostly emoji burns through the 280 limit very fast. A tweet in English with a couple of em-dashes counts those em-dashes as 2 each.
The weight table is published by Twitter as part of their twitter-text library. Use their reference implementation if you’re building a counter that needs to match Twitter’s backend exactly.
4. URL substitution
Twitter is the prominent platform that automatically shortens URLs. Any URL you paste is replaced by a t.co link that counts as 23 characters regardless of the length of the original URL. A 200-character URL and a 20-character URL both take 23 characters from your limit.
Bluesky, Threads, and Mastodon don’t do this. A 200-character URL eats 200 characters of your post.
The UTF-8 byte angle
Some platforms, particularly older ones and smaller Mastodon servers, count by UTF-8 bytes rather than any character unit. UTF-8 byte counts:
- ASCII (most English letters, digits, punctuation): 1 byte
- Latin with accents, Greek, Cyrillic: 2 bytes
- CJK, most emoji: 3 bytes
- Other emoji, some historic scripts: 4 bytes
A post in Japanese is 3× the byte count of an equivalent-length English post. On a platform that enforces byte limits, this matters.
Our Character Counter shows all three metrics side-by-side: code points, grapheme clusters, and UTF-8 bytes. If you’re targeting a platform whose counting method you don’t know, all three at once resolves the ambiguity.
The practical differences
Emoji-heavy posts
An 8-emoji string on Bluesky takes 8 characters. On Instagram, it takes 16. On Twitter, it takes 16 “weight” units (close to Instagram’s count for most emoji).
Posts with many URLs
Three URLs in a single tweet cost 69 characters (3 × 23), regardless of URL length. The same three URLs on Bluesky cost whatever the URLs actually are — a few hundred characters for typical links, leaving no room for the rest of the post.
Cross-posting identical content
A post that fits in 500 characters on Threads (grapheme clusters) might not fit in 500 characters on a Mastodon instance that counts UTF-16 code units — if the post includes emoji or combining characters. It’s a subtle gotcha when using cross-posting tools.
Writing in non-Latin scripts
Writing in Russian, Arabic, Hindi, or Thai burns characters faster on Twitter (2-weight) than on Bluesky (1 grapheme) for the same visible content. This effectively shortens the Twitter allowance for those languages.
A concrete example
Consider this string:
Excited to announce 🎉 our new product! Check it out: https://example.com/blog/our-new-product
On each platform, this is:
- Twitter: 52 (text, up to URL) + 1 (emoji weight) + 23 (t.co URL) + 1 (space before URL) = 77 weight units
- Bluesky: ~75 grapheme clusters (emoji = 1)
- Instagram: ~76 UTF-16 units (emoji = 2, URL counted literally — wait, plus the rest)
- Mastodon: Similar to Instagram, depending on server config
If you’re planning a cross-platform post and trying to hit the tightest limit, start with Twitter’s rules. Anything that fits Twitter’s counter will usually fit everywhere else, with margin.
What changed in recent years
- X Premium raised the effective limit to 25,000 characters, but the free tier remains at 280. Most external tools assume 280.
- Threads launched in 2023 with a 500-character limit and grapheme counting.
- Bluesky adopted grapheme counting from launch.
- Mastodon’s per-instance configurability makes “Mastodon’s character limit” ambiguous — most public instances stick to 500 UTF-16 units, but some raise it.
- LinkedIn quietly raised post limits from 1,300 to 3,000 in 2023.
Tools for cross-platform workflow
Our Social Media Character Counter tracks limits for all the platforms listed above in a single counter, so you can see at a glance whether a draft fits everywhere.
For Twitter specifically, if you’re embedding a link and want to preview what the link card will look like, the Twitter Card Preview renders what X will show for a given URL’s Open Graph metadata.
The meta-takeaway
Character limits aren’t really about characters — they’re about visible complexity, server storage, and a platform’s decisions about fairness across languages and writing systems. When you hit a limit unexpectedly, the fix usually isn’t to trim words; it’s to understand which of the four counting methods the platform uses and shape your text to that.
For anything important that must land within a specific platform’s limit, test with that platform’s own counter (or one that matches it). Third-party counters that use “characters” as if it were a single well-defined concept will quietly disagree with the platform that actually publishes your post.
Tools mentioned in this article
- Character Counter - Count characters with platform-specific limits for Twitter, Instagram and more.
- Social Media Character Counter - Check character counts against limits for Twitter, Instagram, LinkedIn, Facebook, YouTube, and TikTok.
- Twitter Card Preview - Preview how your page looks when shared on Twitter/X with meta tag generation.