📝 Text QR Code Generator

Any Text
Instant QR Code

Turn any plain text, note, instruction, or message into a scannable QR code. Works offline once scanned, no app or internet needed to read it. 100% free, no sign‑up.

📝 Plain Text 📱 No Internet Needed 🎨 Custom Colors 📥 PNG / SVG
📝 Enter your text RAW TEXT
How it works: Type or paste any text — a note, instructions, a quote, a serial number. The QR code encodes it directly. When scanned, the text appears on screen instantly, no internet required.
0 / 2000 characters
QR codes can hold up to ~4,296 characters, but shorter text scans faster and more reliably. Under 300 characters recommended.
📁 Click or drag to upload logo
PNG, JPG, SVG · max 500 KB
Logo preview
Text QR Code
💡 Quick tips
Keep text under 300 characters for fastest scans
Longer text creates a denser, harder-to-scan code
Test on both iPhone and Android before printing
Use SVG for high-resolution print materials
High contrast colours scan best in all conditions

📊 Why Text QR Codes Are Perfect for Offline Content

4,296
maximum alphanumeric characters in a single QR code
300
characters recommended for fastest, most reliable scanning
0
internet connection needed to read the text after scanning
100%
private — your text never leaves your browser

📖 How to Create Your Text QR Code in 4 Steps

Type or Paste Your Text
Enter any plain text — a note, instructions, a quote, a serial number, or any message. Line breaks and special characters are supported.
Generate the QR Code
Click Generate — your QR code appears instantly in the preview panel. No waiting, no registration.
Customise (Optional)
Change colours to match your brand, adjust size, and choose error correction level for better scan reliability.
Download & Deploy
Download as PNG for digital use or SVG for print. Your text QR code works offline forever — no server required.
Test on All Devices
Before bulk printing, test the QR with both iPhone and Android cameras to ensure the text displays correctly.
Share Your Message
Place your QR on product labels, instruction manuals, gift cards, or any surface where you want to share text without printing it.

💼 Where to Use Your Text QR Code

Product Labels
Embed serial numbers, warranty info, or care instructions directly on packaging — no paper manual needed.
Instructions & Manuals
Print setup steps or troubleshooting tips that work without internet access — perfect for field use.
Gifts & Cards
Hide a personal message, poem, or quote inside a scannable code for a surprise reveal.
Education
Share study notes, answer keys, or classroom instructions on printed handouts.
Medical & Safety
Embed emergency contact info, allergy alerts, or medication instructions on bracelets or cards.
Digital Business Cards
Include your contact details, bio, or tagline as scannable text without linking to a website.
Restaurant Menus
Display your daily specials or chef's notes as a QR code on tables or boards.
Art & Creativity
Embed poems, lyrics, or QR art that reveals a hidden message when scanned.

🚀 6 Benefits of a Text QR Code

Works Offline
The text is embedded directly in the QR pattern. Anyone can scan and read it without any internet connection — perfect for remote locations.
Never Expires
Unlike URL QR codes that can go dead, text QR codes are self‑contained. They work forever, with no server dependency or subscription.
Fully Customisable
Change colours, add a logo, and adjust error correction to match your brand and ensure reliable scanning in any environment.
100% Private
QR generation happens entirely in your browser. Your text never leaves your device — never stored, never tracked.
PNG & SVG Export
Download PNG for digital use and SVG vector for professional print — from product labels to billboards.
Universal Compatibility
Text QR codes work with the native camera app on iPhone (iOS 11+) and Android (9+) — no third‑party app required.

📖 Complete Guide: How to Use Text QR Codes for Offline Content

Most QR codes you see today are URL codes that link to a website. But there's a simpler, more reliable alternative: the text QR code. Instead of pointing to a URL, a text QR code stores the actual content directly inside the QR pattern itself. When someone scans it, the text appears on their screen instantly — with no internet connection required.

Why Text QR Codes Are Underrated

URL QR codes are convenient, but they have a critical weakness: they rely on the website staying online. If the site goes down, the QR code stops working. If the URL changes, the QR code becomes useless. Text QR codes eliminate this risk — the data is self‑contained. This makes them ideal for product labels, instruction manuals, emergency information, and any scenario where reliability is more important than tracking.

What Can You Put in a Text QR Code?

The possibilities are endless. You can encode serial numbers and warranty information for products. You can embed care instructions for clothing or plants. You can share quotes, poems, or personal messages in greeting cards. You can provide short instructional guides, tips, or reminders. You can even use them for accessibility — turning text into an audio‑readable format when scanned.

Best Practices for Text QR Codes

Frequently Asked Questions

The QR code encodes your exact text as raw data within the pattern. When scanned with a camera app or QR scanner, the text appears on screen instantly — no internet connection needed to read it.
A QR code can technically hold up to about 4,296 alphanumeric characters at the lowest error correction level. However, codes with more data become denser and harder to scan reliably — we recommend staying under 300 characters for the best scanning experience.
No. Plain text QR codes work completely offline. The text is embedded directly in the QR pattern, so any scanner app can read it without a network connection — unlike QR codes that link to a website.
Yes. The QR code is generated 100% in your browser using JavaScript. Your text is never transmitted to or stored on any server.
Yes. This generator supports line breaks, emojis, punctuation, and most Unicode characters. Just type or paste your text naturally.
No. The text is encoded directly inside the QR image — it works forever, with no server, subscription, or internet connection required.

Text QR Code · ToolsBox.org

' ); win.document.close(); } function resetAll() { document.getElementById('txt-content').value = ''; updateCount(); document.getElementById('qr-out').innerHTML = ''; document.getElementById('qm-info').textContent = '—'; document.getElementById('qm-ready').textContent = ''; rmLogo(); } function toggleCust() { const b = document.getElementById('cust-body'); const hd = document.querySelector('.cust-hd'); const h = b.classList.toggle('hide'); hd.setAttribute('aria-expanded', !h); document.querySelector('.cust-arr').textContent = h ? '▾' : '▴'; } function syncHex(cid, hid) { document.getElementById(hid).value = document.getElementById(cid).value; } function syncCol(hid, cid) { const v = document.getElementById(hid).value; if (/^#[0-9a-fA-F]{6}$/.test(v)) document.getElementById(cid).value = v; } function updSize() { const v = document.getElementById('sz-range').value; document.getElementById('sz-label').textContent = v + '×' + v; document.getElementById('sz-range').setAttribute('aria-valuetext', v + ' by ' + v + ' pixels'); } function setEC(ec, btn) { EC = ec; document.querySelectorAll('.ec-p').forEach(p => { p.classList.remove('on'); p.setAttribute('aria-pressed', 'false'); }); btn.classList.add('on'); btn.setAttribute('aria-pressed', 'true'); autoGenerate(); } function preset(fg, bg) { document.getElementById('fg-col').value = fg; document.getElementById('fg-hex').value = fg; document.getElementById('bg-col').value = bg; document.getElementById('bg-hex').value = bg; autoGenerate(); } function handleLogo(inp) { const f = inp.files[0]; if (!f) return; if (f.size > 512000) { showErr('Logo must be under 500 KB'); return; } const reader = new FileReader(); reader.onload = e => { currentLogoBase64 = e.target.result; document.getElementById('logo-img').src = currentLogoBase64; document.getElementById('logo-name').textContent = f.name; document.getElementById('logo-prev').style.display = 'flex'; setEC('H', document.querySelector('.ec-p[data-ec="H"]')); autoGenerate(); }; reader.readAsDataURL(f); } function rmLogo() { currentLogoBase64 = null; document.getElementById('logo-inp').value = ''; document.getElementById('logo-prev').style.display = 'none'; document.getElementById('logo-img').src = ''; autoGenerate(); } function showErr(m) { const e = document.getElementById('err-box'); e.textContent = '⚠️ ' + m; e.classList.add('show'); setTimeout(() => e.classList.remove('show'), 5000); } function hideErr() { document.getElementById('err-box').classList.remove('show'); } function faq(el) { const p = el.parentElement; const open = p.classList.contains('open'); document.querySelectorAll('.fi').forEach(x => { x.classList.remove('open'); x.querySelector('.fq').setAttribute('aria-expanded', 'false'); }); if (!open) { p.classList.add('open'); el.setAttribute('aria-expanded', 'true'); } } /* ── MOBILE NAV ── */ (function() { const h = document.getElementById('ham'), m = document.getElementById('mob-menu'); h.addEventListener('click', () => { const o = m.classList.toggle('open'); h.setAttribute('aria-expanded', o); const s = h.querySelectorAll('span'); if (o) { s[0].style.transform = 'rotate(45deg) translate(4px,4px)'; s[1].style.opacity = '0'; s[2].style.transform = 'rotate(-45deg) translate(4px,-4px)'; } else { s.forEach(x => { x.style.transform = ''; x.style.opacity = ''; }); } }); document.addEventListener('click', e => { if (!h.contains(e.target) && !m.contains(e.target)) { m.classList.remove('open'); h.setAttribute('aria-expanded', 'false'); h.querySelectorAll('span').forEach(x => { x.style.transform = ''; x.style.opacity = ''; }); } }); })(); /* ── LOGO DRAG‑AND‑DROP ── */ (function() { const drop = document.getElementById('logo-drop'); ['dragenter', 'dragover'].forEach(ev => drop.addEventListener(ev, e => { e.preventDefault(); drop.classList.add('drag-over'); })); ['dragleave', 'drop'].forEach(ev => drop.addEventListener(ev, e => { e.preventDefault(); drop.classList.remove('drag-over'); })); drop.addEventListener('drop', e => { e.preventDefault(); const f = e.dataTransfer.files[0]; if (f && f.type.startsWith('image/')) { const dt = new DataTransfer(); dt.items.add(f); document.getElementById('logo-inp').files = dt.files; handleLogo(document.getElementById('logo-inp')); } }); drop.addEventListener('keydown', e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); document.getElementById('logo-inp').click(); } }); })(); /* ── DEMO ON LOAD ── */ window.addEventListener('load', () => { document.getElementById('txt-content').value = 'Welcome! Scan this code to read the full message instantly — no internet required.'; updateCount(); generateQR(); });