What Ultracode is
Ultracode is a 2D matrix symbology structurally unlike every other 2D symbology in this catalog: bwip-js's own renderer draws real cyan/magenta/yellow/black pixel colors from a fixed internal palette (confirmed directly: bwipp_ultracode's own render arguments include a "colormap"), rather than only black-and-white modules, letting a color printer pack more data into the same module count than a monochrome symbol could. There is no user-configurable color option -- the palette and which color each module uses are chosen automatically by the encoder. Ultracode has its own large internal tile/metrics/coefficient tables and draws itself entirely, with no delegation to another symbology's own function.
Generate it now
Enter any text or data to see a live preview.
Valid input
Up to 2500 characters is accepted (bwipp.ultracodeInputTooLong rejects longer input). The overall symbol size (rows/columns) is chosen automatically to fit the payload plus the chosen error-correction level -- bwipp.ultracodeNoValidSymbol rejects a payload too large for the largest defined symbol size.
Key options
Supported options include eclevel (error correction level) and rev (symbol revision). Real, literal defaults: eclevel "EC2", rev 2 (the current specification; 1 selects the legacy revision 1 format). Only EC1 through EC5 are valid at the default revision 2; the additional "EC0" legacy level is only valid under rev 1.
Output and printing
Export SVG for vector-precise label artwork or PNG for a quick proof. Because the symbol's own real colors matter to a decoder, printing or export paths that alter color (grayscale conversion, for example) risk breaking scannability in a way a monochrome symbology would not.
Common uses
Ultracode has seen limited real-world adoption compared to QR Code or Data Matrix, but remains notable as one of the few standardized symbologies designed from the outset to use multi-color printing for extra data density -- a fit for specialized workflows where a color printer is already part of the label-production pipeline and maximizing data density per unit area matters more than universal handheld-scanner support.
Example
See the live preview above, seeded with a bwip-js-verified valid value.
Size guidance
Overall symbol dimensions grow with both the payload length and the chosen error correction level -- a higher eclevel needs more redundancy codewords and can push the encoder to select a larger row/column count for the same data.
Troubleshooting
A rejected error correction level usually means "EC0" was requested without also setting rev to 1 -- EC0 is only valid under the legacy revision 1 format. A rejected revision value means something other than 1 or 2 was supplied.
Related formats
Related formats: the separately-covered Data Matrix and QR Code generators (monochrome 2D symbologies with far wider real-world scanner support).
FAQ
Do I need a color printer to use Ultracode?
For a symbol to scan reliably, yes -- Ultracode's own error-correction and data-density design assumes the printed colors are distinguishable from each other, not merely black and white.
Can I choose which colors Ultracode uses?
No -- the color palette and which color each module uses are fixed and chosen automatically by the encoder; there is no user-configurable color option.