FIRST CHTools

FIRST CH TOOLS / Text / 42 X POST COUNTER

X (Twitter) Post Counter

The length of a post on X is not a plain character count. Japanese, Chinese, Korean and full-width characters cost 2 each, a link costs 23 whatever its length, and the limit is 280 weight. Paste a draft and this page shows the weight, what is left and exactly where the post stops fitting, detecting URLs, mentions and hashtags and counting them at their effective weight. Built for checking a draft before it goes out.

Counted as you type

Your draft
0
Weight (limit 280)
280
Left
0
Characters as written
0
Lines
Preview & overflow
URL, mention or hashtag Past the limit — will not be posted
Detected entities

No URL, mention or hashtag found yet.

Checks

    For a plain count of characters, words and lines, use Character Counter — it counts a different way from this page. Normalising full-width and half-width forms is in Full-width ⇄ Half-width Converter.

    How to Use

    1. Paste the draftWeight, remaining budget and line count update as you type. Besides the standard 280, the X Premium limits of 4,000 and 25,000 are available.
    2. Look at the overflowAnything highlighted in red is the part that would be cut. URLs, mentions and hashtags are coloured, and the table below lists their effective weight.
    3. Fix it and copyGoing over your target (275 by default) raises a warning while still being postable. "Trim to the limit" cuts the draft mechanically at the last position that fits.

    How many characters fit in an X post?

    The limit is 280 weight, so the number of characters you actually get depends on what you are writing. These are the ceilings for a post written in one script, with no link in it:

    What you are writingWeight eachFits in one post
    English and other Latin scripts, digits, ASCII punctuation1280 characters
    Greek, Cyrillic, Hebrew, Arabic, Thai, Devanagari, Georgian1280 characters
    Japanese (kanji and kana) and Chinese2140 characters
    Korean (Hangul)2140 characters
    Full-width letters, digits and punctuation2140 characters
    Emoji (one whole sequence counts once)2140 emoji
    Links, whatever their length2312 links

    A link comes off the top. Put one link in a post and the text around it has 257 weight to work with, not 280 — that is 257 English characters or 128 Japanese ones. A second link leaves 234. Since the cost is flat, it makes no difference whether you paste a bare domain or a URL carrying a page of UTM parameters.

    A post that mixes scripts has no single answer, and that is the case this page exists for. English with a few kanji, a hashtag in Japanese, three emoji and a link cannot be worked out by looking at it — paste the draft above and the remaining budget is exact.

    The X Premium limits scale the same way. 4,000 weight is 4,000 English characters or 2,000 Japanese ones; 25,000 weight is 25,000 or 12,500. Switch the limit in the panel above and the remaining budget and the overflow highlight follow it.

    Where the line between 1 and 2 falls. In twitter-text configuration v3 every code point from U+0000 to U+10FF weighs 1 — Latin with accents, Greek, Cyrillic, Hebrew, Arabic, Thai, Devanagari and Georgian all sit inside that range — along with the punctuation at U+2000–U+200D, U+2010–U+201F and U+2032–U+2037. Everything above U+10FF weighs 2. That is why Korean costs 2 per character despite not being what most people mean by "CJK", and why an em dash costs 1 while 。 and 、 cost 2.

    About This Tool

    Length on X is measured as a weighted character count. When the limit went from 140 to 280 in 2017, per-character weights came with it. Latin letters, digits and common punctuation count as 1; everything else — CJK, kana, full-width punctuation, emoji — counts as 2, and a post is publishable while the total stays at or below 280. That is why a Japanese post effectively stops at 140 characters, and why writing to "280 characters" always misses.

    The weight table is the one X publishes in twitter-text (configuration v3). Weight 1 covers U+0000–U+10FF (Latin, Latin Extended, Greek, Cyrillic and so on) plus the punctuation at U+2000–U+200D, U+2010–U+201F and U+2032–U+2037. That is why an em dash (—) and curly quotes (“ ”) cost 1 while Japanese brackets and 。、 cost 2. The text is normalised to NFC before counting, exactly as X does, so a "カ" followed by a combining voiced mark counts as one character (weight 2), not two.

    Links are counted at a flat 23. This page detects both links written with a scheme (https://…) and bare domains (example.com, example.co.jp/path). Note, though, that the list of top-level domains used for the bare form is a built-in list of the ones that turn up in practice, not the complete gTLD/ccTLD list X carries. A bare domain on an unusual TLD is counted here as plain text while X would count it as 23 — writing https:// in front always makes the two agree. An email address (name@example.com) is not a link on X, and is counted as plain text here too.

    Hashtags and mentions are ordinary text. They carry no special weight, so a Japanese hashtag costs 2 per character (#Webツール is 1 + 3 + 8 = 12). A hashtag made only of digits (#1) is not a hashtag on X and is not detected here either. The handles X prepends to a reply are excluded from the weight, but that happens in the composer, so this page counts only the characters you write in the body.

    The target field exists for house rules. A post written right up to the limit breaks the moment someone adds a quote, a reply handle or one more tag, and every edit turns into a rewrite. Aiming at 260–275 leaves room for an afterthought, which is why exceeding the target warns you even though the post still fits.

    Your draft never leaves the browser — the counting and the overflow highlight both run locally. Directly callable via URL parameters: /en/x-length/?text=hello / /en/x-length/?text=draft&limit=280&target=260

    Other Tools