🔏Zero-Width Watermark Tool

Insert invisible zero-width watermark

A zero-width watermark is not strong protection. Anyone who looks for it can find and remove it, and the hidden message itself is not encrypted.

How the zero-width watermark works

The zero-width space (U+200B) and the zero-width non-joiner (U+200C) take up no room on screen. This tool encodes your message as UTF-8 bytes, maps every bit to one of those two characters (0 becomes U+200B, 1 becomes U+200C) and attaches the result to the start or the end of your text. The sentence looks exactly the same, but the string really does get longer, so the panel reports how many characters were added. Extraction reverses the process: it collects only the zero-width characters, regroups them into bytes and decodes the message.

The useful case is straightforward. Send the same announcement to several people with a different marker in each copy, and a leaked copy can later be traced back. The limits are just as clear. The marks usually survive a plain copy and paste, but many platforms normalise whitespace or filter unusual characters and quietly remove them. And anyone who suspects a watermark can find it instantly, because invisible does not mean hidden.

Treat this as a lightweight marker, not as evidence or as protection. The hidden message is encoded, not encrypted, so never put sensitive information in it. Everything is processed inside your browser.

Frequently asked questions

Does the watermark survive copy and paste?

It usually survives in plain editors that move characters as they are. Forums, messengers and social platforms that normalise whitespace or filter unusual characters often strip it, so paste the text into the extract mode to check.

Can someone tell that a watermark is there?

Yes. Zero-width characters are invisible, not hidden. A code editor or a zero-width character remover reveals and deletes them in seconds, and the hidden message is not encrypted.

When does extraction fail?

When no zero-width characters are present, when their count is not a multiple of eight so they cannot be grouped into bytes, or when those bytes are not valid UTF-8. Each case shows its own message.