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.