QR Code Reader
Read a QR code from a picture you drop in, a screenshot you paste, or your camera, and see what the code actually says before anything happens. Most readers open the address the moment they decode it, which is the wrong way round for a code a stranger printed on a sticker: the destination is unreadable until it has been decoded, so this page shows the payload as text, says what kind of thing it looks like, and leaves opening it as a click you make. An Open link action appears only for an http or https address and prints the destination beside it, with the whole payload in a box above that scrolls; a javascript:, data: or file: address is shown as text with the reason it is not offered. The picture is decoded in this tab by the browser's own BarcodeDetector where that exists and by jsQR everywhere else, and the readout says which of the two ran. The camera is off until you press for it, and it is released the moment a code is read, when you press Clear and when you leave the tab.
Drop a picture here, paste a screenshot, or turn the camera on. Nothing is uploaded.
No code has been read yet.
- nothing read yet
- nothing read yet
- nothing read yet
What a code can hold
A QR code is a short string of text and nothing more, so what happens next is entirely up to whatever reads it. A phone camera usually guesses from the first word: an address starting http opens a browser, one starting tel offers a call, a WIFI: code offers to join a network. This page makes the same classification and then stops, because the one thing a printed code cannot tell you is where it goes.
| What the code starts with | What it is | What this page does |
|---|---|---|
| http:// or https:// | A web address. | Shows the whole address and offers an Open link action you press yourself. |
| mailto: tel: sms: | An email address, a phone number or a message. | Shows it as text to copy. Nothing is dialled and nothing is sent. |
| WIFI: | Network details, including the password in the clear. | Names the network, and says so when the password is sitting in the code in the clear. |
| BEGIN:VCARD | A contact card. | Shows every line so you can read it before saving anyone. |
| javascript: data: file: | Addresses that run code or point inside the machine that opens them. | Shown as text with the reason, and never offered as a link. |
Common questions
- Is my image uploaded to a server?
- No. The picture is drawn into a canvas in this tab and the decoder reads the pixels there, so the file never leaves your machine. The tool makes no network request at all, so the picture has nowhere to go except the canvas in front of you. That matters more here than for most tools, because people scan codes off invoices, tickets, parcels and two factor authentication setup screens, and the payload of a QR code is often something you would not paste into someone else's website. The only thing kept between visits is whether you last used the image or the camera, stored in your own browser.
- Why does it not just open the link for me?
- Because a QR code is unreadable until it is decoded, so a printed code is the one link you cannot look at before following. A sticker on a parking meter or a menu can be covered by another sticker, and the code underneath can point anywhere. This page decodes the code, prints the address as text, says it looks like a web address, and waits. The Open link action appears only when the payload starts with http or https, it opens in a new tab with no referrer passed on, and the destination is printed beside it so you read where you are going first. An address carrying a username and password in front of the site gets a line naming the host it really goes to, because that is the oldest way of making a link look like it points somewhere else. This page does not check whether a site is reputable: it tells you exactly where the code points and leaves the decision with you.
- My photo will not decode. What should I try?
- The page says it found no code rather than guessing at one, and a few things usually fix it. Get the whole code in the frame with a little clear space around it, since the quiet zone is part of the symbol and a code cropped to its edges often fails. Take the photo square on rather than at an angle, hold the camera steady so the edges are sharp, and avoid a glare spot across the middle. If the code is small in a large photo, crop the picture down to the code and try again. A screenshot of a code on a screen usually reads first time, so it is worth taking one when a photo keeps failing. Codes with a logo in the middle or a scuff across them often still read, because the format carries error correction, but a code that is torn or half missing may not be recoverable at all.
- Does the camera keep running after I have finished?
- No. The camera is never opened until you press for it, either with Use camera on the stage or Camera in the source row, and it is released in four places: as soon as a code is read, when you press Clear or Stop camera, when you switch to another tab, and when you leave the page. Releasing it stops the track, which is what turns the camera light on your machine off, so the light going out is your own confirmation rather than a promise you have to take on trust. The camera preference is remembered for the segment control, but a remembered preference never starts a camera: the page always waits for you to press the button.
- What can a QR code hold besides a web address?
- Plenty, and this page names what it found. A code can carry a plain web address, an email address (mailto:), a phone number (tel:), a ready to send message (sms:), Wi-Fi network details (WIFI:), a contact card (BEGIN:VCARD or MECARD:), or just plain text such as a table number or a serial. Only a web address is offered as a link; everything else is shown as text for you to copy. Two are worth knowing about: a Wi-Fi code carries the network password as plain text, so anyone who can photograph the code can read the password, and this page says so; and an address that runs code or points inside the machine, such as javascript:, data: or file:, is shown as text with the reason it is never offered as a link.
- Which decoder reads the code, and does it matter?
- Where your browser has its own BarcodeDetector, which Chrome and Edge do on most platforms, that is used first because it is fast and native. Everywhere else, and whenever the native one finds nothing, jsQR reads the pixels in the tab. The readout names which of the two actually ran, so a result is never anonymous. It does not change what you get: both are asked for QR codes only, so the same picture gives the same payload in any browser, and both run entirely on your machine.
- Can it read a barcode, or several codes at once?
- This page reads QR codes, one at a time, and says so rather than half supporting other symbols: both decoders are asked for QR codes only, so a shop barcode such as EAN-13 or Code 128 will not decode here. When a picture holds more than one QR code, the first one found is the one reported, so crop the picture to the code you want if that is not the one you meant. If you need to make a code rather than read one, the barcode generator on this site writes Code 128, EAN-13 and UPC-A and lets you download the result.
- Is there a limit on the size of the picture?
- This page imposes none. A very large photo is scaled down for the scan rather than refused, and it is read at a detailed size first and a smaller one afterwards, because shrinking a noisy photo sometimes lets a code read that missed at full resolution. The only real ceiling is your own browser: if it cannot hold a picture that big as pixels, the page says exactly that and asks for a smaller copy or a crop, rather than failing without a reason.
The image is decoded on this machine and nothing is uploaded. The payload is shown to you as text and the link is never followed for you, because a QR code can point anywhere. A blurry, cropped or low contrast photo may not decode at all, and the tool says so rather than guessing.