GhostQRStudio

Make a QR code for a link.

Turn any URL into a scannable QR code — no account required, no expiration, no watermark. Customize the colors, embed your logo, and download as PNG, SVG, or a print-ready PDF. Everything runs in your browser; we never see your link.

How it works

  1. 1

    Enter your URL

    Paste any web address into the URL field. The QR preview updates instantly as you type.

  2. 2

    Customize the look

    Pick foreground and background colors, upload a logo, and adjust the error-correction level. Logo uploads auto-bump error correction to H so the code stays scannable.

  3. 3

    Download your QR code

    Click PNG, SVG, or PDF to save the file. No signup, no watermark, no expiration — the image is yours.

Frequently asked questions

  • Is this really free?

    Yes. No signup, no caps, no watermark, no paid tier. GhostQR runs in your browser and is supported by an optional tip jar — never by charging for your QR code.

  • Do you upload my URL to a server?

    No. Every QR code is generated in your browser using the qrcode library. We have no upload endpoint — open the Network tab and confirm no request carries your URL.

  • Does the QR code expire?

    Never. The QR code is a plain image file you download and keep. It is not hosted on our servers and has no TTL.

  • What URL formats work?

    Any string works — https://, http://, bare domains, deep links, app URLs. QR readers typically expect a full URL with protocol, so include https:// for best compatibility.

  • Can I print the QR code?

    Yes. The PDF download creates a 4"×4" page optimized for printing. The SVG download is vector-based and prints crisply at any size.

  • Will my logo make the QR unreadable?

    GhostQR automatically sets error correction to High (H) when you add a logo. H-level codes can recover from up to 30% data damage — plenty of headroom for a centered logo at 25-30% of the code area.

Related QR types

Every GhostQR tool runs entirely in your browser. Your file is never uploaded — there's no upload endpoint to send it to.