Open source · MIT · no dependencies
Scannable codes that look designed.
Glint is five visual codes that share one 48-bit payload, one generator and one camera reader. It runs in the browser, in Swift and in Kotlin.
Generator
Make a code and check that it reads.
Every change is rendered to pixels and read back by the real reader, in your browser. Nothing is sent anywhere.
Reader
Point a camera at any code on this page.
Open glint.codes on your phone and scan this screen, or a printout. Frames are processed on your device and never leave it.
Last read
Nothing yet
Styles
Five looks, one codeword.
Each code below carries the same number. Pick the look first, then check its row in the test table.
Tests
What this measures
What it doesn't
- These are not photos from phones. Frames come from a browser renderer with added damage, so real cameras, glare and print quality are not covered here.
- Zero wrong reads here doesn't mean they can't happen. When a code is badly damaged, the reader can rely on as little as 16 check bits, so have your server reject IDs it doesn't know.
- Percentages are for one frame. A live camera gets many frames per second, so a person usually sees better results, but we haven't measured by how much.
- The table covers the TypeScript reader. The Swift and Kotlin readers are compared with it on the same frames in the docs.
Before you print a thousand
When to use a QR code instead.
- Phone cameras don't know Glint. People need your app, your website or an App Clip. If they will scan with the stock camera, use a QR code or put a small one beside the Glint.
- It holds 6 bytes. That is an ID for your server to look up, not a URL. QR codes can hold the whole link.
- It isn't a standard. Version 1 is one project's format. The spec and the test data are public, but no other scanners read it yet.