One thesis: a 2D symbol carrying a GS1 element string resolves to nothing in a consumer's browser, and a 2D symbol carrying a GS1 Digital Link URI resolves everywhere a URL does — and which form goes inside your symbol is a decision the GTIN owner makes, not one the Sunrise programme makes for you.
If you run a traceability programme office, two decisions are probably already minuted: the symbology (QR, GS1 DataMatrix, or both, per touchpoint) and the data pool. There is a third decision hiding under the first one, and it is routinely skipped because vendors conflate it away: what string of bytes the symbol actually carries. Two brands can print visually identical QR codes on identical cartons and have made opposite decisions here.
Two spellings of the same fact
A GS1 element string is the AI syntax carried natively in symbols: an FNC1-led stream of Application Identifiers — (01) GTIN, (17) expiry, (10) lot — concatenated by the rules in the GS1 General Specifications. It is a wire format for scanners. The parentheses exist only in human-readable renderings; in the symbol there are separator characters a POS parser is built to expect and a phone browser has never heard of.
A GS1 Digital Link URI is the same AI map spelled as an HTTP URL, per GS1 Digital Link URI Syntax 1.6.0 (ratified March 2025, freely downloadable from ref.gs1.org): the GTIN as a path key, key qualifiers like lot and serial as ordered path segments, and non-qualifier AIs like expiry as query parameters.
Same identity, same AIs, two carriers. generate emits both from one input:
barcoding generate --gtin 09506000134352 --lot ABC123 --exp 261231 --both
element-string (01)09506000134352(17)261231(10)ABC123
digital-link https://id.example.com/01/09506000134352/10/ABC123?17=261231
render qr.svg · datamatrix.svg — either payload, either symbol
barcoding resolve <either form> → identical canonical identity + AI map
The round trip is the point: resolve returns the same canonical GTIN-14, the same lot, the same expiry from both forms. Nothing about your data changes. Everything about who can read it changes.
Where each form wins
| Audience | Element string in the symbol | Digital Link URI in the symbol |
|---|---|---|
| Retail POS lane | Native. This is what lane parsers are built for. | Conformant lane software extracts the GTIN from the URI path — that extraction is exactly the Sunrise baseline. |
| Consumer phone camera | Dead end. The camera app shows raw AI text or nothing; there is no URL to open. | Opens like any link. The one form that makes the pack a consumer touchpoint. |
| Regulated serialization lines (pharma-style) | The installed convention: professional scanner populations parse AI syntax all day. | Possible, but buys nothing where no consumer ever scans. |
| Your own middleware | Fine — if every reader downstream speaks FNC1. | Fine — and survives readers that only speak URL. |
The pattern underneath the table: element strings serve closed scanner populations you control or contract with; Digital Link URIs serve the open population you don't. Where the audience is both — a retail pack that must clear the lane and reward a curious phone — the URI form is the only one that serves both at once, which is why it exists.
The corrections that keep this decision honest
Sunrise copy in the wild fails a GS1-literate reader's check with remarkable consistency, so state the programme exactly:
- Sunrise 2027 is GS1's own programme for retail POS to scan and process 2D symbols; GS1 US says explicitly that "it is not necessary to implement all the capabilities of 2D by that date." The baseline is GTIN extraction at the lane.
- A GS1 DataMatrix and a QR code are not interchangeable for consumers — native phone camera apps reliably decode QR, not DataMatrix.
- An element string is not a URI. The two need different parsers, and only one of them is a link.
- Lot and expiry on-pack are the brand's optional AIs, not a Sunrise requirement.
- The programme puts nothing on anyone's pack. What your symbol carries is your encoding decision — which is exactly why this post exists.
Every one of those sentences is checkable against GS1's published material, and your programme deck should survive that check.
What this decision does not settle
Choosing the URI form does not settle your symbology per touchpoint (the lane-vs-phone question above), does not settle which retailers ask for what by when, and does not settle the domain in the URI — a decision with its own gravity, because a code printed on physical goods routes a decade of scans through whatever resolver the mint chose. It also does not touch the artwork cycle, though it lands there: for a co-manufactured mid-market brand the same choice arrives on the brand and insights desk as a design file with an unexpected data consequence — the executive-register version of this argument lives with visibility.cloud.
And it does not settle what happens after the scan. A serialized 2D payload — either encoding — carries enough structure to become a supply-chain event the moment somebody writes it down, and that hand-off (which AI populates which EPCIS field, and who performed the scan) is the next post in the arc.
Run it before you minute it
The programme office habit worth keeping: never minute an encoding decision you haven't rendered. barcoding generate is pure and local — no account, no network, no agreement, because the Digital Link syntax and the AI registry are royalty-free standards under the GS1 IP Policy. Generate your own GTIN both ways, put both on a screen, scan them with a lane gun and a phone, and the decision matrix above stops being a table in a blog post and becomes a thing your own devices demonstrated. Then resolve both renders and confirm the identity underneath never moved.
Keys open the network half of the verb set. Get an API key — say what arrives at your door, and the provisioning order follows the list.
We answer in writing. We take at most five conversations a month, only when you ask for one, and only after you already have the written read.