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
| Field | Limit |
|---|---|
| X standard post | 280 weighted characters |
| Bluesky | 300 graphemes and 3,000 UTF-8 bytes |
| Threads API | 500; emoji count by UTF-8 bytes |
| Mastodon default | 500; recognized URLs count as 23 |
| LinkedIn post | 3,000 characters |
| Instagram caption | 2,200 characters |
| YouTube title | 100 characters |
| YouTube API description | 5,000 UTF-8 bytes |
Frequently asked questions
Why does an emoji have several different counts?
Do links always count as 23?
Does this check every publishing restriction?
Why can my Mastodon server accept a longer post?
Will thread splitting cut an emoji or word?
Are my drafts saved or uploaded?
Sources
- Unicode 17 β emoji properties including modifiers (checked 2026-11-14)
- twitter-text β emoji spans and remaining character weights (checked 2026-11-14)
- Mastodon β mention boundaries and domain grammar (checked 2026-11-14)
- X β character weights, emoji, URLs and normalization (checked 2026-11-14)
- twitter-text β configuration v3 (checked 2026-11-14)
- Bluesky β post text schema (checked 2026-11-14)
- AT Protocol β Lexicon string constraints (checked 2026-11-14)
- Threads API β post limitations (checked 2026-11-14)
- Mastodon β primary grapheme-count validator (checked 2026-11-14)
- Mastodon β posting, links and mentions (checked 2026-11-14)
- LinkedIn β post length (checked 2026-11-14)
- Instagram β caption parameter (checked 2026-11-14)
- YouTube Data API β title and description (checked 2026-11-14)
Last reviewed 2026-11-14; next review due by 2027-02-12. The method is written out above so you can check our math.