^FS closes an open field definition. In ZPL, every field (text, barcode, graphic) is opened by a field-start command like ^FO and must be explicitly closed with ^FS. Without ^FS, the field remains open and subsequent commands may be absorbed into it, corrupting your label.
Think of ^FO as the opening tag and ^FS as the closing tag. The data between them (provided by ^FD for text fields, or by barcode commands) is what the field contains.
^FS also flushes the field to the label buffer. Some printers will not render a field until they receive ^FS, even if all the data was already sent. This is important in streaming scenarios.
A common pattern for a text field looks like: `^FO50,50^A0N,36,36^FDHello^FS`. For barcodes: `^FO50,100^BY2,3,80^BCN,80,Y,N,N^FD123456^FS`. The ^FS always goes at the end of the field definition, after the field data.
You do not use ^FS to end the entire label — that is ^XZ's job. ^FS only terminates individual fields.
Syntax
^FS
Examples
Text field with proper field separator
Try in Viewer^XA ^FO50,50^A0N,36,36^FDProduct Name^FS ^FO50,100^A0N,28,28^FDSKU: 00123456^FS ^XZ
Barcode field terminated with ^FS
Try in Viewer^XA ^FO50,50^BY2,3,80^BCN,80,Y,N,N^FD987654321012^FS ^FO50,150^A0N,24,24^FDTracking Number^FS ^XZ
Common Mistakes
- !Omitting ^FS after a field — the next field's ^FO may be treated as part of the open field's data.
- !Confusing ^FS (field separator) with ^XZ (end format) — they serve different scopes.
- !Using ^FS to terminate the entire label instead of ^XZ — the label won't print.