Multi-link QR code generator
100% Private & Local — Your data never leaves your browser. These QR codes are permanent and will never expire.
Multi-link settings
Design
Add a centre logo
The image is read in this page and embedded in the code as a data: URL. It is not uploaded, and it stays inside the file you download.
More design options
The dark half of the code. Keep it well below the background in lightness.
Covers the quiet zone as well as the gaps between modules. A transparent background leaves it out of the file, so nothing is drawn with it.
Contrast 11.5:1 between the modules and the background.
PNG and WebP keep an alpha channel; the SVG simply omits the background rectangle. Whatever the code is placed on becomes the light half of the contrast.
A gradient fills the dark modules only. Its lighter end sets the contrast a scanner actually gets, so both ends have to stay dark.
The second colour, used only while a gradient is selected. It is measured for contrast alongside the first.
Degrees clockwise from a left-to-right sweep. A radial gradient spreads from the centre outwards, so the angle applies to a linear one only.
Rounded shapes cover less of each cell. The centre stays covered, which is where a decoder samples, but a small print of a dense code reads more reliably as squares.
The ring of the three finder patterns.
The eye inside each finder pattern.
The blank margin around the code, measured in modules. 4 is the specified minimum.
Higher recovery survives more damage and costs capacity, so the same content produces a denser symbol.
A logo sits at the centre and holds the level at H. Its width limit follows the symbol: 14% on the smallest code, 30% on a dense one.
Live preview & export
Enter the address of the page that lists your links.
Export
Raster, for screens
Complete the form to enable the downloads.
Export size and encoded text
- Payload
- Nothing encoded yet
- Symbol
- Not built yet
- Recovery
- M
Waiting for input
A symbol holds one payload, so a multi-link code is either one address pointing at a page that lists your links, or a plain-text list the reader displays. Both are offered here, along with an honest account of what the text list does on a real phone.
When someone scans it
In page mode the reader offers to open your links page. In list mode it shows the addresses as text, and whether any of them are tappable depends on the reader.
One symbol carries one payload
There is no QR format that means several destinations. A symbol holds a single string and the reader does one thing with it, so every product sold as a multi-link QR code is one of the two options above: a link to a page that lists the links, or the list itself as text.
Services that sell this as a feature are selling the hosted page plus a redirect they control. That is a real service, and it is also a subscription your printed code then depends on. The same result is available from any page you host, with the code pointing straight at it.
The plain-text list, honestly
A list of addresses separated by line breaks decodes as text, and what a reader does with text is not standardised. Some make every line tappable, some only the first, and some show a block of characters with nothing to tap at all. Assume that whoever scans it may have to type at least one address by hand, and keep the addresses short enough that typing is realistic.
It also costs symbol size. Five forty-character links plus their line breaks come to about 204 bytes, which is a version 10 symbol at recovery level M — 57 modules across, against 29 for a single short address. At the same printed width those modules are half as wide, so the code needs either a bigger print or a closer camera.
Its one genuine advantage is that it works with no network at all. If the list has to survive a venue with no coverage, this is the mode that does it.
Why a hosted page is usually the better answer
One short address makes one small symbol, and the page behind it stays editable forever. Links can be added, reordered or removed and the printed code does not care, because it points at the page rather than at the list.
It does not need a link-in-bio service. A static HTML file with a heading and a list of anchors on any host will do, and hosting it yourself means nothing between the scan and your page is counting anything.
The trade-off is that the page has to stay up. A static code cannot be repointed after printing, so use an address on a domain you intend to keep, and prefer a short stable path over anything a content system might renumber.
Questions and answers
Can one QR code open several links at once?
No. A symbol holds one payload and the reader takes one action. The two workable approaches are a page that lists your links, or a text payload the reader displays.
Will the addresses in the text list be clickable?
Sometimes. Readers differ: some linkify every line, some only the first, some none. This is the main reason a hosted page is the more reliable choice for anything printed in quantity.
Do I need a link-in-bio service for the hosted page?
No. Any page you can publish works, including a single static HTML file. What matters to the code is that the address stays valid.
How many links fit in the text list?
The limit is bytes, not links: 2,331 at recovery level M, so around fifty forty-character addresses in theory. In practice the symbol gets too dense to print small long before that, and around five is where it stops being comfortable.
How a static QR code works
Every code on this site is static: the payload is written into the black and white modules themselves. Nothing is looked up when the code is read, no server of ours takes part, and no subscription holds the printed code up. The same property is the limit — once it is printed, what it contains cannot be changed.
Three things then decide whether a printed code reads: how many bytes the payload came to, which recovery level absorbs the damage, and how wide a single module ends up on paper. These guides work through each of them with the numbers.