Format catalogue¶
This page is the map of what Sythos Barcode Universal can actually do at the current checkout. The important word is actually: a format name is not a promise that every variant, transport mode or camera condition is supported. The runtime registry and the format-specific notes below keep those boundaries visible.
Read and write are different capabilities¶
listFormats() is the release-facing capability registry. It reports one
entry per format with an identifier, a human label, a kind, and independent
canWrite and canRead flags:
import { listFormats } from '@sythos/js_barcode_universal';
const formats = listFormats();
for (const format of formats) {
console.log(
`${format.id}: ${format.kind}, ` +
`write=${format.canWrite}, read=${format.canRead}`,
);
}
At this checkout the registry returns 61 entries: all 61 are writable and
60 are readable. Pharmacode is intentionally the only canRead: false entry.
EAN-2 and EAN-5 report canRead: true, but each also carries
role: 'supplement'; their image path is valid only when a validated EAN/UPC
parent is present. Do not turn those flags into a claim that a supplement is a
standalone generic symbol.
This 61-entry figure is specifically listFormats()'s own count and stays
fixed at 61 regardless of what else this SDK ships. Two colour-coded formats
(KarTrak ACI, JAB Code) and six payload-convention variants of an
already-registered format (vCard, SPARQCode, Swiss QR-bill and SEPA/EPC QR on
qr; VIN on code39; AAMVA DL/ID data on pdf417) exist outside this
registry for two different reasons — colour output isn't BitMatrix, and a
payload convention isn't a symbology with an id of its own — bringing the
total count of formats and variants this SDK writes and reads to 69 writable,
68 readable. See the full row-by-row table, including which subpath each of
those eight lives at, in the
README.
The registry is generated by the public root implementation in
src/index.js, with the TypeScript source and declarations
in src/ts/index.ts and
src/index.d.ts. If this page ever disagrees with the
runtime registry, the runtime behavior wins and the documentation should be
corrected in the same change.
The current families¶
Beyond kind (the API's literal '1D' | '2D' value), the family table below
also notes each family's Structure — a descriptive-only grouping, not
part of the API surface: Linear (a single row), Stacked (multiple
linear-derived rows, including PDF417-style and stacked GS1 DataBar
variants), or Matrix (a true two-dimensional grid). Structure exists
because kind alone hides real differences: Codablock-F and Code 16K are
2D by kind but row-stacked, not gridded; GS1 DataBar Stacked and Stacked
Omnidirectional are 1D by kind but physically stacked.
| Family | Runtime IDs | Structure | Write | Read | Main boundary |
|---|---|---|---|---|---|
| Linear 1D | ean13, ean8, upca, upce, isbn, jan, code128, gs1128, code39, code93, itf, itf14, itf6, standard2of5, industrial2of5, iata2of5, datalogic2of5, matrix2of5, fim, codabar, code11, msi, plessey, code32, pzn, telepen, pharmacode |
Linear | 27 | 26 | Pharmacode is writer-only; Code 25 aliases, PZN variants, Data Logic's and Matrix 2 of 5's rejected 2:1 ratio, FIM's fixed five-pattern enum, ITF-6's dual itf/itf6 report, JAN's shared ean13 report, Plessey's mandatory CRC and Telepen Numeric are explicit modes/limits. VIN (Vehicle Identification Number) is a payload convention on code39, not a separate format — see docs/formats/oned.md. |
| Postal 4-state | postnet, planet, rm4scc, kix, auspost, japanpost, imb |
Linear | 7 | 7 | Operator-specific height-coded alphabets with strict framing; IMb is also known as OneCode. |
| PostBar (Canada Post) | postbarc10, postbard22, postbarg12 |
Linear | 3 | 3 | Height-coded like the postal family, but Reed-Solomon-protected (over GF(64)); implemented from a patent disclosure since Canada Post's own spec is unpublished. |
| DX Film Edge Barcode | dxfilmedge |
Linear | 1 | 1 | Kodak's two-track (clock + data) latent-image code on 35mm film; implemented from a patent disclosure cross-checked against real-film-sample literature. |
| EAN/UPC supplements | ean2, ean5 |
Linear | 2 | 2* | * means parent-bound, not standalone reading. |
| QR family | qr, microqr, rmqr |
Matrix | 3 | 3 | These are related families with different geometry and feature sets. vCard, SPARQCode, Swiss QR-bill and SEPA/EPC QR Code are payload conventions inside an ordinary qr symbol, not separate formats — see docs/formats/qr-family.md. |
| Data Matrix | datamatrix |
Matrix | 1 | 1 | Classic ECC 200 square and rectangular symbols; DMRE is outside scope. |
| Aztec family | aztec, aztecrune |
Matrix | 2 | 2 | Aztec Code and Aztec Rune are separate grammars. |
| PDF417 family | pdf417, compactpdf417, micropdf417 |
Stacked | 3 | 3 | Full, truncated and Micro geometry are not aliases. AAMVA DL/ID data is a payload convention on pdf417, not a separate format — see docs/formats/pdf417-family.md. |
| Project profile | frameqr |
Matrix | 1 | 1 | Sythos Canvas QR is not DENSO FrameQR compatibility. |
| GS1 DataBar | gs1databar14, gs1databar-limited, gs1databar-stacked, gs1databar-stacked-omnidirectional, gs1databar-expanded |
Linear / Stacked | 5 | 5 | Omnidirectional/Truncated, Limited and linear Expanded are Linear; Stacked and Stacked Omnidirectional are Stacked. |
| MaxiCode | maxicode |
Matrix | 1 | 1 | Fixed 30×33 geometry, Modes 2–5 and ISO-8859-1 Code Sets A–E. |
| Codablock-F | codablockf |
Stacked | 1 | 1 | Stacked Code 128 rows with strict row and overall checks; clean integer-scale detector. |
| Code 16K | code16k |
Stacked | 1 | 1 | Compact stacked Code 128 A/B/C rows with dual modulo-107 checks; clean integer-scale detector. |
| DotCode | dotcode |
Matrix | 1 | 1 | Alternating dot grid, five-of-nine patterns, four masks and GF(113) correction; clean integer-scale detector. |
| Han Xin Code | hanxin |
Matrix | 1 | 1 | Compact alignment-free versions 1–3, numeric/text/byte modes, four masks and GF(256) correction; clean integer-scale detector. |
| GS1 DataBar Composite | gs1composite |
Stacked | 1 | 1 | Bounded Sythos profile linking one validated DataBar host to a strict MicroPDF417-derived CC-A or CC-B component. |
Use the family pages for payload modes, options, image-reading limits and examples:
- Linear 1D formats
- Postal 4-state formats
- QR family
- Data Matrix ECC 200
- Aztec family
- PDF417 family
- GS1, EAN and UPC
- GS1 DataBar Expanded
- MaxiCode
- Codablock-F
- Code 16K
- DotCode
- Han Xin Code
- GS1 DataBar Composite
- Sythos Canvas QR profile
- Excluded and intentionally out-of-scope formats
Outside the registry: colour formats and payload conventions¶
These eight rows are not part of the 61-entry listFormats() registry (see
above), so they are absent from the family table's Write/Read counts —
they bring the SDK's actual total to 69 writable, 68 readable. Each reaches
that outcome through its own subpath instead of encode()/decode().
| Format | Subpath | Kind | Structure | Write | Read | Note |
|---|---|---|---|---|---|---|
| KarTrak ACI (experimental) | @sythos/js_barcode_universal/kartrak |
1D | Linear | ✅ | ✅ | Colour-coded — produces PolychromeMatrix, not BitMatrix. See kartrak.md. |
| JAB Code (experimental) | @sythos/js_barcode_universal/jabcode |
2D | Matrix | ✅ | ✅ | Colour-coded, same reason as KarTrak. See jabcode.md. |
| vCard | @sythos/js_barcode_universal/payloads |
2D | Matrix | ✅ | ✅ | Payload convention on qr (RFC 6350). See qr-family.md. |
| SPARQCode | @sythos/js_barcode_universal/payloads |
2D | Matrix | ✅ | ✅ | Payload convention on qr. See qr-family.md. |
| Swiss QR-bill | @sythos/js_barcode_universal/payloads |
2D | Matrix | ✅ | ✅ | Payload convention on qr. See qr-family.md. |
| SEPA / EPC QR Code | @sythos/js_barcode_universal/payloads |
2D | Matrix | ✅ | ✅ | Payload convention on qr. See qr-family.md. |
| VIN (Vehicle Identification Number) | @sythos/js_barcode_universal/payloads |
1D | Linear | ✅ | ✅ | Payload convention on code39. See oned.md. |
| AAMVA DL/ID data | @sythos/js_barcode_universal/payloads |
2D | Stacked | ✅ | ✅ | Payload convention on pdf417. See pdf417-family.md. |
Every row above pairs an encode* function with a matching decode* that
returns the same structured fields shape, not just raw text — see each
family page for the exact function names.
The common pipeline¶
The root API keeps the three operations explicit:
import {
decode,
encode,
toImageData,
} from '@sythos/js_barcode_universal';
const matrix = encode('FORMAT-CATALOGUE', { format: 'qr', ecc: 'M' });
const image = toImageData(matrix, { scale: 8, margin: 4 });
const results = decode(image, { formats: ['qr'] });
if (results.length > 0) {
console.log(results[0].format, results[0].text);
}
encode() returns a BitMatrix, not a DOM element and not a pixel buffer.
Render it with toSVG, toPNG, toImageData or toCanvas before passing an
image to decode(). The reader accepts an RGBA object with data, width and
height, so browser canvas code, a Worker, and a Node or Bun adapter can share the
same boundary without a runtime image dependency.
An empty result is a normal, useful result: it means the requested image did not produce a validated symbol. The decoder is deliberately conservative. A partial payload, a failed checksum, an ambiguous detector result or a symbol outside the requested format set must not be promoted to application data.
Camera profile and orientation scope¶
For supported detectors, the camera profile retries the fixed in-plane
orientations 0°, 45°, 90°, 135°, 180°, 225°, 270° and 315°.
This is a finite rotation retry policy, not a claim of arbitrary perspective,
curved-media or severe-occlusion support. Quiet zones, enough module detail,
good contrast and a coherent input frame still matter.
The precise boundary is format-specific. QR, Data Matrix, Aztec, Micro QR, rMQR, Frame QR profile, Aztec Rune and the PDF417-family readers do not all share the same detector geometry or photographic tolerance. Read the family page instead of assuming that a successful clean-matrix decode guarantees a successful camera decode.
How to choose a format¶
| Requirement | Start with | Why |
|---|---|---|
| General-purpose square 2D payload | qr |
Mature Model 2 geometry with L/M/Q/H error correction and automatic version selection. |
| Small payload and very small symbol | microqr |
M1–M4 family with deliberately smaller capacity and a narrower feature scope. |
| Rectangular installation area | rmqr |
32 fixed rectangular geometries with M/H error correction. |
| Industrial square/rectangular marking | datamatrix |
ECC 200 with classic square and rectangular symbol sizes. |
| High-density 2D payload or stacked rows | pdf417 |
Text, Byte and Numeric compaction with ECC levels 0–8. |
| Small PDF417-shaped symbol | micropdf417 |
Fixed MicroPDF417 variants and constrained geometry options. |
| Truncated PDF417 geometry | compactpdf417 |
Compact/truncated layout when full PDF417 row structure is unnecessary. |
| GS1 retail or logistics payload | gs1128, a GS1 DataBar variant, or EAN/UPC |
Choose by the physical symbology and AI/application rules, not only by payload text. |
| Full ASCII or compact numeric 1D payload | telepen or telepennumeric |
Use telepen for seven-bit ASCII; request telepennumeric explicitly for digit pairs and X suffix pairs. |
| Industrial, logistics or aviation numeric 1D payload | industrial2of5, standard2of5 or iata2of5 |
The Code 25 digit grammar is shared; choose the guard profile that matches the physical symbol and require the optional check digit for camera input. |
| Pharmaceutical numeric identifier | code32 or pzn |
Code 32 validates its base-32/check-digit carrier; PZN exposes pzn7/pzn8 variant metadata. |
| Fixed carrier/logistics matrix | maxicode |
Use Modes 2–5 with the required primary data for Modes 2 and 3; the detector expects one clean prominent symbol. |
| Artwork inside a QR-like symbol | frameqr |
Use only for the Sythos Canvas QR profile; it is not native DENSO FrameQR. |
This catalogue does not grant a standard certification, patent opinion,
trademark clearance or interoperability guarantee. The repository records its
engineering and provenance boundaries in NOTICE.md, the
root LICENSE, and the individual files in
licenses/.
Verification boundary¶
The project uses table invariants, checksum and Reed–Solomon checks, local
round trips, clean/degraded image vectors and independent black-box tools where
recorded. A third-party implementation used for comparison is not a runtime
dependency and its source or tables are not shipped. The verification record
is in NOTICE.md; the remaining scope and deliberately
excluded formats are in PLAN.md.
The names in this page are descriptive format names. They do not mean that the SDK is endorsed, certified or produced by the standards body, vendor or mark owner associated with a symbology.