The URI form.
The URI grammar from the path down, canonical and compressed forms, and the conformant resolver semantics behind it.
The web-address form, blown out.
the same identity, two label forms — one keystroke apart:
element string (01)09506000134352(10)LOT42(21)987
digital link https://barcoding.dev/01/09506000134352/10/LOT42/21/987
resolve(generate(x)) === x — the round-trip law, asserted over the golden corpus
GTIN 0950600013435 · check 2
sum 0×3 + 9×1 + 5×3 + 0×1 + 6×3 + 0×1 + 0×3 + 0×1 + 1×3 + 3×1 + 4×3 + 3×1 + 5×3 = 78
check (10 − 78 mod 10) mod 10 = 2 → mod10 passThe row.
| scheme | gs1.digital-link |
|---|---|
| grammar | An https URI whose path carries AI key/value pairs — /01/<gtin>/21/<serial> — with qualifier order fixed by the Digital Link grammar; canonical (uncompressed) and compressed forms are both defined, both directions. |
| check digit | The carried AIs bring their rails (AI 01 mod-10); the URI grammar itself is structural. |
| canonical form | The canonical uncompressed URI, byte-round-trippable with the element-string form of the same AI map. |
| symbologies | QR and GS1 DataMatrix are the Sunrise 2027 carriers; the URI is also a plain link |
| enrichment | — (a form of GS1 keys; enrichment attaches to the resolved key) |
| join rule | Resolution: GS1-Conformant Resolver 1.2.0 — description file at /.well-known/gs1resolver, RFC 9264 linksets, gs1:defaultLink; 400 for an invalid URI, 404 for an absent linkType. |
| pinned digest | gs1.digital-link sha256:d1bebebada37a8d48554954335427b3437d25079ef7e81bf81cb4055659e9b03 |
| as data | /schemes/dl.json |
In practice.
The delegating door lives on the engine origin (api.barcoding.dev) — resolution itself is id.org.ai's, served through it — serves every link inside a provenance object — source, dataset version, license class, fetched-at — and resolves brand-published redirects through, never over: pass-through is a license class, not a cache.
On the blog.
-
GS1 Digital Link, explained from the URI down
A Digital Link URI is the same AI map as an element string, spelled as an HTTP path — /01/{gtin}/10/{lot}/21/{serial} — which is what makes a barcode web-resolvable without making the web its master. The grammar, the round trip, and what resolution adds.
-
Sunrise 2027, stated exactly: what GS1's program requires, and the six things it doesn't
GS1's own program expects retail POS to scan and process 2D barcodes by end of December 2027, baseline GTIN extraction. Almost everything else said about it in vendor copy fails a GS1-literate reader's check. The six standing corrections, each paired with its primary source.
-
QR or GS1 DataMatrix? One question decides it: who scans
GS1 DataMatrix clears the POS lane; QR is what a consumer's phone camera reliably decodes. Symbology choice is an audience choice, it belongs to the GTIN owner, and the same GTIN and AIs render as either symbol — two squares, one identity, proven by round-trip.
-
Linksets: the resolver answer is a list of doors, and every door carries its provenance
RFC 9264 linksets turn "where does this barcode go" into typed navigation. A linkset whose every link carries source, license class, and freshness is a combination no resolver in the field ships — and it is the difference between a list of URLs and an answer an agent can act on.
-
Resolved through brand doors, never over them
Where a brand publishes its own Digital Link redirect, a neutral resolver's duty is to carry that link in the linkset and resolve through it — because allocation is homed with the issuer, and a resolver that replaces the brand's door is just another walled network with better manners.
Get an API key.
The local verbs run from npx barcoding.dev today with no key. A key opens the network half of the verb set.