Skip to content

Repository files navigation

WiFi2QR — share your Wi-Fi with a QR code

Turn the Wi-Fi you're on into a QR code your guests scan to join — no reading passwords aloud, no typing.
One click reads your current network, or print a poster / a sheet of cut-out cards for the wall or the front desk.
Everything runs on your device and nothing is ever uploaded.

wifi2qr.app  ·  macOS  ·  Windows  ·  Linux  ·  Web  ·  16 languages  ·  free & open-source

Download

No install (any device): open wifi2qr.app in a browser — available in 16 languages (auto-detects yours), works offline, installs as a PWA.

Desktop app (auto-reads your current Wi-Fi, prints posters/cards) — all builds on the releases page:

Platform Installer
macOS (Universal — Intel + Apple Silicon) — signed & notarized (opens with no Gatekeeper warning) Wi-Fi2QR_1.0.6_macOS_universal.dmg
Windows (x64) Get it from Microsoft Store
signed, auto-updates, all 16 languages
Linux · Debian/Ubuntu Wi-Fi2QR_1.0.6_amd64.deb
Linux · Fedora/RHEL Wi-Fi2QR-1.0.6-1.x86_64.rpm

Every release ships a signed checksum manifest + build-provenance statement so you can verify a download matches this source — see Verify your download.

Why it's handy

Modern Wi-Fi passwords are long, random, and a pain to read aloud or thumb-type on a phone. A Wi-Fi QR fixes that — point a camera at it and the device joins, no typing and no mistakes. It's genuinely useful when:

  • Guests arrive. Friends, family, clients, contractors scan and they're on — without you reciting xK7$mq… character by character or scribbling it on a whiteboard.
  • You run a café, studio, clinic, Airbnb or rental. Generate the QR once, print a poster for the wall or a sheet of cut-out cards for the front desk, and every visitor self-serves. No staff time, no password on a sticky note by the till.
  • Hotels & events. Print a sheet of cut-out cards — one per room, or a stack to hand out at reception.
  • You're onboarding a new device. Phone, tablet, laptop, smart TV, printer, or any IoT gadget with a camera or companion app — scan to join instead of pecking at an on-screen keyboard with a remote.
  • You never memorised the password. macOS saved it years ago and you've no idea what it is. This reads it from your keychain and turns it into a QR without ever showing the plaintext to you or anyone.
  • Meetings & events. Share the room's network with everyone at once — throw the QR up on the projector.
  • You switch networks often. Hit Refresh after joining a different one and it regenerates instantly.

It's the same convenience iPhones have for sharing Wi-Fi to nearby Apple devices — but as a plain QR that anything with a camera can scan, generated on demand, completely offline.

Print a poster or cut-out cards

Both the desktop apps and the web app turn the code into something you can put up or hand out:

  • A full-page "Join the Wi-Fi" poster — for a wall, a door, or a meeting-room projector.
  • A sheet of cut-out cards — one per hotel room, or a stack for the reception desk or an event.

The heading is localized into your language, the password can be shown or hidden, and the QR keeps the little Wi-Fi glyph in the centre while staying fully scannable. It prints straight to paper or Save as PDF — no design tool, no upload.

Two ways to use it

1. Web app — runs on any device (web/). A tiny browser app: type or paste a network name + password and it draws the QR instantly, entirely client-side — no upload, works offline, and installs as a PWA (Add to Home Screen). Open web/index.html directly, or host the web/ folder anywhere static. This is what covers iPhone, iPad, Android, GrapheneOS, Windows, Linux, ChromeOS — anything with a browser. The QR engine is Project Nayuki's MIT encoder (vendored, verified by an encode→decode round-trip). The UI is localized into 16 languages (including right-to-left Arabic) across the web app and all three desktop apps, driven from one shared string catalog (i18n/).

2. Desktop apps — one-click auto-read + printing. On macOS, Windows and Linux the app reads this machine's current Wi-Fi (SSID + saved password) and shows the QR with no typing, and prints the poster/cards above. macOS is a native SwiftUI app (Sources/); Windows and Linux are a Tauri app (desktop/) that reuses the same web frontend. See Build & run below.

Why not auto-read on phones? Reading the live Wi-Fi password is an OS-privileged operation only desktop OSes (macOS/Windows/Linux) allow. iOS/iPadOS forbid it entirely and Android/GrapheneOS block it without root — which is why phones ship their own Wi-Fi-QR sharing in Settings. So the auto-read app is desktop-only; the web app (manual entry) is the universal path.

launch  →  [grant Location]  →  [approve keychain]  →  QR shown, ready to scan / print

Why it needs two permissions (macOS auto-read)

Permission Why Who asks
Location On macOS 10.15+, the OS only tells an app the name (SSID) of the Wi-Fi you're on if it has Location access. (Apple classes "which Wi-Fi you're near/on" as location data.) System dialog on first launch
Keychain The Wi-Fi password lives in your keychain. The app reads it with the same /usr/bin/security tool Keychain Access uses, which shows the standard "allow / always allow" authorization dialog. System dialog when it reads the password

Both are the user's to grant — the app can't (and doesn't try to) bypass either. The password is used only to build the QR payload in memory; it is never written to disk, logged, or sent anywhere.

How it works

The macOS app is pure SwiftUI + system frameworks, no third-party dependencies:

File Responsibility
Sources/WiFi2QRApp.swift @main app + window
Sources/LocationAuth.swift Requests/observes Location authorization (CoreLocation) — the gate that unlocks the SSID
Sources/WiFiInfo.swift Reads the SSID (CoreWLAN) and the password (shells out to security, triggering the keychain prompt)
Sources/QRCode.swift Builds the standard WIFI:T:WPA;S:…;P:…;; payload (with proper escaping) and renders it with CoreImage's CIQRCodeGenerator
Sources/PrintCard.swift Draws the printable full-page poster and the sheet of cut-out cards
Sources/ContentView.swift The one-click flow + UI: shows the current network, reads the password on demand, renders the QR, with Save PNG / Print (Poster / Cards) / Copy / Refresh

The Wi-Fi provisioning payload is the cross-platform standard camera apps understand:

WIFI:T:WPA;S:<ssid>;P:<password>;;      # H:true; appended for hidden networks

\ ; , : " in the SSID/password are backslash-escaped per the spec. Security type defaults to WPA (covers WPA/WPA2/WPA3); a network with no saved password is emitted as T:nopass (open).

Build & run

macOS app (SwiftUI)

Requirements: macOS 13+ and the Xcode Command Line Tools (xcode-select --install). No full Xcode or Xcode project needed — it builds with swiftc + codesign.

./install.sh          # builds (if needed) and installs into /Applications, then opens it
# or, to just build without installing:
./build.sh && open build/WiFi2QR.app

install.sh drops WiFi2QR.app into /Applications (falls back to ~/Applications). build.sh compiles the sources, assembles WiFi2QR.app, and ad-hoc code-signs it (a stable identity so macOS can attach the Location/keychain permissions). It builds for the host architecture by default; for an Intel build run ARCH_OVERRIDE=x86_64 ./build.sh.

Because you built it locally, macOS Gatekeeper opens it without fuss. If you ever copy it to another Mac (so it carries a download quarantine flag), open it the first time with right-click → Open, or clear the flag: xattr -dr com.apple.quarantine /path/to/WiFi2QR.app.

Windows / Linux app (Tauri)

cd desktop
npm install
npm run tauri dev          # run from source
npm run tauri build        # produce installers (.deb/.rpm on Linux, .msix on Windows)

Web app

Nothing to build — open web/index.html, or host the web/ folder on any static host. After editing the string catalog, regenerate the embedded bundle with python3 i18n/bundle.py.

Verify your download

Every release carries a signed checksum manifest and a build-provenance statement, so you can confirm a binary is the exact artifact this project's CI built from a specific public git commit:

File on the release What it is
SHA256SUMS (+ .minisig) SHA-256 of every artifact, signed with minisign
provenance.json (+ .minisig) in-toto / SLSA v1 statement linking each digest to the source commit + CI run
minisign.pub the public key (also at https://wifi2qr.app/minisign.pub)
# public key (never changes — pin it once):
PUB=RWSkY/1m7/T4kf6WOuu3z80TCFO962ckT7af0cuenWGkNMlcRIS4fj1L
minisign -Vm SHA256SUMS -P "$PUB"        # -> "Signature and comment signature verified"
                                          #    trusted comment shows the source commit
sha256sum -c SHA256SUMS                   # your download matches the manifest (shasum -a 256 -c on macOS)

Full details, plus the honest limits of what this proves (and the reproducible-build path), are in SECURITY.md. This is separate from — and on top of — the platform identity signing (Apple Developer ID notarization on macOS, the signed Store MSIX on Windows).

First launch (macOS auto-read)

  1. Approve "WiFi2QR would like to use your location." → the app reads the current network name.
  2. Approve the keychain dialog for the Wi-Fi password (tick Always Allow to skip it next time).
  3. The QR appears with the network name under it — point another device's camera at it to join, or hit Print for a poster / sheet of cut-out cards.

Troubleshooting

  • "Location access is off" — click Open Settings, enable Location for WiFi2QR, then Continue. Or click Enter name manually and type the SSID; the password step still works.
  • Network name not detected — you're on Ethernet, Wi-Fi is off, or Location isn't granted. Type the name in the manual field.
  • "No saved password found" — the network is open, enterprise (802.1X, no simple password), or was never joined on this Mac. Open networks still produce a valid (password-less) QR.
  • Keychain prompt every time — tick Always Allow in the dialog.

Notes / design choices

  • Not sandboxed (macOS). The app shells out to /usr/bin/security to read the Wi-Fi password, which the App Sandbox would block. It ships as a Developer ID–signed utility (direct download / notarized .dmg), appropriate for this kind of tool rather than the Mac App Store.
  • The released .dmg is signed + notarized. Signed with the mineracks Developer ID and notarized + stapled by Apple, so it opens on any Mac with no Gatekeeper warning. A local ./build.sh is ad-hoc-signed instead (perfectly fine for building and running from source on your own Mac).
  • No network code, no analytics, no persistence. MIT licensed.
  • Icon is generated from code — no image assets. icon/makeicon.swift draws a QR code's three finder "eyes" with a Wi-Fi fan in the fourth corner on a blue→cyan squircle; ./icon/makeicon.sh renders it to Resources/AppIcon.icns (all sizes), which build.sh bundles.

License

MIT — see LICENSE.

About

Turn the Wi-Fi you're on into a QR code guests scan to join — free, open-source, runs entirely on your device (nothing uploaded). Web + macOS/Windows/Linux apps, 16 languages, printable posters & cut-out cards.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages