A qr code generator for an app is useless without a real URL to point at
The pages that currently rank for this topic all assume you already shipped to the App Store and just need a poster QR. The harder, much more common problem is the one before that: you have an idea, you want to test it on your actual phone, and there is nothing real to scan yet. mk0r solves that prerequisite in about 30 seconds, then the QR is the easy part.
Two questions hiding behind the same phrase
"qr code generator for app" splits cleanly into two intents that most articles online conflate.
The first is marketing: I have an iOS or Android app already in the store and I want to print a QR on a flyer that links to the install page. Every page that currently ranks for this topic answers that question. Adobe Express, Canva, QRCode Monkey, Jotform, QRCodeChimp, MyQRCode, Smler. Pick one, paste the App Store URL, download the PNG.
The second is much earlier in the lifecycle: I am building something, I want a real device to interact with the prototype, I do not want to run a tunnel against my laptop or wait on a TestFlight review. The whole point of a QR here is to remove the friction between the laptop and the phone in the same room. None of the popular pages on this topic touch this case, because none of the popular tools give you a real, world-reachable URL the second you finish editing.
The piece nobody hands you: a real public URL
Every mk0r VM session boots an E2B sandbox and exposes its dev server on a public HTTPS hostname. The URL has the exact shape below, where sandboxId is the ephemeral identifier of the sandbox you just claimed:
That URL is what the QR encodes. It works from any phone with cellular data. There is no localhost magic, no extra port forwarding, no tunnel daemon to keep alive. The TLS cert is E2B's, valid out of the box. iOS Camera, Android Camera, Lens, any QR scanner: they all hand the URL to the default browser and your app loads.
How the URL gets onto the phone
Three pieces meet at the QR. The mk0r sandbox produces the URL. A QR encoder (any of them) turns the URL into a 2D bitmap. The phone camera decodes the bitmap and hands the URL to Safari or Chrome. The diagram below names them.
Where the QR sits in the chain
Building the QR component inside the app
Sometimes the QR belongs in the app itself, not on a separate page. A "scan to open on your phone" button on a marketing site, a Wi-Fi password sharing widget, a peer-to-peer payment flow. mk0r writes those for you. Below is roughly what the agent puts into your sandbox when you ask for a QR component pointing at the current URL.
The agent runs npm install qrcode.react against the running Vite dev server, drops the file, then watches HMR re-render. Playwright (on port 3001 inside the sandbox) opens the page in headful Chromium and screenshots the QR before the turn commits to local git. If the SVG fails to render the agent fixes it before handing the turn back.
Watching it happen, end to end
The terminal stream below is what the dashboard surfaces back to you over the ACP bridge on port 3002. You see each tool call as the agent runs it.
From sentence to a scan, step by step
Type one sentence into mk0r
Open mk0r.com, no signup. 'A QR code generator that wraps the current page URL and shows the QR centered on a teal background.' Hit enter.
Sandbox boots in about 2.5 seconds
A pre-warmed E2B template (mk0r-app-builder, id 2yi5lxazr1abcs2ew6h8 in production) is claimed from the pool. Vite is already running on port 3000 inside.
Agent writes the QR component
Claude Haiku, by default. It installs qrcode.react, drops a QRCodeSVG, mounts it. HMR updates the iframe in your dashboard.
Public URL is live, ready to encode
Your preview URL has the exact shape https://3000-{sandboxId}.e2b.app/. Copy it from the address bar of the preview iframe, or just paste it into your QR generator of choice.
Scan with the phone in your pocket
iOS or Android camera. Tap the notification. The page loads in Safari or Chrome. You are now using your in-progress app on the actual device, no install required.
What the pre-baked sandbox gives you
Live preview URL is the whole trick
Every session opens https://3000-{sandboxId}.e2b.app/ on the public internet. The QR encodes that URL. Your phone camera opens it. There is no extra step, no install on the phone.
Pre-baked Vite + React
Drop qrcode.react into the running sandbox. No npm init, no Tailwind setup. The template (mk0r-app-builder) already has Vite, React 19, TypeScript and Tailwind v4 scaffolded at /app.
Mobile preview frame
The dashboard ships a 390x844 mobile viewport (the iPhone 14 logical size) defined in src/components/phone-preview.tsx. Toggle it before generating the QR and you see the phone shape your scanner will see.
Playwright sees what the phone sees
The Playwright MCP runs inside the sandbox on port 3001. Ask the agent to navigate Chromium to the QR page and screenshot it; you get evidence the QR actually renders before you scan it.
Local git per turn
Adding the QR is one commit. If you regret the placement, undoTurn rolls just that change back without losing the rest of the app. See src/core/vm.ts for the git surface.
No App Store dependency
Because the QR points at a web URL not a deep link, you skip the entire iOS app provisioning and Android Play Console flow that other guides on this topic assume you have already done.
Where each existing tool actually fits
None of the popular QR generators are wrong. They are tools for the second half of the problem. Pair any of them with a real preview URL and you are set. The marquee below is a quick read of the most common ones and what they are best at.
Anchor fact
A working QR for your in-progress app is one short follow-up prompt away. The encoder you reach for does not matter. The URL inside the encoder does, and that URL is already live the moment your sandbox boots.
When a published custom domain is the better target
The sandbox URL is perfect for a same-room demo. It is not great for a poster, a business card, or anything that has to outlive the session. The sandbox sleeps after inactivity, the URL still loads after a cold-start delay, but the ID is ephemeral. For a QR you want to print, publish the app to a custom domain via the Publish modal in the dashboard, then encode that domain instead.
The published path uses Cloud Run, an HTTPS Load Balancer, and Certificate Manager. The cert is yours. The domain is yours. The QR, once printed, keeps working as long as the deploy does.
Want this set up against your own product?
Show us the app, we will walk through wiring a QR-shareable preview, custom domain, and scan tracking on a 20-minute call.
Book a call →Frequently asked questions
Why would I need a QR code for an app I have not shipped yet?
To test it on a real phone in seconds. Pull out any iPhone or Android, open the camera, point it at the QR on your laptop screen, and tap the notification. You are now using the app on the device it will actually run on, with no TestFlight invite, no Expo Go install, no localhost tunnel. Most articles about this topic assume your app is already in the App Store. Most app development happens before that point.
What URL does the QR actually point to?
Every mk0r VM session exposes a public HTTPS preview at the shape https://3000-{sandboxId}.e2b.app/. That URL is constructed in src/core/e2b.ts at line 292 (live session) and reconstructed at line 2464 (when the session is restored from Firestore after a deploy). It is reachable from the open internet over TLS, not just from your laptop, so the QR works from any phone with cellular data. No ngrok, no Cloudflare Tunnel, no port forwarding.
Can mk0r build the QR generator itself, inside the app?
Yes. Tell mk0r 'add a QR code that points to this app' and the agent will run npm install qrcode.react inside the pre-baked Vite + React + TypeScript sandbox, drop a QRCodeSVG component into your UI, wire it to window.location.href, and Playwright will verify that the SVG renders in a real Chromium tab before handing the result back to you. The whole turn commits to local git so you can roll it back if you change your mind.
Does the QR keep working when I close my laptop?
Briefly, no. The E2B sandbox sleeps after inactivity (lifecycle: pause, autoResume) and the preview URL returns a cold start until the next request resumes it. Within a session, scanning the QR triggers a resume, so the page loads slightly slower the first time but does not 404. If you want a permanent QR, publish the app to a custom domain via the Publish modal and generate the QR against that.
Can I just use a free QR code generator like QRCode Monkey or Adobe Express?
Yes, and you should, if all you need is the static image. Paste your mk0r preview URL into qrcode-monkey.com, download the PNG, share it. The unique part is not the QR algorithm, which is identical everywhere. The unique part is having a real, world-reachable URL the second you finish prompting, which is the prerequisite that the rest of the no-code tooling space does not give you.
What if I want to track scans?
The simplest answer: ask mk0r to add a small tracker. A one-line useEffect that POSTs to a /scan endpoint when the URL is loaded with ?src=qr captures a basic scan count. For richer analytics, the project already wires PostHog into every published app via the standard provider, so a custom event named qr_scan with utm_source=qr fans out into your normal funnel. Both options are a single follow-up prompt.
What sizes should the QR be on screen so a phone can scan it?
Four times the QR's module count in pixels is a safe minimum at typical phone-to-screen distances. For a 25x25 module QR (encoding ~50 ASCII characters at error correction level M), that is around 100 px square at minimum, 200 px to be comfortable. The QR generators above all output vector PNG or SVG; render at 256 px and you have headroom for camera autofocus. If your URL is long, the module count goes up, so render larger.
Related guides
AI App Builder, No Code
Why typing a sentence is faster than dragging a block. The text-input model that produces the preview URL you wrap in a QR.
Responsive Web App Mobile Prototype
How the 390x844 phone-preview frame interacts with the live sandbox URL when you are designing for thumbs.
X Code Generator App
A different generator-for-app angle: building your own RFC 6238 TOTP generator inside the same pre-baked sandbox.
Open mk0r, type your app idea, copy the preview URL into any QR generator. That is the whole flow.
Build an App, Get a Scannable URL