Free tool · runs in your browser
X post character counter
X does not count characters, it counts weight. A link is 23 no matter how long it is, a Chinese character is 2, and a family emoji made of eleven code points is 2 — not 22. This counter implements those published rules, and shows you which parts of your post were reweighted and by how much.
- 280 weighted characters
- Links = 23
- Emoji sequences kept whole
Count a post
Live, as you type. The count updates in an aria-live region, so it is announced rather than only shown.
Type or paste. Nothing is sent anywhere — the count is computed in this tab.
How X actually counts a post
The limit is 280, but the unit is not the character you typed. X publishes a weighted counting configuration — the same one its own compose box uses — and it works like this: every character gets a weight, weights are summed, and the total is compared against 280. Most characters weigh 1. Everything outside a small set of ranges weighs 2. Links are replaced with a fixed cost before any of that happens.
- Limit
- 280 weighted characters
- Weight 1
- U+0000–U+10FF (Latin, Latin-1, Latin Extended, IPA, Greek, Cyrillic, Hebrew, Arabic, Thai, Georgian) plus the general-punctuation ranges U+2000–U+200D, U+2010–U+201F and U+2032–U+2037
- Weight 2
- Everything else — CJK, Hangul, Hiragana, Katakana, Devanagari, most emoji, mathematical alphanumerics
- Any URL
- 23, regardless of its real length, http or https
- Emoji sequence
- 2 for the whole sequence, however many code points it is built from
- Normalization
- Text is normalized to NFC before counting
Why links are always 23
X rewrites every link in a post as a t.co short link, and bills the post for the length of the short link rather than the original. That length is currently 23 for both http:// and https://. The consequence is counter-intuitive but useful: a 400-character tracking URL costs you 23 characters, and a 15-character link also costs 23. Shortening a URL before you post it saves you nothing.
Why an emoji is 2 and not 11
A single visible emoji is often several Unicode code points glued together. 👨👩👧👦 is four people separated by three zero-width joiners — seven code points, eleven UTF-16 units. ❤️ is a heart plus a variation selector. 🇺🇸 is two regional-indicator letters. X counts the whole visible sequence as one item weighing 2. A counter that iterates over code points reports 22 for the family emoji and tells you your post is over when it is not, which is the single most common way these tools get it wrong. This one segments text into grapheme clusters first, so the sequence stays intact.
The caveats worth knowing
- X is the authority, not this page. A real post is validated server-side by X. These rules are X's own published ones, faithfully implemented, but X can change them — its documentation says as much — and a discrepancy is X being right.
- Bare hostnames are the fuzzy edge. X runs the full IANA top-level-domain list to decide whether
something.tldis a link. We recognise anything withhttp://orhttps://, anything startingwww., and bare hosts on common TLDs. A bare host on an unusual TLD may be counted here as plain text and by X as 23. Writing the scheme in front of it removes the ambiguity. - Mentions and hashtags are ordinary text.
@nameand#tagare not reweighted or shortened; they cost exactly their characters. - Attached media does not consume characters. Images, video and quoted posts do not count against the 280.
If you are over the limit
Two honest options. Cut, or split. If the text genuinely needs the room, the thread splitter breaks it at sentence boundaries and budgets the same weighted count per post, including the numbering prefix — which is easy to forget, because "12/34 " is six characters you no longer have.
Nothing you paste or open is uploaded.
Your draft stays in this tab. Counting is arithmetic over a string; it needs no server, so there is not one. You can confirm it: open your browser's network panel and use the tool. The only requests you will see are for this page's own code and for pages you might click to next — none of them carries what you typed.
Other free tools
- Thread splitterPaste long text and get a numbered thread split on sentence boundaries, never mid-word.
- Bookmark sync cost calculatorWhat reading N bookmarks actually costs on X's pay-per-use API, at the current published rates.
- Bookmark export converterConvert a CSV or JSON bookmark export to Markdown, CSV or JSON. In-browser, no upload.
- X archive explorerOpen your official X data archive and search your posts and likes locally. Nothing leaves the tab.
Built by the people who sort your bookmarks for you
Sift imports your X bookmarks, sorts them into categories and emails you a digest. The free plan imports your newest 100 bookmarks — a cap, not a trial, because reading them costs real money.