Skip to main content
Text Tools

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.

By · · 7 min read

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

PlatformPost limitURL handlingEmoji counting
X (Twitter)280 (free), 25,000 (Premium)Shortened to 23 chars2 code points = 2 “weight”
Bluesky300Not shortenedGrapheme clusters
LinkedIn3,000Not shortenedUTF-16 code units
Instagram2,200 (caption)Not shortenedUTF-16 code units
Threads500Not shortenedGrapheme clusters
Mastodon500 (default, server-configurable)Not shortenedUTF-16 code units (varies by server)
TikTok2,200 (caption)Not shortenedUTF-16 code units
Facebook63,206Not shortenedUTF-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

Related articles