About this tool
This page answers a question developers actually type: what is in my clipboard? Not a guess. After you click, it asks navigator.clipboard.read() for every MIME flavour the browser will hand over — text/plain, text/html, text/uri-list, image/png, image/svg+xml, and the vendor ones like web application/x-vnd…. Each row is a type, a size in bytes, and a viewer that fits. Nothing is uploaded, nothing is logged, and leaving the page drops it.
All the MIME types, not a textarea
A paste into a form only keeps what that form asked for. The clipboard itself often holds several representations of the same copy at once. This page lists every one. Hex uses the same language as the hex editor: offset, 16 bytes per row, ASCII on the side. Images show type, bytes, and pixel size when createImageBitmap can read them. A flavour whose getType() rejects is marked unavailable; the rest of the table still renders.
The HTML cell is the point
Paste from Word or Notion and the hidden passenger is text/html — inline styles, mso- junk, converted lists. This page shows that source as text, escaped so it cannot become DOM. There is no dangerouslySetInnerHTML, no eval, no injection. If you only wanted the words, text/plain is the other row; the HTML row is why the paste looked wrong.
Denied is not empty, and unknown is not denied
clipboard.read() must run from a click or a paste. This page never reads on load. NotAllowedError means the browser refused or still wants a gesture — not that the clipboard is empty. An empty result is a different state. navigator.permissions.query({ name: "clipboard-read" }) often throws; a throw is shown as unknown, never as denied. Some browsers only implement readText(). That is reported as "this browser only returns plain text" — not "the clipboard only had plain text".
Two paths, because they disagree
The Async Clipboard API and a paste event's clipboardData.items are not the same pipe. Chrome may sanitise HTML on read() and leave a web text/html unsanitized twin; a paste event can still see types read() hid, or the other way around. The paste well on this page is a comparison, not a second toy. Both results stay in this tab and vanish when you leave.