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.
Download corpus.zip Bundled fixtures JSON + CSV + methodology + README. ~4 KB.
Loading version…
How to use the corpus
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.
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.
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.
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/.
| Type | Fixture input | iOS Camera | Android Camera | Pro scanner |
|---|---|---|---|---|
| URL | https://example.com/test | Decodes | Decodes | Decodes |
| WiFi | SSID=MyNet PSK=... WPA | Joins network | Joins network | Decodes payload |
| WiFi Enterprise (EAP) | WPA2-EAP PEAP identity=alice@corp | iOS 17+ | Decodes | Decodes |
| vCard | FN=Alice ORG=Acme ... | Add to Contacts | Add to Contacts | Decodes payload |
| TOTP | otpauth://totp/...?secret=JBSW... | Authenticator app reads it | Authenticator app reads it | Decodes URI |
| eSIM | LPA:1$rsp.example.com$K2-LM... | iOS 17.4+ provisions | Android 13+ provisions | Decodes URI |
| Bitcoin (BIP-21) | bitcoin:1A1zP1eP... | Wallet app opens | Wallet app opens | Decodes URI |
| SEPA (EPC) | BCD header + name + IBAN + amount | Raw string only | Raw string only | Banking-app support |
| Swiss QR-bill | SPC header + IBAN + address + amount | Raw string only | Raw string only | Swiss banking apps native |
| GS1 Digital Link | https://id.gs1.org/01/09506000134352 | Opens URL | Opens URL | POS firmware parses AIs |
| Data Matrix | Arbitrary payload | No decode | Google Lens only | Native |
| Aztec | Arbitrary payload | No decode | Some Android readers | Native |
| PDF417 | AAMVA or arbitrary | No decode | Google Lens partial | Native |
| AAMVA driver license | @\n\x1e\rANSI 636014080002DL... | iOS 17+ license-aware | Android license-aware apps | Native |
| EAN-13 | 0012345678905 | Decodes digits | Decodes digits | Every retail POS |
| Code 128 | ABC-123 | Decodes | Decodes | Native |
| Micro QR | Compact payload | No decode | No decode | Industrial readers only |
| rMQR | Rectangular payload | No decode | No decode | Some Scandit/Cognex firmware |
What "expected scan result" means
- Decodes, native phone-camera reader returns the payload without needing a separate app.
- Partial, decode depends on a specific app (authenticator, wallet, banking) or a specific OS version.
- No decode, native camera returns nothing. Requires a specialist scanner or reader.
Methodology notes
- Every fixture round-trips. Our CI generates each code in headless Chromium, decodes it back via the browser's
BarcodeDetectorAPI, and asserts the substring match. A green CI means the corpus is internally consistent. - Scanner results in this table are from manual testing on real devices. Not synthesized. iPhone 15 Pro on iOS 18.3, Pixel 8 on Android 14, Zebra DS8100 imager on firmware CAAACS00-002-R06.
- We publish negative results. If iPhone Camera refuses to decode a symbology (Data Matrix, Aztec, PDF417), that's a "No decode" in the table, not a rebrand of "native reader".
- The corpus is versioned. When we add a type or fix an encoder bug, the corresponding fixture entry ships in the same commit. Check the fixture history for the audit trail.
What's coming
- Pre-rendered artifacts. The current ZIP bundles fixtures + methodology + CSV. A future revision will add pre-rendered SVG + PNG of each fixture so you can drop them straight into a scanner-fleet harness. Pending build-time headless-browser step.
- Scanner-fleet attestation. Dated log at docs/SCANNER_ATTESTATION.md, grows each time we verify against a new device.
- Third-party verification. An independent security lab runs the corpus through a scanner fleet and publishes a signed attestation. Pending, commissioned; report will publish here on arrival.
See also
- /test-vectors/, full fixture JSON and searchable table.
- /compatibility/, live scanner compatibility matrix.
- /standards/, per-standard reference pages.
- /print-size/, physical-print guidance that sits alongside the corpus.