Make and read QR codes, privately
Turn a link, message or Wi-Fi password into a QR code and download it as a PNG, or drop in a photo to read the QR code it contains. Everything runs on your own device. Nothing is uploaded.
Type or paste anything — a link, Wi-Fi password, contact card, or plain text.
Enter some text above to see its QR code.
QR codes are created and read on your device. Nothing is uploaded.
How it works
- To create a code, type or paste your text or link and download the PNG.
- To read a code, drop a photo or screenshot that contains a QR code.
- The result appears instantly — nothing is sent to a server.
Why make QR codes locally
Many QR generators route your link through their own servers, which is useful for tracking scans, but it means a third party sees every URL you encode, and "dynamic" codes can break if that service disappears. Morphr creates a plain, static QR code right in your browser. The code points straight at your link, nothing is logged, and the image is yours forever.
How a QR code actually encodes your text
A QR code isn't a picture of your link: it's a grid of black-and-white squares (called modules) that encode your text as data, plus built-in redundancy so a code can still be read even if part of it is dirty, creased or partly covered. That redundancy comes from Reed–Solomon error correction, and generators can trade it off against code density: more correction capacity means a bigger, more robust code for the same text. Morphr's generator fixes this at error-correction level M, which recovers from roughly 15% of the code being damaged or obscured — a sensible middle ground for both a code on a screen and one printed on a label, without bloating short codes unnecessarily.
The quiet zone (the plain white border around the modules) isn't decorative either. The spec calls for at least four modules of clear space on every side, because scanners use that margin to find the edges of the code before they start reading it. Cropping it away, even to save space, is the single most common reason a code that looks fine to a human eye fails to scan.
Why generating it locally actually matters
Plenty of QR generators are 'dynamic': instead of encoding your destination link directly, they encode a short link that points back through their own server, which then redirects the scanner to your real URL. That's how those services count scans and show you analytics. But it also means every person who scans the code is routed through, and logged by, a company that has nothing to do with you, and the code stops working entirely the day that service shuts down or you stop paying for it. Morphr's generator writes your text straight into the code's data modules in your browser tab. Nothing about what you typed is sent anywhere, there's no dependency on a redirect service staying online, and the PNG you download is a complete, self-contained image you can keep forever.
Picking a size for print versus screen
The size picker controls how many pixels each module renders as, not the number of modules; that's decided automatically by how much text you encode. A short URL produces a small, coarse grid; a long one (say, an entire Wi-Fi configuration string or a block of text) produces a denser grid with smaller modules for the same physical size, which makes it more sensitive to blur and to being printed too small. For anything meant to be scanned from a normal reading distance on paper (a poster, a flyer, packaging) use the largest scale and keep the encoded text as short as practical, ideally a shortened link rather than a long tracking URL. For an on-screen code someone scans from another device a few inches away, a smaller scale is plenty.
Contrast matters more than color. Dark modules on a light background photograph far more reliably under phone cameras than the reverse, and a code printed in low contrast (pale gray on white, or over a busy photo background) undermines the error correction before a single module is damaged.
Reading a code back
The decode tab works on the picture you drop, not on your camera feed: it reads whatever raster image the browser can open (PNG, JPEG, and the other common formats), searches it for a QR pattern, and decodes the first one it finds. A steep viewing angle, heavy blur, or glare across a printed code are the usual reasons a legible-looking photo fails to decode; a flat, evenly lit shot of the code works best. Decoding, like generating, happens entirely in the wasm engine in your tab, so the image you drop is never uploaded.