Skip to content

Tool 31 / Hide

A message inside the message.

Keep the cover text readable and store the real message in invisible zero-width characters. Reveal it later in the same tab, without a server or an account.

  • Free to use
  • Zero-width text
  • Runs locally
Live workbench272 bits hidden

The secret is encoded as UTF-8, so accents, emoji, and line breaks survive. The cover text remains visible and unchanged.

Text with hidden message

What the recipient sees

The output looks like the cover text. The secret is stored in invisible zero-width characters after the insertion point, using about eight invisible characters per byte of the message plus two fixed markers. Copy the output exactly; a chat app that strips invisible formatting will remove the payload.

This is steganography, not encryption. Anyone who knows the format can reveal the message, and the hidden characters may be visible in a character inspector or a raw text editor.

45 visible characters284 hidden characters272 payload bits34 message charactersZero-width steganography · never uploaded

What it does

A hidden message generator hides one piece of text inside another. The visible part — the cover text — stays readable. The secret becomes a sequence of zero-width characters that most editors render as nothing at all. The result can be copied like ordinary text, and the reveal mode can recover the secret from the same browser tab.

This is steganography, not cryptography. The message is concealed by where the characters are, not protected by a key. Anyone who knows the format can decode it, and a text inspector can show that extra characters exist. The tool is for puzzles, playful notes, teaching, and lightweight watermarking. It is not a way to send a password or a confidential document.

How the message is hidden

The secret is converted to UTF-8 bytes, and each byte becomes eight zero-width bits. A zero-width space represents 0 and a zero-width non-joiner represents 1. A short sequence of word-joiner and joiner characters marks the start and the end of the payload. Because UTF-8 is used, the same mechanism works for ASCII, accented letters, emoji, and line breaks.

You can append the payload to the end of the cover text, place it after the first word, or put it at the end of the first line. The revealer scans the whole text for the marker, so the position does not matter. The character count does: the payload adds roughly eight invisible characters per byte of the secret, plus the two fixed markers.

Revealing a message

Switch to reveal and paste the complete text exactly as you received it. The tool looks for the start marker, collects the bits up to the end marker, checks that the bit count is a multiple of eight, and decodes the bytes as UTF-8. If the payload is truncated or contains a character that does not belong, the tool reports the problem instead of guessing.

The most common failure is not a broken decoder. It is a destination that strips invisible characters. Chat apps, rich-text editors, CMS fields, and form validators often normalize text on paste. If the revealer finds no marker, try the original message again and avoid retyping it by hand.

Examples

The cover text looks unchanged
The second block carries a hidden payload

Cover text

Meet me at the usual place. Bring the folder.

With payload

Meet me at the usual place. Bring the folder.⁠‍⁠​⁠‌​‌​‌​‌​​​‌‌​‌​​​​‌‌​​‌​‌​​‌​​​​​​‌‌​​​‌​​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌​​‌​‌​​‌​​​​​​‌‌​​‌‌​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​​​​​​‌‌​‌​​‌​‌‌‌​​‌‌​​‌​​​​​​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​​​​​​‌‌‌​‌​​​‌‌​‌​​​​‌‌​​‌​‌​​‌​​​​​​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​‌​‌‌​​‌​‌‌‌​⁠‌⁠​⁠‍

Both blocks look the same because the payload has no visible glyphs. The second block is longer by the number of encoded bits. The tool’s statistics panel reports that count, which is the only on-screen evidence that something was added.

Revealing the same payload
Paste the text exactly as received

Text with payload

Meet me at the usual place. Bring the folder.⁠‍⁠​⁠‌​‌​‌​‌​​​‌‌​‌​​​​‌‌​​‌​‌​​‌​​​​​​‌‌​​​‌​​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌​​‌​‌​​‌​​​​​​‌‌​​‌‌​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​​​​​​‌‌​‌​​‌​‌‌‌​​‌‌​​‌​​​​​​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​​​​​​‌‌‌​‌​​​‌‌​‌​​​​‌‌​​‌​‌​​‌​​​​​​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​‌​‌‌​​‌​‌‌‌​⁠‌⁠​⁠‍

Revealed message

The blue folder is under the desk.

The revealer returns the original UTF-8 string. The cover text is still there in the background; the hidden message is shown separately so you can read it without hunting for invisible characters.

Limits worth knowing

  • No confidentiality. Anyone who knows the format can reveal the message. There is no key, no authentication, and no protection against tampering. A changed bit can corrupt the message or produce different text.
  • Invisible does not mean undetectable. The payload changes the length and the character inventory. A person with a text inspector, a diff tool, or a script can see that zero-width characters were added.
  • Many destinations strip the payload. Social platforms, email clients, and rich-text editors are the usual culprits. Test with the exact app and the exact copy method you plan to use. Plain-text mode is safer than rich text.
  • Accessibility matters. Screen readers generally ignore zero-width characters, so a reader may not know a payload exists. Do not use a hidden message to convey information that the visible text does not also provide.
  • No recovery. If the payload is stripped, truncated, or normalized, the secret may be unrecoverable. Keep the original cover text and secret somewhere safe before sharing the hidden version.

Page updated

Questions, answered

Is a hidden message encrypted?

No. It is hidden, not encrypted. The payload uses zero-width characters and a simple public format, so anyone who knows the format — or uses this page — can read it. Use a real encryption tool when confidentiality matters.

What does the hidden text look like?

The cover text looks exactly the same. The secret is stored in invisible zero-width spaces and joiners after the insertion point. The character count grows, and a raw text inspector can show the extra characters, but an ordinary reader sees only the cover text.

Why did the message disappear after I pasted it somewhere?

Many editors, messaging apps, form validators, and rich-text sanitizers remove zero-width characters. Copying as rich text can also drop them. If the destination strips them, the payload is gone. Keep a copy of the output and test the exact destination before relying on it.

How do I reveal a message someone sent me?

Switch to “Reveal a hidden message”, paste the entire text exactly as received, and read the output. Do not retype it, reformat it, or pass it through an editor that might strip invisible characters. The revealer needs both markers and the complete bit string.

Does it work with emoji, accents, and line breaks?

Yes. The secret is encoded as UTF-8 before it becomes zero-width bits, so accented letters, emoji, and line breaks survive a round trip. The cover text is untouched. The payload itself is invisible, so a line break in the secret does not create a visible line break in the cover.

Is my message uploaded?

No. Both hiding and revealing run in this browser tab. There is no server request, account, or stored copy. The page does not know whether a payload is present until you paste it locally.

All tools →