Paste once and see every platform limit your text passes and every one it breaks, with the exact point each one cuts at. Nothing is uploaded and nothing is stored.
| Platform and field | Limit | Yours | Verdict | Where it cuts |
|---|
Platform limits change without notice and some are enforced differently by the app, the web client and the API. Every number in this table is sourced below with a link to where it is published. Treat the table as a check before you paste, not as a guarantee about what a given client will accept today.
Ask five platforms how long 👨👩👧👦 is and you get five answers. It is
one thing you can put a cursor either side of, eleven UTF-16 code
units, twenty five UTF-8 bytes, and on X it costs two. None of those
is a mistake. They are answers to different questions, and the platform you are about to paste into has
already picked one of them without telling you.
This page shows all three counts at once and then, for each platform, uses that platform's unit to decide whether you are over. That is the whole point of the table above: a general character counter tells you a number, and you still have to know which number the platform wanted.
A grapheme cluster is one user perceived character. The family emoji is a grapheme cluster built out
of four separate emoji glued together with zero width joiners, and a flag is two regional indicator
letters that a font draws as one image. Korean, Thai and Devanagari all put marks together the same
way. This page counts graphemes with Intl.Segmenter, which is the browser's own
implementation of the Unicode text segmentation rules, so the count matches where your cursor stops
when you press the arrow key.
Most web software is written in a language whose string length is a count of UTF-16 code units, so when a platform says 2,200 characters what it usually enforces is 2,200 code units. Anything outside the Basic Multilingual Plane, which is nearly every emoji, is two code units rather than one. That is why a caption that looks well under the limit can be rejected once you add emoji: each one quietly costs double. Where we know a platform counts differently, the table says so on that row.
Byte length is the one that matters for databases, URLs, file formats and any limit written in bytes. ASCII is one byte per character, Latin letters with accents and Greek and Cyrillic are two, Korean, Japanese and Chinese are three, and most emoji are four. A 100 byte column holds 100 English letters or 33 Korean ones.
An SMS is not stored as characters. In the default alphabet defined by 3GPP TS 23.038 each character
is packed into seven bits, which is where the famous 160 comes from: 140 bytes of payload divided by
seven bits gives 160 septets. Ten characters cost two septets each because they are not in the
basic table and have to be sent after an escape: ^ { } \ [ ~ ] | and the euro sign, plus
the form feed control.
One character that is in neither table forces the whole message into UCS-2, and the allowance falls from 160 to 70. That includes every Korean, Japanese and Chinese character, every emoji, curly quotation marks and en and em dashes. Curly quotes are the usual culprit, because a word processor inserts them silently.
Longer messages are split and sent as parts. The concatenation header takes room out of every part, so the per part allowance drops to 153 septets or 67 code units. This page never splits an escape pair or a surrogate pair across a part boundary, which is why a part can end with a spare slot.
X does not count characters. It assigns a weight to each character and allows a total of 280 at a scale of 100. The default weight is 200, and only four ranges of code points weigh 100. In practice that means Latin, Cyrillic, Greek and general punctuation cost one, and everything else, including Korean, Japanese, Chinese, Arabic and Hebrew, costs two. So a post can be 280 English characters or 140 Korean ones. Emoji are parsed as single units at the default weight, so the family emoji costs two rather than eleven.
Links are a separate rule. Every link is replaced by a t.co link of a fixed length before counting,
so a link costs the same 23 whether it is 20 characters or 200. Shortening a URL before you post it
buys you nothing on X. The link detection on this page is deliberately simpler than the one X uses,
so a bare domain without a scheme or a www. prefix is counted as ordinary text here and
would be counted as a link there.
When you are over a limit, the last column shows the text on both sides of the cut: the tail of what survives, then a scissor mark, then the beginning of what is lost. The cut is computed in the unit that platform counts in, and it never lands in the middle of a grapheme cluster, so an emoji is either wholly in or wholly out. Real clients differ in whether they refuse the paste, truncate it or add an ellipsis, and search engines rewrite titles rather than truncating them, so read the mark as this is where you run out of room rather than as a prediction of the rendered output.
Free, no sign up, and your text never leaves your browser. There is no server side of this tool at all: the page has no upload endpoint to send anything to. There is also deliberately no share link, because putting a draft in a URL leaves it in browser history, in the clipboard and in whatever chat you pasted the link into. Nothing you type is stored anywhere, including here, so reloading the page starts you with an empty box.
| Platform and field | Limit | Counted in | Source |
|---|
This page is one of a small set of single purpose tools that run entirely in the browser with no account and no server side storage. One of them counts the days to any date with the counting rule made explicit, one converts a grade point average from a 4.5 or 4.3 scale to the US 4.0 scale, one works out an ETS date and the last duty day in front of it, and one checks which AI crawlers a robots.txt file currently lets in.