Dot QR Code: How to Make QR Code Dots That Still Scan

Bhargav Dhameliya
Bhargav Dhameliya
October 15, 2026
5 min read
dot qr code featured

Want a QR code that looks designed, not default, but you’re scared the round dots will stop it scanning?

Good news first. A dot QR code is a normal QR code whose dark squares are drawn as circles. The dots themselves are rarely the problem. The corners are. In my test, dots as small as 60% of a square still scanned on both decoders I used. Round corner “eyes” were what broke.

I’m Bhargav, founder of linkutm. My team builds QR codes for marketers, and “can I use dots?” comes up every time someone opens the style menu. Every guide on this topic says “test before you print”. Nobody says how small the dots can go. So I measured it: dot size, corner style, blur and export size, 40 scans per setting.

Dot QR code at five dot sizes, from square modules to 30% dots, with decode results for each

Here’s the short answer:

Design choice Safe? What I measured
Dots at 70% to 100% of the module Yes 40 of 40 on both decoders
Dots at 50% to 60% Mostly 38 to 40 of 40, weaker under blur
Dots at 30% to 40% No One decoder fell to 10 of 40
Square corner eyes Yes 40 of 40 on both
Slightly rounded eyes (half-module radius) Yes 40 and 39 of 40
Fully round (circle) eyes Risky One decoder read 0 of 40
Eyes made of dots Risky The other decoder read 0 of 40

What Is a Dot QR Code?

A dot QR code is a QR code that draws each dark module as a circle instead of a square. The data, the grid and the error correction stay exactly the same. Only the shape of the ink changes. That’s why a dot code holds the same link and scans with the same camera app.

Some quick definitions, because these terms come up all through this post:

  • Module: one cell of the QR grid. A QR code module is dark or light. In a dot QR code, each dark module becomes a dot.
  • Finder pattern: the three big squares in the corners. The finder pattern tells a scanner where the code is and which way up it sits. Designers call these “eyes”.
  • Alignment pattern: the small square near the bottom-right corner on Version 2 and larger codes. It helps correct for tilt.
  • Timing pattern: a line of alternating modules between the finders. It tells the scanner how wide one module is.
  • Quiet zone: the blank margin around the code. The QR code quiet zone should be 4 modules wide.

Here’s how they relate. The finders find the code. The timing pattern measures it. The alignment pattern corrects tilt. Then the scanner reads every data module. A dot style touches all of these, but only some of them care about shape.

Honest limitation: “dot QR code” is a design label, not a standard. Two generators can both say “dots” and draw very different sizes.

QR Code Dots: What Are the Dots in a QR Code Called?

The dots (or squares) in a QR code are called modules. People searching “QR code dots” often just want that name. A Version 1 code has 21 x 21 modules. Each version adds 4 per side, up to 177 x 177 at Version 40.

The code I tested is Version 3: 29 x 29 modules, which is what a short link like go.ex.com/sp26 needs. Longer links push you to bigger versions with more, smaller modules. That matters for dot styles, as you’ll see in the size test.

Denso Wave, the Toyota group company that invented the QR code in 1994, describes the code as a grid of cells read in two directions (Denso Wave). The standard behind it is ISO/IEC 18004. Neither one requires square cells. Scanners just need to tell dark from light at each cell’s position.

Honest limitation: a module count tells you the grid, not the printed size. For millimetres, see my notes on the smallest QR code size.

Why Do Dot QR Codes Still Scan?

Dot QR codes scan because a decoder samples the centre of each module, not its edges. After it finds the corners and measures the grid, it asks one question per cell: is the middle dark or light? A circle centred in the cell answers “dark” just as clearly as a square does.

What a dot does change is ink. A full-width circle covers about 79% of its square (pi divided by 4). Smaller dots cover much less. In my renders, counting the square corners too, here’s how much ink each style used compared with a plain square code:

Module style Ink vs a square code
Rounded square 94%
Dot at 100% width 88%
Dot at 80% 66%
Dot at 60% 49%
Dot at 50% 40%

Less ink means less contrast once the image gets soft. Blur spreads each dot over its cell. A small dot spread thin turns grey. That’s the real risk with dots, and the blur test below shows where it bites.

Error correction helps with damaged data modules. The QR code error correction levels L, M, Q and H rebuild missing data using Reed-Solomon codes. It does not rebuild the finder patterns. If a scanner can’t find the corners, it never gets to the data.

Honest limitation: the ink figures include the square corners, so the dot-only share is lower still.

How Small Can QR Code Dots Be? (Test Results)

Keep QR code dots at 60% of the module width or bigger. Below that, one of my two decoders started missing scans.

Here’s the setup. One Version 3 code, error correction M, 8 pixels per module, square corners. I drew the data modules as anti-aliased circles at 100% down to 30% of the module width. Each setting got 40 simulated camera scans (small rotation, slight blur and sensor noise). Two open-source decoders read every image: zxing-cpp (a C++ port of ZXing, the library behind many Android scanner apps) and OpenCV.

Dot diameter zxing-cpp OpenCV
Square (reference) 40 of 40 40 of 40
100% 40 of 40 40 of 40
90% 40 of 40 40 of 40
80% 40 of 40 40 of 40
70% 40 of 40 40 of 40
60% 40 of 40 38 of 40
50% 40 of 40 40 of 40
40% 40 of 40 35 of 40
30% 40 of 40 10 of 40
Chart of QR code dots size test: both decoders read dots down to 50%, OpenCV drops below 40%

zxing-cpp read every size, even tiny 30% dots. That surprised me. OpenCV is the pickier one. It slipped at 60% (38 of 40), held at 50%, and fell away at 40% and below. The slip at 60% is noise in a clean test, not a cliff. The drop at 30% is real.

Okay, so what about level H? I ran the same sweep. It didn’t help small dots. OpenCV read 39 of 40 at 50%, 24 of 40 at 40% and 0 of 40 at 30%. Higher error correction makes a bigger, denser grid for the same link, so each dot gets even smaller on the page.

Honest limitation: this was a clean render with simulated capture. Print adds ink spread and paper texture. That’s why I’d stay at 60% or above even though zxing-cpp read 30%.

Are Round QR Code Corners Safe?

Round corners are the riskiest part of a dot QR code. Keep the three corner eyes square, or round them only slightly.

Every scanner looks for the finder pattern first. Its signature is a 1:1:3:1:1 ratio of dark and light across the middle: dark ring, light ring, dark centre, light ring, dark ring. Styling the eyes bends that ratio. Different decoders forgive different bends.

I kept the data dots at 80% and changed only the corners:

Corner (eye) style zxing-cpp OpenCV
Square 40 of 40 40 of 40
Slightly rounded (0.5-module radius) 40 of 40 39 of 40
Rounded (1-module radius) 40 of 40 24 of 40
Very rounded (1.6-module radius) 40 of 40 16 to 20 of 40
Circle 40 of 40 0 of 40
Made of dots 0 of 40 16 of 40
Dot QR code corner eye styles compared: square, slightly rounded, very rounded, circle and dotted eyes with scan results

Two lessons here. First, OpenCV got worse with every step of rounding, all the way to zero for circular eyes. Second, zxing-cpp handled any amount of rounding but could not find eyes built from separate dots. I retried dotted eyes with dots at 70%, 80%, 90% and 100% of the module. zxing-cpp read 0 of 40 every time, even when the dots touched.

Here’s the thing: no corner style except square (or nearly square) passed both. That’s the finding I’d act on. Your customer’s phone might use either kind of decoder logic, and you won’t know which.

Honest limitation: I tested my own drawings of these styles. A generator’s “rounded eye” may use a different radius than mine. Check its preview against the 0.5-module rule: the corner curve should be about half the width of one dot.

Dot vs Square QR Code: Which Handles Blur and Small Sizes Better?

Mid-size dots handle blur as well as squares, or better. Small dots fail first. At tiny export sizes, dots lose to squares.

I added extra lens blur, measured in modules (the same scale as my QR code blurred test). Level M, square corners:

Extra blur Square Dot 90% Dot 70% Dot 50%
0.3 module 38 / 40 40 / 39 39 / 40 40 / 22
0.4 module 36 / 4 38 / 35 40 / 25 37 / 0
0.5 module 30 / 0 31 / 0 27 / 0 0 / 0

Each cell is zxing-cpp / OpenCV, out of 40. The surprise is the 0.4 row. Squares fell to 4 of 40 on OpenCV, while 90% dots held 35. My guess: the small gaps between dots keep neighbouring modules from merging into one blob when blurred. Dots at 50% were the first to go.

Dot vs square QR code under extra blur and at small export sizes

Export size tells the other side of the story. I rendered the code at 2 to 8 pixels per module:

Pixels per module Square Dot 80% Dot 60%
2 39 / 0 35 / 0 0 / 0
3 40 / 39 40 / 39 40 / 33
4 and up 40 / 40 40 / 40 40 / 38 to 40

At 2 pixels per module, a dot is barely a dot. 60% dots failed completely on both decoders. At 4 pixels per module and up, everything worked.

Honest limitation: blur in a real phone camera isn’t a perfect Gaussian. Treat these as directions, not guarantees. How to scan a QR code covers the reader’s side.

Dot QR Code Styles: What Generators Call Them

Most generators offer the same five or six module styles under different names. Knowing the names helps you match a preview to my test results.

The open-source library qr-code-styling, used under the hood by many web generators, names its module styles: square, dots, rounded, classy, classy-rounded and extra-rounded (qr-code-styling on npm). Its corner options include square, extra-rounded and dot.

Generator name What it looks like My read
Dots Separate circles Safe if dots are 60%+ of the cell
Rounded Squares with soft corners, often joined Safe (94% of square ink)
Extra-rounded Joined blobs, very soft Usually safe for data
Classy Squares with one or two cut corners Not tested; inspect the preview
Corner “dot” Circular eye Risky: 0 of 40 on OpenCV in my test
Corner “extra-rounded” Heavily rounded eye Risky: 16 to 20 of 40 on OpenCV

I prefer “dots” for data and plain or slightly rounded squares for the eyes. That gets you about 90% of the design effect with almost none of the risk.

Honest limitation: I matched names to shapes from the library’s docs, not by testing every generator’s output.

How to Make a Dot QR Code That Scans

Pick the dots, keep the corners boring, and test on real phones. Here are the steps I follow:
  1. Shorten the link first. A short link means a lower version with fewer, bigger modules, so each dot is bigger at the same print size.
  2. Choose the “dots” module style and set the dot size to 60% of the module or more, if your generator lets you.
  3. Keep the corner eyes square, or round them by no more than half a module.
  4. Use dark dots on a light background with strong contrast, and keep a 4-module quiet zone.
  5. Export as SVG for print, or PNG at 4 or more pixels per module for screens.
  6. Scan the final file on at least two phones (one iPhone, one Android) before you print a batch.
Anatomy of a dot QR code with finder, timing and alignment patterns, plus six steps to make one that scans

A dynamic QR code helps with step 1. It encodes a short redirect link, so the grid stays small even if the destination URL is long. You can also change the destination later without reprinting.

Honest limitation: two phones are a sample, not a guarantee. If the code goes on 10,000 flyers, test a printed proof, not just the file.

Can You Add a Logo and Colours to a Dot QR Code?

Yes, but each design layer uses up some of the same safety margin. Dots reduce ink. A logo removes modules. Light colours reduce contrast. Stack all three and a code that passed each test alone can fail together.

In my branded QR code test, a logo covering 15% of the code passed at level H and 20% failed. That’s with square modules. With dots, I’d stay below that, around 10% of the area, and keep the dots at 80% or bigger.

Colour works the same way. A navy dot on white keeps contrast high. A yellow dot on white is already weak as a square, and as a smaller dot it’s weaker still. When you want the brand look, put the colour in the eyes’ surround or the frame, not in pale dots.

If you want a logo, the QR code generator with logo lets you add one and preview it before downloading.

Honest limitation: I didn’t run a combined dots-plus-logo-plus-colour test for this post. The 10% figure is my cautious estimate from the separate results.

What Dot QR Codes Can’t Do

Look, a dot style is cosmetic. It won’t make a code scan better, hold more data or track anything. Vendors sometimes claim styled codes “get more scans”. I haven’t found an independent study that proves it.

Here’s what I’d watch for:

  • Generators that hide the dot size. If you can’t set it, measure the preview: the gap between two neighbouring dots should be smaller than the dots.
  • Round eyes by default. Some templates ship with circular corners. Change them.
  • Tiny prints. Dots lose more than squares below 3 pixels per module. In print, that means very small codes, so size up rather than down.
  • Decoder variety. zxing-cpp and OpenCV disagreed on corner styles. Phone apps disagree too.

Dot QR Code FAQs

What is a dot QR code?

A dot QR code is a QR code whose dark modules are drawn as circles instead of squares. The data, grid and error correction are the same as a normal code, so it scans with any phone camera. Only the look changes.

Do QR codes with dots scan?

Yes, as long as the dots are big enough and the corners stay square or nearly square. In my test, dots at 60% of the module width or larger scanned 38 to 40 times out of 40 on both decoders. Circular or dotted corner eyes caused complete failures on one decoder or the other.

How small can QR code dots be?

Keep them at 60% of the module width or larger. One decoder read dots as small as 30%, but the other dropped to 10 of 40 at that size, and small dots also fail first under blur and at small export sizes.

What are the dots in a QR code called?

They’re called modules. Each module is one cell of the QR grid, either dark or light. A Version 1 code has 21 x 21 modules and a Version 40 code has 177 x 177.

Are round QR code eyes safe?

Not fully round ones. In my test, circular corner eyes read 0 of 40 on OpenCV, and eyes made of separate dots read 0 of 40 on zxing-cpp. A slight rounding of about half a module passed on both.

Is a dot QR code better than a square one?

It looks different, not better. Mid-size dots held up to blur as well as squares or slightly better on one decoder, but small dots and tiny exports did worse. Pick dots for the look, then keep the size and corners safe.

Can I put a logo on a dot QR code?

Yes, with more caution than on a square code. Use error correction level H, keep the logo near 10% of the code area, keep dots at 80% or larger, and test the final file on two phones.

Next Step: Style It, Then Scan It

Make your dot QR code with the dots at 60% or bigger and plain corners. Then scan the exact file you’ll print on two phones. If it reads instantly on both, you’re done. If one hesitates, square the corners first, then enlarge the dots.

When you’re ready, create a trackable QR code with linkutm. You get a short link inside, so the dots come out bigger, plus scan data once it’s live.

Bhargav Dhameliya

About Bhargav Dhameliya

Share this article

Ready to track your campaigns better?

Join thousands of marketers who use linkutm to build, track, and manage their marketing campaigns with ease.

Get Started for Free