building a QR studio that never needs an upload

tech · 2026-11-02 · 4 min

the easiest way to make a QR code online is to send the value to a server and draw the result there. QRCanvas takes a smaller route: the generator runs in the browser, and the content never needs to leave the tab.

i built QRCanvas as a vanilla JavaScript studio for ten kinds of content: links, text, email, phone, SMS, WhatsApp, WiFi, contact cards, events and places. Choose a type, enter its fields and the preview updates as you work. No account, upload or watermark interrupts that loop.

the preview is the product

a QR code is usually treated as a black-and-white square with a download button. That is enough to prove the encoding works, but not enough for something that will sit on a menu, a business card or a printed sign. QRCanvas lets you start from a preset and adjust the colours, module shape, corners, logo and quiet zone while the code remains visible.

the export follows the job: SVG for print and PNG for screens. The page also recommends scanning the result with two phones before sending it to print. That check matters more than a polished preview. A code can look good and still be hard to scan if the contrast, size or quiet zone is wrong.

privacy is an implementation choice

the text is encoded in JavaScript in the tab and the image is drawn by the browser. There is no upload endpoint to receive a WiFi password or private link. The site says the studio has no tracking cookies or analytics, uses self-hosted fonts and can work offline after it has loaded.

that boundary removes a server-side copy, but it does not make the QR destination private. Anyone who scans a code can read what it encodes, and a static QR does not become editable after it is printed. If a destination must change later, encode a redirect you control rather than the final address.

what the boundary leaves out

QRCanvas is for making and exporting a code, not managing a campaign. It does not need an account or a server to render the result, and it does not claim that a printed code will last forever: the destination still has to work. A static code has no expiry, but the page it points to can disappear.

that is the trade-off i wanted to make visible. The tool should let someone design a useful code quickly, keep the entered value in the browser and leave them with a file they can test. The browser-only architecture is not a privacy slogan placed beside the product; it is the reason the workflow has no upload step at all.