📶 WiFi QR Code Generator

Share WiFi Instantly —
No Password Typing

Create a WiFi QR code that guests scan to connect instantly with any modern phone. No typing passwords, no errors. Perfect for homes, cafés, hotels, offices and events. 100% free, no sign‑up.

📱 Android 10+ 📱 iPhone iOS 11+ 📶 WPA/WPA2 🔒 100% Private
📶 Enter WiFi details WIFI QR SPEC
How it works: Guests scan the QR with their phone camera – Android 10+ and iPhone iOS 11+ connect instantly. No app needed.
Case‑sensitive — enter exactly as shown in WiFi settings
Hidden / Non‑broadcast SSID
Enable if your network doesn't appear in the WiFi list
📁 Click or drag to upload logo
PNG, JPG, SVG · max 500 KB
Logo preview
WiFi QR Code
💡 Quick tips
Choose WPA/WPA2 for all modern routers
SSID is case‑sensitive — match exactly
Use Level H error correction with a logo
Download SVG for print — infinite resolution
Test on iPhone & Android before printing

📊 Why WiFi QR Codes Are a Game‑Changer

73%
of smartphone users have used QR codes — WiFi QR is one of the top use cases
3s
average time to connect to WiFi with a QR code vs. 30s+ typing a password
87%
of cafés and hotels now offer WiFi QR codes for guest convenience
100%
private — your password never leaves your device

📖 How to Create Your WiFi QR Code in 4 Steps

Choose Your Security Type
WPA/WPA2 for most routers, WEP for older hardware, or Open for no‑password networks.
Enter Network Name (SSID)
Type your WiFi name exactly as it appears in settings — it's case‑sensitive.
Enter Password & Toggle Hidden
Add your password (if required) and enable Hidden if your network doesn't broadcast.
Generate & Download
Click Generate, customise colours and logo, then download PNG or SVG.
Print & Display
Print the QR and place it in your home, café, hotel, or office for instant guest connection.
Test on All Devices
Before bulk printing, test the QR with both iPhone and Android to ensure flawless connection.

💼 Perfect Use Cases for WiFi QR Codes

Home
Let guests connect without asking for the password every time.
Cafés & Restaurants
Display on tables or menus — instant connection for customers.
Hotels & Airbnb
Print in the welcome pack — effortless check‑in WiFi access.
Offices
Share guest network without revealing credentials to visitors.
Events & Conferences
Print on badges or signage — attendees connect in seconds.
Car Rentals & Shuttles
Share in‑car WiFi instantly with passengers.
Medical Offices
Patients can connect to guest WiFi while waiting.
Schools & Campuses
Students and visitors connect to campus WiFi effortlessly.

🚀 6 Benefits of a WiFi QR Code

Instant Connection
No more reading out passwords letter by letter. Guests scan and connect in under 3 seconds on any modern phone.
No App Required
The standard WiFi QR format is supported natively in the camera app on Android 10+ and iPhone iOS 11+.
100% Private
QR generation happens entirely in your browser. Your WiFi password never leaves your device — never stored, never tracked.
Works Offline
The QR image is a static file. Print it once and it works forever — no internet, no server, no expiry.
Fully Branded
Customise with your brand colours and logo. A branded QR looks professional and increases scan rates.
Easily Updateable
Changed your password? Simply generate a new QR code in seconds — your old one stops working.

📖 Complete Guide: How to Share WiFi with a QR Code

WiFi QR codes are one of the simplest and most practical uses of QR technology. Instead of asking guests to type a long, complex password, they simply point their phone camera at the QR code and tap the notification — they're connected instantly. This works on both iPhone (iOS 11+) and Android (10+) using the built‑in camera app.

Why Typing WiFi Passwords Is Broken

WiFi passwords are often long, case‑sensitive, and contain special characters. When a guest asks for your WiFi password, you either have to read it aloud (and risk them mishearing) or send it via text (which is slow). QR codes eliminate all of this — they encode the network name, security type, and password into a single scannable image.

Understanding the WiFi QR Format

The standard WiFi QR format is a text string that starts with WIFI: and includes the security type (T:), SSID (S:), password (P:), and optional hidden flag (H:). For example: WIFI:T:WPA;S:MyNetwork;P:Secret123;;. This generator creates that exact string for you, escaping special characters correctly.

Best Practices for WiFi QR Codes

Frequently Asked Questions

The QR code encodes a standard WiFi string (WIFI:T:WPA;S:NetworkName;P:Password;;). When scanned with the camera on Android 10+ or iPhone iOS 11+, the phone offers to join the network automatically — no typing needed.
Android 10+ and iPhone iOS 11+ can scan WiFi QR codes natively from the camera app — no third‑party app required. Older devices may need Google Lens or a QR scanner app.
Yes. The QR code is generated 100% in your browser using JavaScript. Your password never leaves your device. You can even disconnect from the internet after the page loads and it still works.
WPA/WPA2 for all modern routers (the default since 2004). WEP only for very old hardware — note that WEP is insecure and should be upgraded. Open/None for networks with no password.
Yes. This generator correctly escapes all special characters (semicolons, commas, backslashes, quotes, colons) following the WiFi QR specification. Just type your SSID exactly as it appears in your settings.
No. The QR code image is static — credentials are encoded directly inside it. It works forever, offline, with no server or subscription required. If you change your WiFi password, simply generate a new QR code.
No. All QR code generation happens entirely in your browser. Your WiFi network name, password, and security settings never leave your device — never sent to any server, never stored, never tracked.

WiFi: ' + ssid + ' · ToolsBox.org

' ); win.document.close(); } function resetAll() { ['wifi-ssid', 'wifi-pw'].forEach(id => { const el = document.getElementById(id); if (el) el.value = ''; }); document.getElementById('wifi-hidden').checked = false; document.getElementById('qr-out').innerHTML = ''; document.getElementById('qm-info').textContent = '—'; document.getElementById('qm-ready').textContent = ''; document.getElementById('wifi-preview').style.display = 'none'; rmLogo(); // Reset security to WPA const defBtn = document.querySelector('.seg-btn[data-sec="WPA"]'); if (defBtn) setSecurity(defBtn); } /* ── CUSTOMISE ── */ 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'); } 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; } /* ── LOGO ── */ 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(); } /* ── ERRORS ── */ 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'); } /* ── FAQ ── */ 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('wifi-ssid').value = 'ToolsBox_Guest'; document.getElementById('wifi-pw').value = 'welcome123'; livePreview(); generateQR(); });