Skip to content
YAS.SH
URL & Links🔒 Browser (client-side)API available📴 Works offlinebeginner

QR Generator

Generates QR codes from any text or URL, fully in your browser.

Data stays in your browser
Ready to runInstant execution
All tools →
100% Free & Unlimited Static QR
#000000
#ffffff
Live QR code preview

14 chars · Level M Error Correction

💡 Static vs. Dynamic QR Codes: This tool creates 100% free, unlimited static QR codes with direct encoded text. If you need a Dynamic Tracked QR code linked to a short link where the destination URL can be changed any time after printing and scan analytics (scans, country, city, OS, device) are tracked in real time, generate it in your Dashboard.

What does this tool do?

Generates QR codes from any text or URL, fully in your browser.

Why would I use it?

  • You want a scannable code for a link, Wi-Fi config or contact card.
  • You are printing campaign materials with a trackable QR.
  • You need a QR without uploading your data anywhere.

Real-life example

Input
https://yas.sh/launch
Output
A QR code image you can download as PNG or SVG

Generated locally with the qrcode library.

Input → Process → Output → Next

Input
Enter the content, choose size and colors.
Process
The browser renders the QR matrix.
Output
A PNG/SVG QR image.
Next action
Download it and test-scan before printing.

Common mistakes

  • Making QR codes too small or low-contrast to scan.
  • Using a short link that changes (good — keep the destination editable).
  • Placing QR codes where they cannot be scanned (low light, curved surfaces).

What the result means

Scanning the QR opens the encoded content.

Privacy & security

Your input is processed entirely in your browser and never sent to a YAS server.

API

Endpoint
POST https://yas.sh/api/v1/tools/qr-generator
Request Header
Content-Type: application/json
cURL
curl -X POST "https://yas.sh/api/v1/tools/qr-generator" \
  -H "Content-Type: application/json" \
  -d '{"input":"https://yas.sh","size":256}'
JavaScript
const res = await fetch("https://yas.sh/api/v1/tools/qr-generator", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
  "input": "https://yas.sh",
  "size": 256
}),
});
const data = await res.json();
Python
import requests

r = requests.post("https://yas.sh/api/v1/tools/qr-generator", json={"input":"https://yas.sh","size":256})
data = r.json()
FieldTypeRequiredDescription
inputstringYeshttp/https URL (≤ 2048 chars)
sizeintegerNo (default 512)128–1024 px
Success response
{ "slug": "qr-generator", "result": "data:image/png;base64,..." }

Render a QR code for an http/https URL as a PNG data-URL.

Error responses
  • 400 VALIDATION_ERROR — invalid input or unsupported option.
  • 413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.
  • 429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).
Limits
  • Maximum input: 64 KB per request.
  • Rate limit: 60 requests/min per IP address.
  • Authenticated accounts benefit from higher tier quotas.

QR Generator: technical reference, use cases and FAQ

How QR Generator works

A QR code encodes data into a matrix of modules with Reed–Solomon error correction, which is why a partly obscured or printed-and-scuffed code still scans. Four correction levels trade capacity against robustness: L recovers about 7% of codewords, M 15%, Q 25% and H 30%. Higher correction means more modules for the same payload, producing a denser code that needs to be printed larger.

Capacity depends on both the version (matrix size, 21×21 up to 177×177) and the encoding mode. Numeric data is packed most efficiently, then alphanumeric — which uses a restricted 45-character set including uppercase letters only — then byte mode for everything else. A URL containing lowercase letters therefore falls into byte mode and consumes noticeably more capacity than the same URL uppercased.

When to use it: real-world scenarios

Printing a link on physical material

Posters, packaging and business cards. Keep the URL short so the matrix stays coarse enough to scan from the intended distance.

Distributing Wi-Fi credentials

The WIFI: schema lets a phone join a network without typing a passphrase — useful for guest networks and far less error-prone than reading it aloud.

Adding contact details to printed material

A vCard payload saves a contact in one scan, though it is large and produces a dense code that needs generous print size.

Linking a physical location to a tracked destination

Combine with the UTM Builder so scans are attributable, and use a short link so the matrix stays scannable.

Pro tips

  • Keep the quiet zone: four modules of clear space on every side. Codes cropped tight to the edge fail to scan and the reason is invisible.
  • Rule of thumb for print: the code should be at least one tenth of the intended scanning distance — a code read from two metres needs to be roughly 20 cm.
  • Use correction level M for screens and Q or H for print that may be scuffed, curved or partially covered by a logo.
  • Point the code at a short redirect you control, so the destination can change without reprinting anything.

Limitations and edge cases

What this tool deliberately does not do, and where it will disagree with other implementations.

  • Capacity is finite — around 4,296 alphanumeric characters at the largest version and lowest correction, far less in practice at usable print sizes.
  • Dense codes need larger print and better contrast; a long URL at small size will not scan reliably.
  • Inverted colour schemes (light on dark) fail with some older scanners, though most modern phone cameras handle them.
  • A QR code is opaque to the user: it can encode any destination, which is why malicious codes placed over legitimate ones are an effective attack.

Frequently asked questions

How much data can a QR code hold?
Up to roughly 4,296 alphanumeric or 7,089 numeric characters at maximum version and minimum error correction. Practical limits are far lower, because dense codes require large, high-contrast printing.
Which error correction level should I use?
M for screens and clean print, Q or H where the code may be damaged, curved or partly covered by a logo. Higher correction increases density for the same content.
Can I put a logo in the middle?
Yes, with level H, covering no more than about 30% of the area. Always test with several phones — the error correction budget is being spent on the logo rather than on real-world damage.
Why does my code not scan?
Usually a missing quiet zone, insufficient size for the scanning distance, low contrast, or too much data forcing a dense matrix. Shorten the payload and enlarge the code before adjusting anything else.
Ask YAS AI
🍪 Cookies & privacy. Essential cookies keep you signed in and remember language and theme. Google AdSense and reCAPTCHA are Google technologies: AdSense runs only after Accept All; reCAPTCHA loads on sign-in and contact forms. See how Google uses data: https://policies.google.com/technologies/partner-sites cookie policy · privacy policy.
Settings