Public Test Corpus

Our scanner-compatibility claims are only as good as the evidence they're built on. This page is the corpus, the canonical inputs we regression-test every encoder against, plus the phone-camera behaviour you can audit yourself without taking our word for any of it.

Why this exists: most QR tools publish a compatibility matrix. Ours publishes the corpus behind the matrix. If you're responsible for a scanner fleet, retail, warehouse, pharma, airline, DMV, you can run this corpus through your own readers and verify every claim we make.

Download corpus.zip Bundled fixtures JSON + CSV + methodology + README. ~4 KB.

Loading version…

How to use the corpus

Download the fixtures.

Every test vector lives in /test-vectors/fixtures.json. One JSON object per type with the input fields and the expected decoded substring(s). Fetched live from this site, no stale copies.

Regenerate the QRs.

Take any fixture's fields map, drop the values into the generator for that type, and hit Generate. The resulting QR is bit-for-bit identical to what our CI round-trips against.

Scan with your own fleet.

Point an iPhone Camera, Android Camera, Google Lens, industrial scanner (Zebra, Honeywell, Datalogic), or app-specific reader (a banking app, an authenticator) at the generated QR. Confirm the decoded text contains every expect substring for that fixture.

Report discrepancies.

If a scanner in your fleet returns a decode that doesn't match the fixture, file an issue. We'll reproduce, add your scanner to the public compatibility matrix, and (if it's an encoder bug) ship a fix.

Expected scan results, curated subset

This is a compact view of the full fixture JSON, grouped by scanner behaviour. For the exhaustive list across every type Abundera supports, go to /test-vectors/.

TypeFixture inputiOS CameraAndroid CameraPro scanner
URLhttps://example.com/testDecodesDecodesDecodes
WiFiSSID=MyNet PSK=... WPAJoins networkJoins networkDecodes payload
WiFi Enterprise (EAP)WPA2-EAP PEAP identity=alice@corpiOS 17+DecodesDecodes
vCardFN=Alice ORG=Acme ...Add to ContactsAdd to ContactsDecodes payload
TOTPotpauth://totp/...?secret=JBSW...Authenticator app reads itAuthenticator app reads itDecodes URI
eSIMLPA:1$rsp.example.com$K2-LM...iOS 17.4+ provisionsAndroid 13+ provisionsDecodes URI
Bitcoin (BIP-21)bitcoin:1A1zP1eP...Wallet app opensWallet app opensDecodes URI
SEPA (EPC)BCD header + name + IBAN + amountRaw string onlyRaw string onlyBanking-app support
Swiss QR-billSPC header + IBAN + address + amountRaw string onlyRaw string onlySwiss banking apps native
GS1 Digital Linkhttps://id.gs1.org/01/09506000134352Opens URLOpens URLPOS firmware parses AIs
Data MatrixArbitrary payloadNo decodeGoogle Lens onlyNative
AztecArbitrary payloadNo decodeSome Android readersNative
PDF417AAMVA or arbitraryNo decodeGoogle Lens partialNative
AAMVA driver license@\n\x1e\rANSI 636014080002DL...iOS 17+ license-awareAndroid license-aware appsNative
EAN-130012345678905Decodes digitsDecodes digitsEvery retail POS
Code 128ABC-123DecodesDecodesNative
Micro QRCompact payloadNo decodeNo decodeIndustrial readers only
rMQRRectangular payloadNo decodeNo decodeSome Scandit/Cognex firmware

What "expected scan result" means

Methodology notes

What's coming

See also

Corpus last regression-tested 2026-04-18. Scanner devices verified: iPhone 15 Pro / iOS 18.3, Pixel 8 / Android 14, Zebra DS8100.