QR Studio

Make and read QR codes without leaving your browser. Every code generated here is static: the data is encoded in the pattern itself, not routed through a shortener or a redirect service, so a printed code keeps working for as long as the print does. Scanning is local too, from a saved image or your camera.

Options

Encoded payload
Static vs. dynamic QR codes, and why it matters for print

Every code this page makes is static. The text is encoded directly in the black and white pattern, so the code carries its own data and works for as long as the print survives. Nothing sits between the scan and the destination.

Many free QR services generate dynamic codes instead. Those encode a short link that bounces through the company's server on the way to the real destination. That design lets the service count scans and lets you change the destination later, but it also ties your code to the company. When the free tier lapses or the service shuts down, every printed code that points at it stops working. There are plenty of dead menus and posters out there for exactly this reason. If you are printing something meant to last, use a static code. There is nothing in it to expire.

🔒 Everything runs locally in your browser. What you encode or scan never leaves your device. (I use Google Analytics to see whether anyone visits this page, but it cannot see your data.)

A caveat: this is a personal side project and I make no guarantees; test a generated code with the scanner here (or your phone) before printing it somewhere important.

Built on two open-source libraries: qrcode-generator by Kazuhiko Arase (MIT) for encoding, and jsQR (Apache 2.0) for decoding. Thank you to their authors. QR Code is a registered trademark of DENSO WAVE INCORPORATED.