# Printer Protocols

A virtual printer is created for one protocol, because the byte stream is only meaningful once you know
which language it is written in. Pick it when you create the printer; you cannot feed EPL to an ESC/POS
printer and expect a label.

## ESC/POS

The receipt language. Originally Epson's, now the de facto standard for thermal receipt printers from
dozens of vendors. It is a stream of escape sequences interleaved with the text to print: set bold,
print a line, feed, print a barcode, cut.

This is what a POS application emits when it prints a customer receipt, and it is the protocol most
users of this service are testing. Supported here including text styling, code pages, barcodes and QR
codes, raster images, NV logos, cash-drawer pulses, paper cuts, and real-time status replies.

## EPL

Eltron Programming Language, used by label printers. Unlike ESC/POS it is line-oriented and
page-at-a-time: you describe the fields of a label, then print N copies. Supported here for label
layout, text, and barcodes.

## TSPL

TSC's label language, similar in spirit to EPL. In development — not yet available when creating a
printer.

## ZPL

Zebra's label language, the other half of the label world alongside EPL. In development — not yet
available when creating a printer.

## Which one am I sending?

If you do not know what your application emits, print it here anyway and look at the parsed result: a
document full of unrecognized commands usually means the printer's protocol does not match the stream.
