QR Code Scanner

Scan QR codes with your camera or decode an image file to reveal URLs, Wi-Fi settings, contact cards and plain text. Everything is processed locally in your browser and never uploaded.

Live camera scanning

The browser asks for camera permission on first use. Point the camera at a code and it decodes automatically.

Decode an image
Click to choose a QR image, or drop one here PNG, JPG or WebP, up to 20MB per file, parsed locally only.

Decoding is powered by the open-source jsQR library (Apache-2.0 license). Every scan runs locally in your browser.

How to use

  1. Press "Start camera", allow the permission prompt, and point the camera at a code.
  2. The camera stops by itself after a successful scan, and the text appears in the result area below.
  3. Alternatively drop a QR image onto the dashed area, or click it to pick a file.
  4. URL results get an "Open link" button, and every result can be copied with one click.
  5. Press "Clear result" to reset, and switch between camera and image input at any time.

FAQ

Is anything uploaded to a server?
No. Decoding runs through the jsQR library in your browser, so images and camera frames never leave your device. The page also keeps working offline once loaded.
What does camera scanning need?
The page must be served over HTTPS, and you must allow the camera in the permission prompt. Phones prefer the rear camera, while desktops use whatever camera is available.
Which codes cannot be read?
The tool reads standard QR codes only, not barcodes, DataMatrix or other symbologies. Damaged, glossy, tiny or low-contrast codes can also fail.
Can images larger than 640 pixels be decoded?
Yes. Pictures above 640 pixels are scaled down proportionally before decoding. The smaller size speeds the decoder up and fits its sweet spot, and almost all codes survive the resize.

How to use

  1. Choose an input

    Camera scanning sits at the top and image decoding sits below. Phones work best with the camera, while desktop users can drop a screenshot or a saved QR image into the dashed area.

  2. Start the camera

    Press Start camera and allow the permission prompt, then point the lens at the code. The camera stops by itself after a successful scan, so no manual switch-off is needed.

  3. Upload or drop an image

    Click the dashed area to pick a file, or drop one straight in. Pictures larger than 640 pixels are scaled down first, and the applied size is shown under the drop zone.

  4. Read and copy

    The result area shows the text and its type. URL results come with an Open link button, every result can be copied, and Clear result empties the area for the next scan.

About this tool

This scanner runs entirely in your browser and offers two input paths. The camera path opens the device camera through getUserMedia and feeds frames to the decoder continuously until a code is found. The stream then stops on its own. The image path accepts files picked through the dialog or dropped onto the drop zone. Pictures larger than 640 pixels are scaled down proportionally before decoding, and the applied size is reported under the drop zone. All decoding runs locally through the open-source jsQR library. Neither images nor camera frames ever leave your device, and nothing is uploaded to any server. Results are labelled by type, and every result can be copied with one click.

Type detection looks at the beginning of the decoded text. Content starting with http or https is treated as a URL and receives an Open link button. That button is offered only for these two protocols, which keeps unexpected schemes from being opened. Text starting with WIFI: is a Wi-Fi configuration, the format used by router labels and phone hotspot sharing. Content starting with BEGIN:VCARD is a contact card in the format that address book apps exchange. Everything else is shown as plain text and can be copied directly. When no code is found the page shows a friendly notice instead of an error. A credit line on the page keeps the attribution that the Apache-2.0 license asks for.

How it works

A QR code stores data as a matrix of black and white modules, and decoding runs in several passes. The decoder first looks for the three finder patterns and estimates the orientation, size and perspective of the whole matrix. It then reads the data codewords under the mask rule of the detected version, and finally applies error correction to recover the text. Both input paths share the same decoder; they differ only in where the pixels come from. The camera path samples live video frames, while the image path resizes the picture so its longer side is at most 640 pixels. Proportional scaling keeps the module ratios intact, so the finder patterns survive. Decoding gets faster without losing accuracy.

Browser camera access depends on the getUserMedia API. Browsers only expose it on HTTPS pages or on localhost, a privacy rule you cannot switch off. The request carries facingMode: environment, which tells a phone to prefer the rear camera. Desktop browsers ignore the hint and use the device they have. The tool calls track.stop() at three moments: when you press the stop button, when the page is hidden, and right after a successful scan. Releasing the track turns off the recording indicator in the browser tab immediately. Only one video track is held at a time, so repeated clicks on start cannot stack several open cameras. A race between two streams is handled too.

When to use it

  1. Read Wi-Fi codes

    Router labels and phone hotspot sharing often print a Wi-Fi QR code whose content starts with WIFI:. Scan it here and copy the full string, and the network name plus password are both visible. Handing a new device to a guest then becomes a copy job instead of a spelling exercise with a tiny printed label.

  2. Digitise contact cards

    Business cards from trade fairs often carry a vCard QR code. Photograph the card, decode it here, and the name, phone number and email come back exactly as encoded. Pasting that text into your address book or CRM is far faster than retyping every field, and it also removes the typos that retyping invites.

  3. Check printed URLs

    A code on a flyer hides its target until someone scans it. Decode the URL here first and confirm the destination looks right before the artwork goes to print. A wrong or stale link then never reaches thousands of copies, and the design team gets one more chance to fix it.

Tips & tricks

  • When the camera finds nothing, check lighting and distance first. Hold the device steady, because motion blur stops the decoder from reading the modules.
  • After decoding a Wi-Fi code, copy the full text into a note. The network name and the password both appear in it, which saves a trip back to the router label.
  • For screenshots, crop to the code itself and keep a small white margin. Busy screenshots with lots of interface elements decode far less reliably.

Things to watch

  • Barcodes are not supported

    The striped symbol on supermarket packaging is a one-dimensional barcode. jsQR only handles QR matrices and reports no code found for barcodes, no matter how sharp the picture is. Use a dedicated scanner app for those, because the two formats share nothing beyond a similar name.

  • Permission once denied

    After you press Block in the permission prompt, the page cannot ask again, and the camera section hides itself with a notice. Open the site permissions from the address bar, allow the camera manually, and reload the page to run a new scan.

  • Blurry screenshots fail

    Screenshots of screens often carry moire patterns and compression noise, which glue neighbouring modules together and break decoding. Crop to the code with a white margin, or point a phone camera at the screen instead of zooming into a screenshot.

Related Tools