Which unit is counted

Twitter character limit (now X): 280 weighted, not 280 characters

The Twitter character limit — the platform is now X — is 280 weighted characters, which is not the same as 280 characters. X counts most Latin text as one, emoji and CJK as two, and every URL as a flat 23 however long the link is. A counter that reports one number without saying which of those it applied cannot tell you whether your post will fit.

What is the Twitter character limit?

The number is famous and the unit is not. X does not count characters evenly — it weights them, and the weighting is published.

What each kind of character costs against the ceiling
CharacterCounts as
Latin letters, punctuation, common symbols1
Emoji, of any complexity2
Chinese, Japanese, Korean2
Other Unicode2

So the ceiling is not one length, it is several. A post of 280 Latin characters sits exactly at it. The same count of Japanese characters is twice over it. Every counter that reports a single number against 280 is answering for Latin text and not saying so.

The weighting comes from X’s own counting documentation, whose sections are titled character weights, emoji counting and URL handling — the three things a bare number leaves out. Checked .

Where Postdom is more permissive than X

Postdom checks your text against 280 UTF-16 code units and flags an overrun on the approval card — a different unit from the one above, and a check a reviewer sees rather than a rejection. Nothing stops an over-length post being submitted; the only hard ceiling in the request itself is Postdom’s general one.

On this destination the difference runs the risky way, and it is worth being plain about. Postdom counts a Japanese character once; X counts it twice. So a CJK post can pass Postdom’s check and still be refused by X. The check does not catch everything it appears to catch.

The error is bounded — nothing costs more than double, so the check is never wrong by more than a factor of two — and it is a deliberate trade rather than an oversight. The alternative was no destination check at all between Postdom’s general ceiling and a 280 destination, which surfaces later and less usefully.

It is also the opposite of how the same mismatch behaves elsewhere. On a destination that counts graphemes, measuring in code units over-flags: the card raises posts the platform would have taken, which costs a second look. Here it under-flags, and stays quiet on a post that will fail. Same measurement, opposite consequence, and only one of them is safe. The Bluesky character limit is the safe case, written out.

Count your post both ways

Weighted
0X’s own count — 280
UTF-16 code units
0What Postdom’s check measures — 280

Passing here is not X accepting the post. Postdom's check is the code-unit figure, and on this destination it is the more permissive of the two.

Questions about the X character limit

What is the Twitter character limit?

280 weighted characters. X weights each character rather than counting them evenly: Latin letters, punctuation and common symbols count one, while emoji, CJK and other Unicode count two. So a post of 280 Japanese characters is twice the ceiling, and a post of 280 Latin characters is exactly at it.

How much does a link cost?

Exactly 23, however long it is. X wraps every URL with its own shortener and counts the wrapped form, so a fifteen-character link and a three-hundred-character link cost the same. Shortening a URL before posting buys you nothing.

Do emoji count as one or two?

Two, and complexity does not change it. X states that an emoji counts two regardless of how it is built, and that the zero-width joiners holding a composite emoji together add nothing. A family emoji assembled from seven code points still costs two.

What happens when you publish through Postdom?

Postdom checks your text against 280 UTF-16 code units and flags an overrun on the approval card for a reviewer. It is a check a person sees, not a rejection — nothing stops an over-length post being submitted. It also measures in a different unit from the weighted count, and on this destination that runs the risky way: a post of CJK text can pass Postdom's check and still be refused by X, because each of those characters costs two there and one here. The error is bounded at a factor of two and it is a deliberate trade — the alternative was no destination check at all between Postdom's general ceiling and a 280 destination.

Is it still 140 characters?

No. X documents 280 weighted characters for a post through the API endpoint Postdom publishes to. The older figure is not a smaller version of the same rule; it predates the weighting scheme described on this page.