Character Limit Checker
Type once, check any limit: pick a platform preset and the remaining-character bar tracks every keystroke. Each platform also has its own page with the limit's fine print. Nothing you type leaves your browser.
280 of 280 remaining
The fine print lives on each platform's page
A raw number is rarely the whole rule. X bills every URL at a flat count regardless of its length, Instagram folds a caption long before its cap, SMS changes its entire budget when one character falls outside a fixed alphabet, and Google's snippet cut is a matter of display width rather than a character count. This page is the general checker: one draft, five finish lines, and a bar that moves the instant you switch between them. Each dedicated page pairs the same live meter with that platform's actual behavior: X/Twitter, Instagram captions, SMS segments, YouTube titles, and meta descriptions.
What each preset checks, as of mid-2026
The chips set the limit the meter counts against; the text in the box stays put while you switch. Four of the figures are a platform's published rule as of mid-2026 — product decisions rather than standards, so when a platform changes one, the chip and this copy are updated together; the promise is to state each cap as of a date and keep it current, never to stretch it. The SMS figure is different in kind: 160 is the GSM 03.38 single-message budget, a stable specification rather than a platform's decision. In the order the chips appear:
- X/Twitter · 280 — the cap for a standard post, and the preset the page loads with. The limit was 140 until 2017; paid tiers now post longer. X also applies weights to its count that this bar does not (described below), so this chip is a plain code-point check against 280.
- Instagram · 2,200 — the caption cap. The feed shows the first ~125 characters of a caption before folding the rest; the fold is described on the Instagram page, not drawn on the bar.
- SMS · 160 — the GSM-7 single-message budget, used here as a plain character count. SMS is the one preset where a count against a cap is not the real rule; the section below explains why, and what the SMS counter does instead.
- YouTube title · 100 — the title field's cap. How much of a title is visible depends on the device showing it; that truncation is described on the YouTube page, not modeled.
- Meta description · 160 — the ~160-character drafting convention, rounded to a hard line so the bar has somewhere to end. Google's actual snippet cut is pixel-width, so a description that fits this figure can still be shortened in display; described, not modeled.
The presets are deliberately only these five. The site states a limit only where it documents the platform's rule and commits to keeping it current; nothing is guessed to fill a chip.
How the bar and the remaining figure are computed
On every keystroke the bar and the remaining figure come from one function, the engine's limit check, run against the active preset. It counts the draft in Unicode code points — the convention most platforms document for their caps — subtracts that count from the limit, and reports the difference. The bar's width is the count divided by the limit, capped at full width. The readout underneath says "remaining" while the count is at or under the limit and "over" once it passes, and the bar changes to its over state at the same keystroke.
A worked draft, computed when this page was built by the same engine that runs in your browser: "Release notes for the September build are up: faster exports, a fixed crash on paste, and a new dark theme. Full changelog in the thread." counts 137 code points. On the X/Twitter preset the readout is "143 of 280 remaining" and the bar sits at about 49% of its track. Switch to the YouTube title preset without changing a character and the same draft reads "37 over the 100 limit", with the bar pinned at full width. Same text, 137 code points either way; only the finish line moved. The edge is exact: "How I rebuilt a 1990s kitchen on a weekend budget: every step, every mistake, and what I would change" counts 101, which on the YouTube preset is 1 over — one character past the cap is over, with no rounding and no grace.
What a code point is matters at the margins. A precomposed accented letter such as é is one code point, so "Café menu this week: crêpes, soupe à l’oignon and tarte Tatin." counts 62. A line break is a character too: "Line one", a line break, then "Line two" counts 17, not 16. An emoji such as 🎉 is one code point even though it occupies two UTF-16 units in JavaScript's internal representation, so the meter charges 1 for it. The family emoji 👨👩👧 is the known wrinkle: one visible glyph built from several person emoji joined by invisible joiners, and the meter reports the code points — 5 of them. Platforms disagree on exactly such sequences, which is one reason the final authority on a borderline draft is the platform's own composer. The code-points guide walks through precomposed versus combining forms and the joined sequences in detail.
The SMS exception
For four of the five presets, a count against a cap is the right shape of check, even where the platform applies weights on top. SMS is different in kind. A text message is not counted against a cap; it is encoded, and the encoding decides the budget. The GSM 03.38 arithmetic that the SMS counter implements walks the message character by character against the GSM-7 alphabet: basic-set characters cost one septet, the extended set (€ [ ] { } ~ ^ \ |) costs two, and the first character outside both sets switches the entire message to UCS-2, where length is counted in UTF-16 units instead — most emoji cost two. A single GSM-7 message holds 160 septets, or 153 per segment once concatenation headers are needed; UCS-2 holds 70, or 67 concatenated.
The SMS · 160 chip on this page does none of that. It is a code-point count against 160, which matches the real budget only while every character is in the GSM-7 basic set. "Your table for two is booked for 7:30pm on Friday. Reply C to confirm or X to cancel." is such a message: 85 septets, GSM-7, 1 segment, 75 left — and the chip here agrees, reading 75 of 160 remaining. Now the house example. "We're holding your order until 6pm. Reply Y to confirm.", typed with a straight apostrophe, and "We’re holding your order until 6pm. Reply Y to confirm.", with the curly apostrophe a word processor substitutes on paste, are both 55 code points, and this page reads 105 of 160 remaining for either. The SMS counter tells them apart: the straight version is GSM-7, 160 per message, 105 to spare; the curly version is UCS-2, 70 per message, 15 to spare. Same visible text, a budget less than half the size, and a code-point chip cannot see it. Extended characters skew the other way: "Sale ends tonight: 20% off everything [online only] + free delivery over €40" is 76 code points but 79 septets, because [, ] and € cost two each. And an emoji that is 1 code point here is 2 UTF-16 units in a UCS-2 message; the family emoji's 5 code points become 8 units.
So: use this page's SMS chip for a quick look at a plain-alphabet draft, and use the SMS counter — which shows the detected encoding explicitly, so the flip is never silent — for anything you will actually send. National-language shift tables and carrier-side transcoding exist at the margins and are not modeled; carriers can and do vary. The SMS segments guide works the full arithmetic, boundary by boundary.
Modeled versus described
Every rule on this site falls on one side of a line. Modeled rules run in the engine: code-point counts against each platform's published cap, and the full GSM-7/UCS-2 segmentation on the SMS page. Described, not modeled rules are stated on the relevant page but deliberately not simulated, because simulating them would mean guessing at server-side behavior that cannot be verified from the outside: X's weighted counting (every URL fixed at 23, emoji and CJK weighted 2, per X's developer documentation as of mid-2026), Instagram's ~125-character feed fold, YouTube's device-dependent title truncation, and Google's pixel-width snippet cut.
What a described rule gives you instead is a direction. On the X preset, a long pasted URL is counted at face value here but billed at 23 by X, so the meter reads high on link-heavy posts; emoji and CJK characters count one apiece here and two on X, so the meter reads low on drafts heavy in either. On the Instagram preset the bar measures the whole caption against 2,200 — "Golden hour on the pier, finally. Full gallery and the camera settings are in the comments." leaves 2,109 characters of headroom — while the fold leaves most of a long caption below a reader's first view, and the bar cannot show where that fold lands. The YouTube and meta-description presets are the same shape: a hard count against a field cap or a drafting convention, with the visible cut decided elsewhere. "Live character-limit checker for X, Instagram, SMS, YouTube titles and meta descriptions. Counts code points in your browser; nothing is sent anywhere." counts 151 against 160, with 9 to spare, and whether a result page shows all of it is a question of pixels, not characters.
Reading a borderline draft therefore takes two steps. First, read the number: a draft inside the line, written in plain text with no URLs, emoji, CJK or extended characters, is inside the line, and the count here is the count. Second, read the draft: if the remaining figure is small and the text contains one of the described elements, the platform's composer is the final authority — every page says so, and this site treats any third-party counter, including itself, as a drafting aid rather than a guarantee. The modeled-versus-described guide sets out the doctrine in full.
Common misreadings
- The curly-apostrophe flip. The SMS chip reads 105 remaining for the curly-apostrophe message above; the real budget is 70, with 15 to spare. Check the encoding on the SMS counter before sending anything pasted from a document.
- Panicking at a pasted link. A long URL can push the X preset over the line here while X itself bills it at 23. Read the direction of the skew, then finish in the composer.
- Treating the cap as the visible length. 2,200 is Instagram's caption cap; the ~125 feed fold is what a reader sees first. A caption that "fits" can still hide its point.
- "It fit there, so it fits here." The release-notes draft above fits the X preset with 143 to spare and is 37 over as a YouTube title. Run each destination against its own preset.
- Reading the Words card as the limit. The word count is secondary and Unicode-aware — internal hyphens and apostrophes keep a word whole, so "Don't split state-of-the-art or it's" is 5 words and 36 characters. Limits are about the second number.
- Forgetting that whitespace counts. A trailing space or an extra blank line is a code point like any other; a draft that reads one or two over usually has one.
Start here
The guides answer the questions the chips raise, one mechanism each: Counting characters in code points covers what a character is on this site, precomposed versus combining accents, emoji and joined sequences, and the cap on what the checker accepts: 2,000,000 UTF-16 units, which is 2,000,000 characters of plain text and fewer for text heavy in emoji. SMS segments and GSM-7 works the full 160/153 and 70/67 arithmetic on real messages, including the boundaries and the flips. X's weighted counting, explained covers 23 per URL, emoji and CJK at 2, and how to read this page's count against X's. Platform limits as of mid-2026 puts every cap the site states in one table, with the update promise. Truncation and folds takes Instagram's fold, YouTube's device-dependent cut and Google's pixel-width snippet one at a time, with the direction each skews and why none is simulated. Modeled versus described is the site's doctrine and the way to read a borderline count. All six are listed on the guides index, and the methodology page states what the engine computes and how it is tested.
Frequently asked questions
Which preset is active when the page loads?
X/Twitter · 280. Click any chip to switch; the text you have typed stays in the box, and the bar and remaining figure recompute against the new limit at once. Each chip is a code-point count against the figure the chip names — a platform's published cap as of mid-2026, or for SMS the GSM-7 single-message budget.
Does an emoji count as one character or two?
On this page, one: 🎉 is 1 code point, and the family emoji 👨👩👧 is 5 code points, because it is several person emoji joined by invisible joiners. In an SMS the same two cost 2 and 8 UTF-16 units, because a message containing them is sent as UCS-2. X weights emoji at 2 as of mid-2026; that weighting is described on the X page, not applied by the bar.
Why does the SMS chip say 160 when the SMS counter may say 70?
The chip here is a plain code-point count against 160, the GSM-7 single-message budget. The SMS counter runs the real GSM 03.38 arithmetic, and the first character outside the GSM-7 alphabet — a curly apostrophe pasted from a word processor is the classic case — switches the whole message to UCS-2, where a single message holds 70 UTF-16 units. "We’re holding your order until 6pm. Reply Y to confirm." reads 105 remaining on this page but has only 15 to spare on the SMS counter.
Are these limits current?
They reflect each platform's published rules as of mid-2026. Platform caps are product decisions, not standards — X's limit was 140 until 2017, and paid tiers now post longer — so when a platform changes a limit, the chip and the page copy are updated together. Before a consequential send, verify against the platform itself; this checker is a drafting aid, not a guarantee.
Why is there no preset for the platform I use?
The presets are limited to the limits this site documents and commits to keeping current. A chip for a cap the site has not verified would be a guess with a progress bar attached, so none is offered.
Do spaces and line breaks count?
Yes. Every code point counts, including spaces, trailing spaces and line breaks: "Line one", a line break, then "Line two" counts 17, not 16. If a draft reads one or two over, a stray blank line at the end is the first thing to look for.
Is there a limit on how much text I can paste?
The engine accepts up to 2,000,000 UTF-16 units of text — 2,000,000 characters of plain text, fewer if it is heavy in emoji, since 🎉 alone occupies 2 units; beyond that it reports that the text is not supported rather than counting part of it. Every preset here is far below that, so the cap only matters if you paste a whole document.
Is anything I type sent to a server?
No. Counting runs as JavaScript in your browser, there is no server-side counting endpoint, and you can confirm in your browser's network tab that typing generates no requests.
Everything is processed locally in your browser and never transmitted or stored. See the methodology page.