ZeroUtil
Text Tools

Character Limits on Social Platforms in 2026: What Actually Gets Counted

Current character limits for X, Bluesky, LinkedIn, Instagram, Threads, Mastodon, and TikTok — and how each counts emoji, URLs, and multibyte characters differently.

By · · 7 min read

Every social platform enforces a character limit. What counts as “a character” varies between them in ways that matter more than you’d think — especially if you write in a language with complex scripts, use emoji, or paste links.

Here’s where the limits stand 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