QR Code Scanner
Scan with your camera, or drop in a screenshot. Images never leave your device.
Camera access is requested only when you press the button. Frames are decoded on this device and discarded.
This scanner runs entirely in the page. When you scan with the camera, video frames are decoded locally and discarded — no frame is ever sent anywhere. When you upload an image, the file is read into memory and never transmitted, which you can confirm in the Network tab of your browser's developer tools.
Two inputs are supported because they solve different problems. The camera handles a code in front of you; the upload path handles a code inside a screenshot, a PDF export or a photo from someone else, which the system camera on a phone cannot read at all.
How to use it
- Press open camera and allow the permission prompt, or drop an image onto the upload area.
- Hold the code inside the frame — it decodes automatically, no shutter needed.
- Read the result before opening it, especially if it is a link.
How the decoding works
The scanner tries the browser's native BarcodeDetector first, which is fast and costs nothing to load. Where that API is unavailable — Safari being the notable case — it falls back to jsQR, a decoder bundled with the page: 40 KB rather than a megabyte, and accurate on ordinary QR symbols.
Camera frames are downscaled to roughly 640 pixels wide before decoding and processed about eight times per second rather than on every frame. That keeps detection success high while cutting CPU use, which matters on phones where the camera and the browser share a thermal budget.
Reviewed 2026-10-21. This tool runs entirely in your browser — no server, no account, and nothing you generate is stored.
Frequently asked questions
Is it safe to scan a QR code with this?
The scan itself is safe. The risk is what the code contains: a link can point anywhere. This scanner never opens a link automatically — it shows you the destination host first.
Why does the camera not open?
Usually a denied permission, a camera in use by another app, or a non-HTTPS page. Each case shows a specific message and falls back to the upload option, which needs no permission at all.
Can it read a code from a screenshot?
Yes — that is what the upload path is for. On desktop, copying a screenshot and pressing Ctrl+V into the page also works.
Does it work on iPhone?
Yes, in Safari. iOS does not expose the native barcode API, so the page uses its bundled JavaScript decoder there. It works on camera frames and uploaded photos alike, and never leaves the device.
Related tools
More from QR codes.