How to read a line of ZPL
A label starts at ^XA and ends at ^XZ. In between, every instruction begins with a caret and two letters, followed by comma-separated arguments in a fixed order — there are no argument names, so position is everything and an empty slot between two commas means “keep the default”.
Take ^FO50,120^A0N,40,40^FDACME Ltd^FS. That is: put the next field 50 dots across and 120 down; use font 0, not rotated, 40 dots tall and 40 wide; the content is “ACME Ltd”; end of field. Four commands, one line of a label.
Two details cause most of the confusion. Everything is measured in printer dots rather than millimetres, so the same file is a different physical size at 203 and 300 dpi — which is why the density selector matters. And ^FS is not optional decoration: leave it out and the next command is read as more of the previous field's data, which is why a broken label so often renders as one long run of text.
Why every command here carries an example
Because a reference for a renderer should be checkable against that renderer. Each example below is run through this site's own engine by a test, and the result is compared with the support column — so a command described as rendered that the engine silently drops fails our build instead of wasting your afternoon.
That is also why commands we do not implement are listed rather than omitted. A support matrix showing only the wins tells you nothing about the label in front of you; knowing that ^BZ will warn and skip is the useful half.