The one rule: dark dots on a light background
A scanner looks for a dark pattern on a light surface. Navy, dark green, deep red or charcoal dots on white all scan well. Pale yellow, light grey or pastel dots on white do not, because the camera cannot tell the dots from the background.
The QR code maker shows the contrast ratio between your dot colour and background as you change them, and warns when it drops too low. Treat that warning as a stop sign, not a suggestion. A code that barely scans on your screen will fail on paper under a shop light.
Do not invert the colours
Light dots on a dark background, sometimes called an inverted code, fail on many phones. Some scanners handle it and many do not, and you cannot control which phone your customers have. If your design has a dark background, place the code on a white panel inside it.
Gradients
A gradient across the dots can look good. Keep both ends of the gradient dark. A gradient that runs from dark blue to light blue puts pale dots in one corner, and that corner will not read. The contrast check in the generator measures the lighter end of the gradient for this reason.
Dot and corner shapes
Rounded dots and rounded corner squares scan fine at normal sizes. Fully circular dots leave small gaps between them, which makes very small or very dense codes harder to read. Use round dots on short links printed at a reasonable size, and keep square dots for long content or tiny prints. The generator flags very dense codes with rounded shapes.
The three large corner squares can be a different colour from the dots. Keep them dark too. They are what the camera finds first.
Transparent backgrounds
You can download a code with no background as PNG, SVG or WebP. It then takes the colour of whatever it sits on. That is useful for placing a code on a light textured paper or a pale brand colour, and risky on anything mid-toned or busy. Check the contrast against the final surface, not against the white preview. JPG has no transparency, so a JPG is saved with a white background.
Frames and call-to-action text
A frame around the code with short text, such as "Scan for menu" or "Scan to connect", tells people why they should bother. Frames sit outside the empty margin so they never touch the pattern. Keep the text to a few words, and use the frame colour to carry your brand instead of the dots if you want a brighter accent.
Leave the margin alone
The blank border around the code is part of it. Downloads include it. When you drop the code into a design, do not crop it, and do not let text, photos or a border run up against it.
Test on paper
Print one copy at the final size on the real material and scan it with more than one phone, in normal light and in dim light. Coloured and styled codes are where the difference between screen and print shows up most.