Skip to content

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:

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.