About this invisible character tool
A small, dependency-free page for one job: copying a genuinely blank or invisible Unicode character, with the codepoint, category and an honest reliability note attached — not just a mystery button that puts something unlabelled on your clipboard.
Why it exists
Search for “invisible character copy paste” and most results give you one character, unlabelled, with no explanation of what it actually is or why it might not work where you need it. That is a real usability gap: these are six different Unicode characters with six different properties, and which one is right depends entirely on what you are trying to do with it — a truly zero-width character behaves nothing like a full-width blank one, and a platform that blocks one will often accept another.
So this page lists all six side by side, with the codepoint, the Unicode general category that determines how software is likely to treat it, and a plain reliability note, instead of one mystery button.
How the character table was verified
Every entry's codepoint was checked two ways before shipping: against the character's own listing in the Unicode Character Database charts, and independently at runtime by reading the actual code point back out of the JavaScript string with String.prototype.codePointAt and comparing it to the label shown on the page. That second check runs as part of the automated test suite for this tool, so a typo in either the displayed U+XXXX label or the character itself would fail a test rather than ship silently.
The test suite (run under Node, no browser required) also checks:
- Every character is exactly one UTF-16 code unit — none of the six sit outside the Basic Multilingual Plane, so a JavaScript string of N of them always has .length === N. This is asserted, not assumed, precisely because it is not true of Unicode in general.
- The generator's output is exactly the requested length for every one of the six characters, and every code unit in that output really is the requested character.
- The count field clamps to a sane range (1–1000 by default): zero, negative numbers, non-numeric input and absurdly large numbers all resolve to a safe value instead of producing NaN, an empty string, or a batch large enough to freeze the tab.
You can re-run the same checks yourself: the pure logic lives in invisible.js with no DOM or network dependency, and is exercised directly under Node via a module.exports hatch.
How the site is built
- Static HTML, one small stylesheet, two small scripts. No framework, no build step, no bundler.
- Nothing is fetched from the network. No CDN framework, no web font, no remote image; the favicon is an inline SVG data URI. Once the page has loaded it keeps working offline.
- System font stack. Your operating system's UI font, so nothing has to download and nothing shifts as the page loads.
- Copying and generating both happen on your device. The Clipboard API call and the string-building logic both run in your browser tab; neither one makes a request to a server.
- Dark mode follows your system setting via prefers-color-scheme.
Scope and honesty about limits
This tool can tell you exactly what a character is, exactly how many code units you copied, and what Unicode itself says about the character's category. It cannot tell you, with certainty, what any specific website, app or game will do with it — platforms change validation rules without announcing them, and the same site frequently treats the sign-up form differently from the profile-edit form. The reliability labels in the table describe a general pattern based on Unicode classification, not a live test against any named platform.
It also will not help you evade a content filter or hide text from moderation, and it is not intended to. See the legitimate uses section on the main page for what these characters are actually good for, and what they are not.