Skip to main content

X (Twitter) Character Counter

An X character counter measures a post the way X's own composer does: by weighted length rather than by how many keys you pressed. Latin letters and common punctuation cost 1 each, CJK characters and emoji cost 2 each, and every link costs a flat 23 no matter how long it really is. This free counter applies those exact rules live, shows whether your post gets clipped behind “Show more” in the feed, and splits anything too long into a numbered thread. It runs in your browser, with no signup and nothing stored. VoicePost (voicepo.st) writes the posts that go inside those limits, in your own voice, every day.

Weighted characters

0 / 280

280 left

Characters typed
0
Links found
0 (23 chars each)
Cut off in the feed
No

Tweet thread splitter

Too long for one post? Split the text above into numbered posts that each fit 280 characters, broken at sentence boundaries so no sentence is cut in half. The “(1/5)” counter is included in each post's length.

How it works

How X counts characters

X does not count characters, it weighs them. Its published counting configuration assigns every Unicode code point a weight, defaulting to 2, and drops that weight to 1 only for code points inside four ranges: U+0000 to U+10FF, U+2000 to U+200D, U+2010 to U+201F, and U+2032 to U+2037. In practice that means Latin, Cyrillic, Greek, Hebrew and Arabic script, along with ordinary punctuation and symbols, cost 1 apiece. Chinese, Japanese, Korean, and emoji all fall outside those ranges and cost 2.

The 280 figure is therefore a weight budget, not a keystroke budget. A post in English gets 280 visible characters. The same post written in Japanese gets 140. That is deliberate: the weighting exists because 140 CJK characters carry roughly as much meaning as 280 Latin ones, and X wanted the limit to feel similar in every language.

Two more rules matter more than people expect. First, links are priced, not measured. Every URL you post is rewritten as a t.co short link, so it always costs exactly 23 characters. A bare domain costs 23, and a monstrous link with six tracking parameters also costs 23, which means there is never a reason to shorten a link before posting it. Second, an emoji costs 2 for the entire sequence rather than 2 per code point. A family emoji is technically four people joined by zero-width joiners, and a flag is two regional indicator symbols, but X charges 2 for each of them because it counts what a reader perceives as one character.

Before any of that, text is normalized. A letter typed as a base character plus a combining accent is folded into its precomposed form, so an accented word costs the same however your keyboard produced it.

How this counter is implemented

This tool implements the rules above directly rather than importing a counting library, so the whole page stays small enough to load instantly and there is nothing hidden from you. The sequence is: normalize the text, find the links, charge each one 23, then walk what is left one user-perceived character at a time. Each of those characters is checked against the four light ranges, and anything that reads as an emoji is charged a flat 2. Splitting into user-perceived characters uses the browser's own text segmentation, which is what makes multi-code-point emoji come out right.

The one place this differs from X's server is link detection. X carries the full IANA list of top-level domains, so it recognizes almost any bare domain as a link. This tool recognizes anything written with http, https or a www prefix, plus bare domains on the common top-level domains people actually paste. If you write an unusual bare domain with no scheme, the counter may charge you its literal length instead of 23, which errs toward telling you the post is longer than it really is. That is the safe direction for an error to point.

280 or 25,000: which limit applies to you

Standard accounts get 280 weighted characters. Premium subscribers get 25,000, which is where long-form posts on X come from. Use the toggle above the box to switch between them.

The catch is that the 25,000 limit changes what you can publish, not what people read. The feed still shows roughly the first 280 weighted characters and hides everything after that behind a “Show more” link. So a 4,000 character post is still auditioned on its first 280 characters, exactly like a standard post, and the remaining 3,720 only exist for readers who already decided to expand it.

Why the feed cut-off matters more than the limit

This is the reason the counter shows a cut-off preview rather than only a number. Being under the limit is a mechanical requirement. Surviving the cut-off is the actual writing problem. When your post is long enough to clip, the preview greys out everything a scroller will not see unless they tap, which usually exposes the same mistake: the hook is fine, but the payoff that justifies the hook sits after the fold, so the post reads as setup with no reward. Moving one concrete detail, a number, or a result above the cut usually fixes it without cutting a word.

The related question of how many posts to write in the first place is a different problem, and it depends on your stage rather than your length. That ladder is in how often to post on X, and the first-line craft that decides whether anyone reads past the cut is in how to write hooks on X.

How the thread splitter works

The tweet thread splitter takes whatever is in the box and packs it into the smallest number of posts that each fit 280 weighted characters. It breaks at sentence boundaries first, so a sentence is never cut in half. If one sentence is longer than a whole post on its own, it breaks at word boundaries instead, and only cuts inside a word if a single unbroken token is longer than 280 characters by itself.

The numbering is charged against the limit rather than added on top of it. That matters because the width of the counter depends on how many posts there turn out to be: a thread of 9 posts adds 6 characters per post, and a thread of 12 adds 8. The splitter packs, counts the result, and repacks until the number stops changing, so nothing overflows when you paste it into X. Blank lines in your text are treated as hard breaks, so a deliberately formatted list will not be reflowed into a wall of prose.

Copy the posts in order and reply to your own previous post each time to chain them into a thread.

Frequently asked questions

How many characters is a post on X in 2026?
280 weighted characters on a standard account, and 25,000 on a Premium account. Weighted is the important word: Latin letters, digits and common punctuation cost 1 each, while CJK characters, Hangul, Kana and emoji cost 2 each, so 280 is a ceiling in weight rather than a count of keystrokes.
Do links count toward the character limit?
Yes, and always at the same price. X rewrites every link as a t.co short link, so any URL costs exactly 23 characters whether it is 12 characters long or 300. Adding query strings and tracking parameters to a link therefore costs you nothing in the composer.
How do I split a long tweet into a thread?
Paste the full text into the counter above and press "Split into a thread". The tweet thread splitter breaks the text at sentence boundaries into numbered posts that each fit 280 characters, and it charges the "(1/5)" counter against each post so nothing overflows when you paste it into X. Copy each post in order and reply to your own previous post to chain them.
Why does one emoji count as two characters?
Emoji sit outside the code point ranges X weights at 1, so they cost 2. The rule holds for the whole emoji sequence rather than each piece of it, so a family emoji built from four people joined by zero-width joiners still costs 2, not 8. Skin tone modifiers and flags behave the same way.
Do spaces and line breaks count?
Yes. A space and a newline each cost 1 character, the same as a letter. Trailing whitespace at the end of a post counts too, which is a common reason a post that looks like it fits gets refused by 1 or 2 characters.
Is my text stored anywhere?
No. This counter runs entirely in your browser. Nothing you type is sent to a server, saved, or logged, and the page works with your network disconnected once it has loaded.

By hand vs with VoicePost

You can do all of this yourself. Here is what it takes to keep it up every day, and what VoicePost handles for you.

By handWith VoicePost
Staying inside the limitPasting into the composer, getting refused, then trimming words until the counter goes green.Drafts arrive already inside the limit, with the hook in front of the feed cut-off.
Turning a long idea into a threadSplitting by hand, renumbering every post when you add one, and re-checking each part.Long ideas are drafted as posts from the start, so there is nothing to split afterwards.
Having something to count in the first placeOpening a blank composer daily and hoping an idea shows up before the day gets away.Your niche is watched for you and drafts land in your voice each day. You approve each one and it publishes now or on the schedule you set.
Read next

How Often Should You Post on X? The 2026 Answer by Stage

Length is the easy constraint. Frequency is the one that decides whether anyone sees the post: the stage-by-stage ladder, and why replies outrank posts below 500 engaged followers.

Last reviewed: July 2026