Skip to main content

Zero-upload evidence

Running one typical operation on each tool page produced no request that carried our test input: the browser talks only to this site, and it sends nothing about what you paste. Below is the raw table and the exact method, so you can reproduce it.

Method

We built the site as a static export, served that export from a local static server, and opened one page per tool in a headless Chromium with service workers blocked. For each tool we performed a single typical operation against the real page: we typed an input sentinel into every visible text field and clicked the primary action button, and for the file tools we uploaded a real image and ran the conversion. We then counted every request the page issued, including the page load itself.

Measurement date
2026-10-20
Environment
@playwright/test 1.58.2 · Chromium 145.0.7632.6 · darwin arm64 · Node v20.18.0

What was measured

One typical operation per tool page, on the English pages (the only locale captured). The table below pairs each tool with the operation that was actually performed and the number of requests observed.

Language captured
en

27 tools

What was measured
ToolInputOperation performedRequestsRequests carrying your inputCross-origin requests
bmp-to-webpno inputpage load only3300
certificatetexttyped into every visible text field, then clicked the primary action3300
colortexttyped into every visible text field; no primary action could be triggered3300
crontexttyped into every visible text field; no primary action could be triggered3300
csstexttyped into every visible text field, then clicked the primary action3300
csvtexttyped into every visible text field; no primary action could be triggered3300
difftexttyped into every visible text field, then clicked the primary action3300
encodetexttyped into every visible text field, then clicked the primary action3300
encrypttexttyped into every visible text field, then clicked the primary action3400
gif-to-webpno inputpage load only3300
hashtexttyped into every visible text field, then clicked the primary action3400
hmactexttyped into every visible text field, then clicked the primary action3400
image-compressorfile uploaduploaded a real image, then ran the conversion4800
jpg-to-webpfile uploaduploaded a real image, then ran the conversion3300
jsontexttyped into every visible text field, then clicked the primary action3300
jwttexttyped into every visible text field, then clicked the primary action3300
markdowntexttyped into every visible text field, then clicked the primary action3300
passwordno inputclicked the primary action3300
png-to-webpfile uploaduploaded a real image, then ran the conversion3300
qrcodetexttyped into every visible text field, then clicked the primary action3300
regextexttyped into every visible text field; no primary action could be triggered3400
rsano inputclicked the primary action3300
texttexttyped into every visible text field; no primary action could be triggered3300
timestamptexttyped into every visible text field, then clicked the primary action3300
uuidtexttyped into every visible text field, then clicked the primary action3300
webp-to-jpgfile uploaduploaded a real image, then ran the conversion3300
webp-to-pngfile uploaduploaded a real image, then ran the conversion3300

How to read the table

Requests counts every request the page made, the page load included; it is not a count of uploads. The column that matters is the one before it: requests that carried the input sentinel. That number is the honest version of “nothing is uploaded” — it is measured, not asserted. Two rows say page load only, because no fixture of the right input format exists in the repository for those conversions; we publish that reduction instead of inventing a number.

Questions about this evidence

Does this prove that nothing can ever be uploaded?

It proves what it measured: with the network recorded and the page served without a content security policy, no request carrying the test input left the browser during one typical operation per tool. It is a measurement of the artifact in this repository, not a proof about every future version of it.

Why does the request count look large if nothing is uploaded?

Because a request count includes the page load: the document plus its scripts, styles and fonts. Those are requests for code that this site serves, and they carry none of your input. The column that answers the upload question is the input-carrying one.

Which operation was run for each tool?

The same shape for all of them: an input is provided the way a visitor would provide it, then the tool's primary action is triggered. The table names the shape per row, including the rows where only the page load could be measured.