QR Code Generator
Create a high-resolution QR code from any text, link, Wi-Fi string or contact detail. Choose the size and error-correction level, then download the PNG or
Create a QR code from any text: a website link, a Wi-Fi login, contact details, an address or a plain message. Choose the output size and the error-correction level, then download the PNG or copy the data URI to embed the code directly in HTML or CSS.
Higher error correction makes the code survive a scratch or a bad print at the cost of a denser pattern - level M is a good default, while H is what you want for stickers, packaging and anything that might get dirty. Always test the printed code with a real phone before running a large print job.
How to create a QR code
Enter the text, link or Wi-Fi string
Choose size and error-correction level
Download the PNG or copy the data URI
FAQ
Which error-correction level should I choose?
Level M (about 15% damage tolerance) suits screens and clean print. Level H (about 30%) is for stickers, packaging and outdoor use where the code may get scratched or partially covered.
How do I make a Wi-Fi QR code?
Use the standard string format WIFI:T:WPA;S:network-name;P:password;; and phones will offer to join the network when scanning it. Keep the password URL-safe or escape special characters.
What size should I print?
A rule of thumb is at least 2 x 2 cm for a phone at close range, and larger for posters viewed from a distance - roughly one tenth of the viewing distance. The PNG is generated large enough to scale up.
Can I put my logo in the middle?
Not in this tool. If you do it elsewhere, remember that covering the centre removes data; level H error correction is what makes a small logo overlay safe.
Are the codes tracked or expiring?
No. These are static QR codes: the content is encoded in the pattern itself, so they never expire and are not redirects that can be switched off.
Is my content uploaded?
No, the code is generated in your browser. Note that anyone who scans it will see the content, so never encode a private password you do not want shared.
At a glance
| Input | text |
|---|---|
| Multiple files | No |
| Where it runs | In your browser - files are never uploaded |
| Works offline | Yes — once the page has loaded |
| Price | Free, no sign-up, no watermark |
Where conversions quietly break
Most conversion bugs are not about syntax, they are about meaning. A CSV column of postcodes loses its leading zeros the moment a spreadsheet guesses it is a number; a long ID exceeds floating-point precision; dates change meaning depending on whether they are day-first or month-first. JSON keys are unordered but arrays are not, and a tool that sorts keys changes nothing while one that sorts arrays changes the data. Unicode is another trap: text can arrive as UTF-8, UTF-16 or with a byte-order mark, and a decoder that guesses wrong turns accented characters into mojibake. Before trusting any conversion, spot-check the first and last row, any field with leading zeros, and any field containing quotes, commas or newlines.
Handling secrets safely
Developer tools process credentials more often than people realise, and the risk is not the algorithm but where the data goes. Hashing is one-way and is not encryption - MD5 and SHA-1 are broken for anything security-related, and even SHA-256 is the wrong tool for storing passwords, where bcrypt, scrypt or Argon2 exist precisely to be slow. Base64 is an encoding, not protection: anyone can decode it, so never treat it as obfuscation. A JWT can be read by anyone who holds it, which is why the payload must never contain secrets, and decoding a token does not verify its signature - verification requires the key. Everything on this site runs locally in your browser, which is the reason it can safely handle tokens and passwords at all.