Type the content below the line --- in the code, or choose a type under Edit.
Type the content below the line --- in the code, or choose a type under Edit.
The QR Editor makes QR codes for links, WiFi, contacts, events, emails, text messages, places and payments. You design them with colors, gradients, shapes, a logo and a caption, and the editor reads every code back to make sure it scans - before you print it. Export SVG, PDF and EPS for print or PNG at any size.
The codes are static: the content is in the code itself, not behind a redirect that stops working when a trial ends. There is no sign-up, no advertising and no scan limit, and everything happens in your browser - nothing you type or scan is uploaded.
Links, text, WiFi (WPA, WEP, open, hidden), contacts as vCard or MeCard, email, SMS, phone, location, calendar events, Bitcoin and Ethereum, SEPA payments (EPC GiroCode) and the Swiss QR bill - each with a form and checks.
Colors, linear and radial gradients, transparent background, seven module shapes, four eye frames and five eye balls in their own color, a logo from built-in symbols or your picture, caption and frame.
Every code is read back in the browser, normal, small and blurred. Contrast, quiet zone and the logo against the error correction are checked, and the print size follows from the scanning distance.
SVG, PDF and EPS as vectors with gradients and logo; PNG up to 8192 pixels with the dpi written in, JPEG and WebP. Free, without sign-up.
Write placeholders like {{url}} in the content, paste a table, and download a ZIP of SVG or PNG files or one PDF with a code per page.
Open, drop or paste a picture, or scan with the camera - also light codes on dark backgrounds. The content becomes a code you can change.
Many "free" QR generators make dynamic codes: the code holds a short link to their server, which forwards to your address. When the trial ends or a scan limit is reached, they switch the forwarding off or show ads first - and every printed code stops working. A static code holds the address, the WiFi password or the contact itself, so it keeps working without anyone in between. The QR Editor makes only static codes and warns when the content is a link shortener.
Any https page (and localhost) can embed the editor with an <iframe> and ?embed=1 - no sign-up, no key. Embedded, the editor hides this text and shows a Save button. Add camera to the iframe's allow if the user should scan codes in it.
src= opens a .qr file (your server must allow CORS), webhook= makes "Save" (Ctrl+S) send the QR document to that address. Add &auto to save after every change.
<iframe src="https://qr.giit.ch/?embed=1&src=https://your-site.com/codes/shop.qr&webhook=https://your-site.com/save.php"
allow="clipboard-write; camera" style="width:100%;height:800px;border:0"></iframe>
The webhook gets a POST with JSON { editor: "qr", event: "save", id, name, content, updated }; content is the QR document (design lines, ---, the content).
The editor says qreditor:ready, your page answers with qreditor:load, the editor reports qreditor:loaded, qreditor:change on real edits and qreditor:save when the user saves. Your page may send qreditor:get (the current state) or qreditor:save (press Save). A plain content without design lines is a valid document.
<iframe id="ed" src="https://qr.giit.ch/?embed=1" allow="clipboard-write; camera" style="width:100%;height:800px;border:0"></iframe>
<script>
const ed = document.getElementById('ed');
const ORIGIN = 'https://qr.giit.ch';
addEventListener('message', e => {
if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
const m = e.data;
if (m.type === 'qreditor:ready')
ed.contentWindow.postMessage({ type: 'qreditor:load', name: 'Table 12',
content: 'color: #1d2b53\ncaption: Table 12\n---\nhttps://example.com/menu?table=12' }, ORIGIN);
if (m.type === 'qreditor:save') saveOnYourServer(m.name, m.content);
});
</script>
window.open("https://qr.giit.ch/?embed=window", "qreditor-17") opens the full editor in its own window with the same messages. Your page can also hand the editor its own AI prompt, an https address on your site and one key for this editor session (ai: { label, prompt, endpoint, key } in qreditor:load, or qreditor:ai); the AI then posts its result there. The editor never sends the key itself and never stores it.
?viewer=1 shows only the finished code with Download and Export: nothing can be changed and nothing is stored. The document comes from a link (#b64=, #qr=, ?src=), from your page with qreditor:load, or by POST to post.php (field content or b64, optionally name).
The whole protocol is in llms.txt. The other giit editors work the same way with their own prefix - editors.giit.ch.
No. The QR Editor makes static codes: the link, WiFi password or contact is in the code itself, not behind a redirect on our server. They work as long as the content is valid - without account, subscription or scan limit.
Yes. Every content type, every design option, SVG, PDF and EPS export, the scan check and making many codes from a table are free, without sign-up, ads or watermark.
No. Codes are made, checked and exported in your browser. Pictures and the camera image you scan are read in the browser too and are never uploaded.
The editor tells you. It compares the part of the code the logo hides with what the error correction can repair, and it reads the finished code back - normal, small and blurred. If it does not scan reliably, you see it before you print.
SVG, PDF or EPS: they are vectors and stay sharp at any size, with gradients and logo. For a picture, PNG with the size in millimetres and 300 dpi.
Yes. The forms check the IBAN, the QR-IBAN with its QR reference, the creditor reference (RF) and every field length. The Swiss QR bill is drawn with the Swiss cross and error correction M, as the standard requires.
Yes. Open, drop or paste a picture, or use the camera with Scan. The content becomes a new code you can change.
About a tenth of the scanning distance: 2 cm for 20 cm, 10 cm for one metre. The Check tab calculates it and warns when one module gets smaller than 0.4 mm.