QR Code Reader — Free, Private, Browser-Based
Read any QR code without installing an app: drop an image, paste a screenshot with Ctrl/Cmd-V, or point your camera at the code. Decoding runs locally with jsQR — the image never leaves your device, and URL results become a safe clickable link.
Private by design. Images and camera frames are decoded entirely in your browser — nothing is uploaded to a server.
How to read a QR code from an image or camera
- Pick an input. Choose the Image tab to decode a file or screenshot, or the Camera tab to scan live with your webcam or phone camera.
- Add the QR code. Drag in a PNG/JPG, click to browse, or simply paste a screenshot with Ctrl/Cmd-V. In camera mode, grant permission and point the lens at the code.
- Read the result. The decoded text appears instantly. URLs are shown as a clickable link with an Open button; plain text shows in a copy-ready box.
- Copy or open. Click Copy to grab the decoded text, or Open link to visit a decoded URL in a new tab.
Use Cases
Frequently Asked Questions
Is my image or camera feed uploaded?
No. Decoding runs entirely in your browser using the jsQR library. Images and camera frames are processed locally and never sent to a server.
Can I paste a screenshot instead of saving a file?
Yes. Take a screenshot, then press Ctrl/Cmd-V anywhere on the page while the Image tab is active — the clipboard image decodes immediately.
Why does it say "No QR code found"?
The code may be blurry, too small, low-contrast, or partially cropped. Try a sharper image, better lighting, or crop the picture closer to the code and retry.
Does the camera scanner work on phones?
Yes. On mobile it defaults to the back camera, and you can flip to the front camera with one tap. Scanning stops automatically as soon as a code is found.
Is it safe to open a decoded URL?
Links open in a new tab with rel="noopener" so the page cannot control this one. Still, check the domain before entering credentials — QR codes are a common phishing vector.
What QR content types can it read?
Anything encoded as a standard QR code: URLs, plain text, Wi-Fi strings, vCards, and more. The raw decoded text is always shown so you can copy exactly what was embedded.
QR payload types — what the decoded text means
A QR code is just a container for a text string; what your phone does with it depends on a prefix at the front. Reading the raw decoded text is how you check where a code actually goes before you follow it — the single most useful defense against a tampered code on a poster or parking meter.
| Type | Raw text starts with | What a scanner app does with it |
|---|---|---|
| Website | https:// or http:// | Opens the URL — check the domain here before tapping |
| Plain text | no prefix | Displays the text; nothing is opened |
| Wi-Fi | WIFI:T:WPA;S:<ssid>;P:<password>;; | Offers to join the network — the password is visible in plain text |
| Contact card | BEGIN:VCARD or MECARD: | Offers to save a new contact |
| mailto: or MATMSG: | Opens a pre-filled email draft | |
| Phone | tel: | Pre-fills the dialer |
| SMS | smsto: or sms: | Opens a pre-filled message |
| Calendar event | BEGIN:VEVENT | Offers to add the event |
| Geo location | geo:<lat>,<lon> | Opens a map pin |
| App deep link | a custom scheme such as intent:// or myapp:// | Opens a specific app — treat unknown schemes with suspicion |
- If decoding fails, the usual causes in order: the code is smaller than roughly 100 px in the image, the photo is angled enough to distort the finder squares, glare is washing out the contrast, or the code is light-on-dark (inverted) — re-crop tightly around the code and retry.
- A code printed over a busy background often fails because the quiet zone is missing: a QR needs a clear margin about four modules wide on every side.
- Decoding runs locally via jsQR, so nothing about the code — including a Wi-Fi password inside it — reaches a server.
Related tools
More free, in-browser tools from the Developer Tools set — every one runs locally, with no sign-up and no upload.