Social post character counter

Paste a draft to compare platform length limits and see the remaining allowance. Split a longer draft into numbered posts for X or Bluesky.

Count a draft locally against platform limits. JavaScript enables live results and thread splitting.

How it works

Counts are integers; no rounding is used. Remaining allowance is the published limit minus the counted length. X uses NFC-normalized text and twitter-text configuration v3 weights: the specified light ranges count once, other code points twice, matched emoji sequences twice, unmatched combining marks by their code-point weight, and recognized URLs count as 23. Bluesky uses Intl.Segmenter grapheme clusters and also checks its 3,000 UTF-8 byte cap.

Mastodon counts graphemes, HTTP(S) links as 23, and mentions without the remote domain. Its 500 limit is the server default. Content-warning text is not included here. Threads API documentation says emoji count by UTF-8 byte length; this tool applies that rule to emoji clusters, including standalone skin-tone modifiers, and counts other code points once.

LinkedIn, Instagram and YouTube title documentation does not fully specify how Unicode characters are counted. Their rows use code points and are labeled estimates. YouTube API descriptions are checked in UTF-8 bytes, as its documentation specifies, rather than assuming 5,000 visible characters. YouTube also disallows angle brackets in these fields.

Local URL recognition covers HTTP(S), www and bare alphabetic or internationalized domains, excludes email addresses, and removes trailing punctuation. It does not bundle twitter-text’s public suffix tables or exact emoji-version data, so X and Mastodon results are estimates for unusual links and Unicode sequences. Check the platform composer before publishing.

Thread splitting reserves space for each suffix such as 1/3 and repeats until the total is stable. It preserves whitespace inside posts but trims it at post boundaries. Words and URLs are indivisible; a token too long for one post produces an error. Application limits are 20,000 input bytes, 10,000 lines, 50 generated posts and 10 numbering passes.

Worked examples

A short link on X

Hello https://example.com counts as 5 letters + 1 space + 23 for the URL = 29. That leaves 251 of the standard 280 allowance. Bluesky counts the actual 25 graphemes, leaving 275.

An emoji sequence

A πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ has 3 graphemes. X counts 1 + 1 + 2 = 4, leaving 276. Its UTF-8 representation uses 27 bytes, which is also the count under the documented Threads API emoji rule.

Splitting a simple draft

A draft containing the word hello 100 times, separated by single spaces, is 599 characters. Both splitters produce 3 posts. On X the numbered posts use 279, 279 and 51 weighted characters. On Bluesky they use 297, 297 and 15 graphemes.

Limits checked on 14 November 2026

FieldLimit
X standard post280 weighted characters
Bluesky300 graphemes and 3,000 UTF-8 bytes
Threads API500; emoji count by UTF-8 bytes
Mastodon default500; recognized URLs count as 23
LinkedIn post3,000 characters
Instagram caption2,200 characters
YouTube title100 characters
YouTube API description5,000 UTF-8 bytes

Frequently asked questions

Why does an emoji have several different counts?
A visible emoji can contain multiple Unicode code points. Intl.Segmenter treats a family sequence as one grapheme; X assigns the sequence weight 2. UTF-8 bytes and UTF-16 units measure encodings, not visible characters.
Do links always count as 23?
Recognized links count as 23 on X and Mastodon. Other rows count their actual text. X recognizes some bare domains; Mastodon requires an HTTP(S) scheme. This local detector can differ on unusual addresses.
Does this check every publishing restriction?
No. This checks draft length. It does not check account eligibility, link policies, attachment restrictions, hashtag limits or whether a platform accepts every character. Premium long posts and Threads text attachments are outside the comparison.
Why can my Mastodon server accept a longer post?
The documented default is 500 characters, but servers can change it. Check your server’s composer. Content warnings also consume allowance and must be accounted for separately.
Will thread splitting cut an emoji or word?
No. Whitespace-delimited tokens stay together. If a single token exceeds the numbered-post allowance, the splitter asks you to add a space or shorten it. It does not post or publish anything.
Are my drafts saved or uploaded?
No. Processing happens in this page, and there is no draft storage. Copy the result before leaving or refreshing.

Sources

Last reviewed 2026-11-14; next review due by 2027-02-12. The method is written out above so you can check our math.