Skip to content

FREE TOOL

Tweet Character Counter

The Tweet Character Counter is a browser tool that measures a post the way X measures it, which is by weight rather than by raw character count. Ordinary Latin text weighs 1 per character, emoji and CJK glyphs weigh 2, and every link is replaced by a flat 23 whatever its real length. Type into the box and the count updates live against the 280 limit. Nothing you type leaves your browser.

280

Weighted characters remaining against the 280 standard limit.

Weighted

0

Characters

0

Links

0

Mentions

0

Weighted is the number X measures against the limit. Characters is the raw count of code points in the box. The two differ whenever the text holds a link, which is fixed at 23 weighted characters however long it is, or a character outside the light-weight ranges such as an emoji or a CJK glyph, which costs 2 instead of 1. Hashtags counted: 0.

The three rules that make a post longer than it looks

Almost every surprise in a character count comes from one of three places. A link is fixed at 23 no matter what, so pasting a long tracking URL costs the same as a short one and shortening it by hand saves nothing. A character outside the light-weight ranges costs 2, so a line of Japanese runs out of room at roughly 140 visible glyphs rather than 280. And a multi-code-point emoji, the kind built from a base glyph plus a modifier, is several code points that each carry their own weight, which is why one smiling face with a skin tone can cost noticeably more than one character.

If you are measuring posts you have collected rather than posts you are about to write, read them through the search API or the timeline API and apply the same weighting to the returned text.

Frequently Asked Questions

A standard post is limited to 280 weighted characters. Weighted is the important word: X does not count code points, it assigns each one a weight and compares the total against 280. Most Latin, Cyrillic and Greek text, plus general punctuation, weighs 1 per character. Everything outside those ranges, which includes emoji and CJK writing, weighs 2. Accounts with a paid subscription can post far longer, up to 25,000 characters.

The published weighting configuration gives a default weight of 200 and lowers it to 100 only for four code point ranges. Those ranges cover the Latin, Cyrillic and Greek blocks plus some punctuation. Emoji sit outside them, so they take the default weight, which after the scale of 100 works out to 2 per character. The same rule is why Japanese, Chinese and Korean text hits the limit at roughly half as many visible glyphs.

Yes, both count as ordinary text at their real weighted length, unlike links. A mention of a fifteen-character handle costs sixteen characters including the at sign. The one historical exception people remember, replies not counting the handles they are addressed to, applied to the leading mentions in a reply thread and is not something a counter can infer from pasted text alone.

Every link is replaced by a fixed transformed length of 23, whatever the real URL is. A six-character short link and a two-hundred-character tracking URL both cost the same 23. That is why the raw character count in a text editor and the count in the composer disagree the moment a link appears, and why shortening a URL by hand buys you nothing at all.

It implements the same published weighting rules: four light ranges at weight 1, everything else at 2, links fixed at 23. It is an independent implementation rather than the library X ships, so the composer has the final say on unusual grapheme clusters such as multi-code-point emoji sequences with skin tone or gender modifiers. For ordinary text, links, mentions and hashtags the two agree.

Apply the same rules in your own code: iterate code points, add 1 for anything in the four light ranges and 2 otherwise, then replace each URL match with a flat 23. If you are counting posts you have fetched rather than posts you are writing, the tweet endpoints return the post body and its entities, so you can measure real posts at scale instead of guessing from a sample.