Drop an image, paste a screenshot, or point your camera. Decoded on your device — the image is never uploaded.
Decoding runs entirely in your browser (jsQR). Images and camera frames never leave your device.
Copy takes the whole decoded text. Links, WhatsApp and Telegram chats, phone numbers, email, map locations and UPI payments also get Open; WiFi codes get Copy password; contact cards (vCard) get Save contact. Re-create styled loads the content into our generator for a custom look.
Drop an image, paste a screenshot, or point your camera. The picture is drawn onto a canvas inside this tab, the raw pixel data is read back, and a decoder searches it for the QR pattern — finder squares first, then the grid, then the data. All of it happens in your browser's memory.
Codes with decorative modules — dots, diamonds, hearts — can defeat the fast decoder. When that happens the page loads a second, heavier decoder on demand and retries automatically, which is why an unusual code sometimes takes a moment longer than a plain one.
There is no upload step to skip: no image or result is sent anywhere, which you can confirm in your browser's developer tools. The one request decoding can trigger is that second decoder, fetched from this site. Close the tab and the image is gone.
A QR code is only text. What makes it a link, a WiFi login or a contact card is the first few characters, and the scanner labels the result from those. The full decoded text is always shown before anything happens; nothing opens on its own.
| The code starts with | Shown as | Extra button |
|---|---|---|
https:// or http:// | Link | Open |
https://wa.me/ | Open (starts the chat) | |
https://t.me/ | Telegram | Open |
WIFI: | WiFi network | Copy password |
BEGIN:VCARD | vCard contact | Save contact (a .vcf file) |
MECARD: | MeCard contact | none |
BEGIN:VCALENDAR | Calendar event | none |
tel:, sms:, smsto: | Phone / SMS | Open |
mailto: | Open | |
geo: | Location | Open |
upi:// | UPI payment | Open |
BCD (first line) | SEPA transfer | none |
bitcoin:, ethereum: | Bitcoin, Ethereum | none |
| anything else | Text | none |
Every result also gets Copy, which copies the whole decoded text, and Re-create styled, which opens it in the generator with its fields filled in. SEPA and crypto payment codes are shown but not acted on, and a UPI link only hands over to your payment app. Check the amount and the payee there before you pay.
Before you open a link, read the address. A code on a poster or a parking meter can be a sticker placed over the real one, and the domain is the part that tells you where you are going. QR code scams, and how to scan safely covers what to look for.
No. Decoding runs entirely in your browser using the open-source jsQR library. Images, screenshots, and camera frames never leave your device.
Yes. Drop the screenshot onto the page, click to browse for it, or simply paste it with Ctrl+V / Cmd+V.
Your browser asks before any site can use the camera. Frames are analysed locally and are never recorded or transmitted.
Links, WiFi networks, vCard and MeCard contacts, WhatsApp and Telegram links, calendar events, SEPA and UPI payments, crypto URIs, phone, SMS, email, and plain text.
Yes — the Re-create styled button loads the decoded content straight into our generator, where you can restyle it with custom modules, colours, and frames.
Yes. Drop in many images at once, or a whole folder, and every code is decoded and listed in a table you can export as CSV. One photo containing several codes works too — each one is found separately. Everything still runs in your browser; no image is uploaded.
Yes. Once the page has loaded, decoding needs no connection — the image is processed entirely in your browser's memory. That is also why nothing you scan is ever uploaded.