# QR code module shapes compared — square to organic

> Module shapes are safe when each module keeps roughly 60% or more of its ink and neighbouring modules never merge into ambiguous blobs. Square is the 100% baseline, rounded keeps about 91% of the ink, dots about 55%, and the risk rises in that order — always decode the styled export before using it.

Source: https://useqr.app/docs/design/qr-code-module-shapes-compared · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## Why shape is a contrast problem in disguise

A decoder samples each cell of the grid — effectively reading near the centre of every
[module](/glossary/module) — and asks: dark or light? Any shape that keeps the centre
solidly inked and the cell majority-dark reads identically to a square. Styling fails
in two ways: **starving** a module (so little ink that blur or print gain tips its
sample light) and **merging** neighbours (ink bridging cells that should be light). The
working floor is roughly **60% ink per module**, and merging is never acceptable.

## The styles, measured

These are UseQR's eight module styles (`style=` parameter), with the exact geometry the
renderer uses and the risk that geometry implies:

| Style | Geometry | Ink per module | Risk |
|---|---|---|---|
| `square` | full cell | 100% | none — the baseline |
| `rounded` | corner radius 0.32 × module | ~91% | low |
| `vertical-bars` / `horizontal-bars` | runs joined into capsules, 6% inset each side | ~88% | low |
| `organic` | 0.5 × radius on free corners; connected runs stay joined | ~91–100% | low–medium |
| `dot` | circle at 84% of module width | ~55% | medium |
| `diamond` | oversized 13% so neighbours overlap | ~65% | medium |
| `star` | pointed star inside the cell | lowest of the set | highest |

Three details worth noting. The dot's 84% diameter still leaves only about 55% of the
cell inked, which is why [dot codes have a density limit](/docs/design/dot-style-qr-codes).
The diamond is deliberately drawn 13% oversized — pure inscribed diamonds touch only at
points and drop below decoder tolerance, so the overlap is what keeps the style safe.
And the organic style rounds only *free* corners, so adjacent dark modules remain
physically connected — controlled merging along the grid, not across it, as explained
on the [organic styles page](/docs/design/organic-and-fluid-qr-styles).

## How to choose

- **Print small or scan far**: square or rounded. At small physical sizes the reduced
  ink of dots and stars is the first thing blur erases — see
  [rounded vs square](/docs/design/rounded-vs-square-modules) for the print-size
  arithmetic.
- **Soft brand look at normal sizes**: rounded, bars, or organic.
- **Decorative, generous size, short payload**: dot, diamond, or star — and keep the
  [version](/glossary/version) low so modules stay large. A
  [dense code](/docs/troubleshooting/qr-code-too-dense-to-scan) amplifies every
  shape's weakness.

Eyes follow their own rules: UseQR pairs each module style with a matching default eye
(dots get circle eyes, rounded and bars get rounded eyes) but the
[eye shape](/docs/design/custom-eye-shapes) is set independently via `eye=` and
`ball=`, and eyes should always stay solid and high-contrast.

Whatever the choice, the test is empirical: run the styled export through the
[validator](/validate), at the size it will actually be used. Styling risk is
cumulative with size, contrast and logo choices, and only a real decode of the real
artwork accounts for all of them at once.

## FAQ

### Do styled QR code modules scan as well as square ones?

Rounded modules scan essentially as well as square in normal conditions. Dots, diamonds
and stars carry less ink per module, which costs margin at small sizes, low resolution
or long distance. The style itself is rarely fatal; the style combined with small print
often is.

### What is the safest non-square module style?

Rounded, which keeps about 91% of each module's ink and never merges neighbours. Bar
styles are close behind. Both look noticeably styled while giving up very little
scanning margin.

### Can module shapes touch each other?

Along the grid, deliberately — bar and organic styles join orthogonal neighbours and
decode fine, because the joined cells were all dark anyway. What must never happen is
ink bridging into cells that should be light, which changes sampled values and corrupts
data.

### Which module style should I avoid?

Star modules at small sizes. They carry the least ink of any style, so printing blur
and camera noise push their samples toward the background first. If the code is
generously sized and the payload short, they can still verify — decode the export to
check.

## Try it

- https://useqr.app/url
- https://useqr.app/validate
