In JJS (Jujutsu Shenanigans on Roblox), making a character appear invisible in a username, chat, or display field is done by inserting a blank-looking Unicode character, not by changing any in-game visibility setting. The most common options are zero-width code points such as U+200B (zero-width space), U+200C (zero-width non-joiner), U+200D (zero-width joiner), U+2060 (word joiner), and U+3164 (Hangul filler), plus the no-break space at U+00A0. None of these are truly empty; they are valid Unicode code points with no visible glyph in most fonts. The result is text that displays as if it were blank, which can make a name appear to contain nothing visible, depending on how the Roblox text layer and the JJS interface render the code point. Because exact rendering depends on Roblox's text handling, the active font, and any moderation filter the game applies, the safest workflow is to pick a specific code point deliberately, copy it from a trusted local source, then verify it before you commit. The Invisible Character tool gives you that workflow in your browser without uploading anything.

how to make character invisible jjs
How to Make Character Invisible in JJS Using Unicode

What an Invisible Unicode Character Actually Is

An "invisible character" is a Unicode code point whose assigned glyph is blank, zero-width, or otherwise has no visual form in most fonts. In the Unicode Standard, every character has a numeric code point and an official name; the ones this tool covers all share the property that the typical rendering is a non-printing or zero-width slot. You can confirm any of them against the official Unicode Character Code Charts, which is the canonical reference for code points and names.

For a JJS context specifically, the practical effect is that a single such code point, pasted into a username, display name, or chat line, behaves as if the slot were empty. That is a rendering effect, not a property of the code point itself. The Roblox text stack, the font the game loads, the chat rendering layer, and any moderation step can each treat the same code point differently. Some platforms normalize or strip these characters; some preserve them and show nothing; some show a placeholder. There is no single guaranteed outcome, which is why copying a specific, known code point is safer than copying a "blank" from a random forum post where the original source is opaque.

The Six Characters the Tool Handles

The Invisible Character tool advertises six named characters and no others. Each card shows its official Unicode name and its exact code point, and a single click copies that one character to your clipboard. The set is deliberately small so you always know exactly what you are pasting.

Code pointOfficial nameLabel the tool showsWhere you typically see it
U+00A0NO-BREAK SPACENBSPHTML  , copy-paste from web pages, layout spacing
U+200BZERO WIDTH SPACEZWSPWord-break hints, the most common "blank" copied in forums
U+200CZERO WIDTH NON-JOINERZWNJArabic and Persian shaping control
U+200DZERO WIDTH JOINERZWJEmoji sequences and Indic shaping control
U+2060WORD JOINERWJLine-breaking control, replacement for ZWNBSP
U+3164HANGUL FILLERHFKorean filler slot, often circulated as a "blank" character

These six are the characters the tool detects, copies, labels, and removes. Anything else, including other zero-width or non-printing code points the Unicode Standard defines outside this set, is out of scope for the inspector and out of scope for the Remove button.

How to Make a Character Invisible in JJS Using Unicode

This is the core task: producing a string that contains a real Unicode character with no visible glyph so it renders as a blank in JJS. Use the Invisible Character tool as the source, not an unknown snippet from a comment thread.

  1. Pick the code point you want. If you want a strict zero-width character with no spacing effect, start with U+200B (zero-width space) or U+3164 (Hangul filler), which are the two most commonly used "blanks" in JJS-style display names. If you want something that behaves more like a space than a joiner, choose U+00A0 or U+2060.
  2. Click Copy on that card. Each card on the page copies exactly one character, the named one with the code point shown on the card. This puts a single, known code point on your clipboard instead of an anonymous string.
  3. Place it where JJS expects text. Paste the character into the Roblox display-name field, a chat message, or any other text input that accepts Unicode. The Roblox client will decide how to render the slot; you are committing a known code point, not an unknown one.
  4. Test before you commit. Type a short visible string around the invisible character, such as "A[ZWSP]B", and confirm in a preview or chat preview that the rendering matches what you expect. If Roblox strips the character or shows a placeholder, pick a different code point from the six and repeat.
  5. Use this tool only for legitimate display choices. Do not use blank-looking characters to disguise your identity, evade moderation, impersonate another player, or bypass naming rules. The tool does not validate the destination's rules; that call is yours.

Revealing Hidden Characters in a Pasted String

Sometimes the JJS-side question is the reverse: a string you copied from somewhere looks blank, but it actually contains one of these characters, and you need to see exactly which one before you do anything with it. The inspector side of the same tool handles that.

Paste any text into the inspector and it scans the input using Array.from, which iterates by Unicode code point rather than splitting surrogate pairs. That detail matters because emoji and many supplementary characters occupy two UTF-16 units; iterating by code point keeps reported positions aligned with what users see, even when the pasted string contains emoji or combining marks. The inspector checks only the six characters listed on the page. It does not claim to detect every blank-looking Unicode character, and that scope is explicit.

When the inspector finds a listed character, the Revealed text box replaces it with a readable marker: [ZWSP], [NBSP], [ZWNJ], [ZWJ], [WJ], or [HF]. The accompanying table gives each detection its one-based position by Unicode code point and its code point itself, in the standard U+XXXX form. That lets you compare two strings that look identical, locate an unexpected joiner inside a display name, or see why text behaves differently after pasting into JJS versus a plain editor.

Removing Only the Six Listed Characters

When a revealed string shows characters you do not want, the Remove listed characters button gives you a cleaned version. The scope of that removal is fixed: it filters only the exact six code points on the page and preserves ordinary spaces, tabs, line breaks, punctuation, letters, emoji, and every other Unicode character. The implementation is a direct filter on those exact code points; it does not normalize, fold, or alter anything else in the input.

That narrow scope is important and worth stating plainly: not every non-printing character is an error. A zero-width non-joiner or zero-width joiner can carry real shaping information in Arabic, Persian, or Indic text; a no-break space can be deliberate typography; a word joiner can keep terms from breaking across lines. Before you remove anything from a name, a piece of code, an address, quoted material, or text in a language you do not read, review the revealed version and confirm that none of those six characters are doing intentional work. The original input stays in place until you choose to act on it, so you can always copy the labels or edit the input again without losing your starting text.

What This Tool Does Not Cover

The scope is six characters and the operations listed above. It does not detect or remove other zero-width code points such as U+FEFF (zero-width no-break space), U+200E and U+200F (left-to-right and right-to-left marks), U+202A through U+202E (directional formatting), or U+2066 through U+2069 (isolate controls). It does not detect soft hyphens, Mongolian vowel separators, interlinear annotation characters, or any other non-printing code point the Unicode Standard defines. If you need a different one, use the official Unicode Character Code Charts or the line-breaking rules in Unicode Standard Annex 14 as a reference, then copy the exact code point you need from a trusted source.

Rendering is also not a guarantee of behavior. A character may appear blank in one font, show a replacement glyph in another, be stripped by Roblox, be normalized by a text editor, or have different line-breaking and accessibility effects across platforms. Invisible characters can also influence search, copy-and-paste, identifiers, moderation, and screen-reader pronunciation. For any change that matters, test the copied character in the destination application and with the audience that matters.

Practical Workflow Before You Paste Into JJS

A safe routine is short and consistent. Pick a named character on the page only when the destination documentation actually allows it. Paste the copied code point into a test field first, a notes app, a Roblox chat preview, or any preview surface, to confirm the rendering. Inspect the final visible string with the same tool to confirm no surprise code points slipped in. Then paste the cleaned or curated result back into the source application. If you are working with a string you did not author, paste it into the inspector first, read the marker labels and code points, decide whether any of the six are doing work you want to keep, and only then remove the ones you do not want.

If a system needs a visible separator, prefer an ordinary visible character over a blank-looking one. If you are choosing between the six, the Hangul filler (U+3164) and zero-width space (U+200B) are the most common starting choices for a JJS-style display name, but the only answer that matters is the one your destination renders the way you expect. For a broader look at how invisible characters behave across text-formatting contexts, the guide How to Get Invisible Characters for Text Formatting covers the same tool from a different angle and may help you compare choices.

For a deeper look, see How to Get Italic Text in LaTeX Using Unicode.