{
  "schemaVersion": 1,
  "language": "sbpl",
  "name": "SBPL",
  "fullName": "SATO Barcode Printer Language",
  "canonicalUrl": "https://rfid.me/reference/sbpl/",
  "reuseNotice": "No reuse license is granted by this export. Consult the upstream package or repository terms before reusing the data.",
  "commandCount": 51,
  "commands": [
    {
      "command": "ESC+A",
      "name": "Start of Label",
      "description": "This is the opening command for every SBPL label — like pressing \"New Document\". It tells the printer \"I'm about to describe a label\". Every SBPL job must begin with ESC+A.",
      "category": "control",
      "syntax": "ESC+A",
      "parameters": [],
      "whenToUse": "Always. It's the very first command in every label.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+X22Hello World\nESC+Q1\nESC+Z",
        "description": "The simplest possible SBPL label"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/a/"
    },
    {
      "command": "ESC+Z",
      "name": "End of Label",
      "description": "This closes the label and triggers printing. Think of it as pressing \"Print\". Every label that starts with ESC+A must end with ESC+Z.",
      "category": "control",
      "syntax": "ESC+Z",
      "parameters": [],
      "whenToUse": "Always. It's the very last command in every label.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+X22Done!\nESC+Q1\nESC+Z",
        "description": "ESC+Z at the end triggers the print"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/z/"
    },
    {
      "command": "ESC+Q",
      "name": "Print Quantity",
      "description": "Sets how many copies of the label to print. The number can be 1 to 999999. If you don't specify this, the printer defaults to 1 copy.",
      "category": "control",
      "syntax": "ESC+Qnnnnnn",
      "parameters": [
        {
          "name": "nnnnnn",
          "description": "Number of copies to print (1-999999)"
        }
      ],
      "whenToUse": "When you need multiple copies of the same label. Place it just before ESC+Z.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+X22Print me 5 times\nESC+Q5\nESC+Z",
        "description": "Print 5 copies of the label"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/q/"
    },
    {
      "command": "ESC+ID",
      "name": "Job ID",
      "description": "Assigns a numeric ID to the print job. This is used for job management — you can reference the ID to cancel or track a specific job in the printer's queue.",
      "category": "control",
      "syntax": "ESC+IDnn",
      "parameters": [
        {
          "name": "nn",
          "description": "Job ID number (2 digits)"
        }
      ],
      "whenToUse": "When managing multiple print jobs and you need to identify or cancel specific ones.",
      "example": {
        "source": "ESC+A\nESC+ID01\nESC+H0100\nESC+V0050\nESC+X22Job One\nESC+Q1\nESC+Z",
        "description": "Assign job ID 01 to this label"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/id/"
    },
    {
      "command": "ESC+WK",
      "name": "Job Name",
      "description": "Assigns a human-readable name to the print job. This appears in the printer's status display and job listings, making it easier to identify what's printing.",
      "category": "control",
      "syntax": "ESC+WKname",
      "parameters": [
        {
          "name": "name",
          "description": "Job name string (up to 15 characters)"
        }
      ],
      "whenToUse": "When you want descriptive names for jobs in the printer queue, especially in production environments with many label formats.",
      "example": {
        "source": "ESC+A\nESC+WKShipping Label\nESC+H0100\nESC+V0050\nESC+X22Shipping\nESC+Q1\nESC+Z",
        "description": "Name the job \"Shipping Label\" for easy identification"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/wk/"
    },
    {
      "command": "ESC+H",
      "name": "Horizontal Position",
      "description": "Sets where the next item will be placed horizontally (left-to-right) on the label. The value is in dots from the left edge. At 203 DPI, there are about 8 dots per millimetre.",
      "category": "position",
      "syntax": "ESC+Hnnnn",
      "parameters": [
        {
          "name": "nnnn",
          "description": "Horizontal position in dots from the left edge (0-9999)"
        }
      ],
      "whenToUse": "Before every field you place on the label. Pair it with ESC+V to set both horizontal and vertical position.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X22Left side\nESC+H0400\nESC+V0050\nESC+X22Right side\nESC+Q1\nESC+Z",
        "description": "Two text fields at different horizontal positions"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/h/"
    },
    {
      "command": "ESC+V",
      "name": "Vertical Position",
      "description": "Sets where the next item will be placed vertically (top-to-bottom) on the label. The value is in dots from the top edge. At 203 DPI, about 8 dots per millimetre.",
      "category": "position",
      "syntax": "ESC+Vnnnnn",
      "parameters": [
        {
          "name": "nnnnn",
          "description": "Vertical position in dots from the top edge (0-99999)"
        }
      ],
      "whenToUse": "Before every field you place on the label. Pair it with ESC+H to set both horizontal and vertical position.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0030\nESC+X22Top line\nESC+H0100\nESC+V0080\nESC+X22Bottom line\nESC+Q1\nESC+Z",
        "description": "Two text fields at different vertical positions"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/v/"
    },
    {
      "command": "ESC+#",
      "name": "Base Reference Point",
      "description": "Sets a base offset that shifts everything on the label. All subsequent ESC+H and ESC+V positions are relative to this reference point. It's like setting page margins — instead of adjusting every position, you offset the entire design.",
      "category": "position",
      "syntax": "ESC+#hhhhvvvvv",
      "parameters": [
        {
          "name": "hhhh",
          "description": "Horizontal offset in dots (4 digits)"
        },
        {
          "name": "vvvvv",
          "description": "Vertical offset in dots (5 digits)"
        }
      ],
      "whenToUse": "When you need to shift the entire label layout, for example to account for pre-printed label stock or to reposition a design without changing every coordinate.",
      "example": {
        "source": "ESC+A\nESC+#010000100\nESC+H0000\nESC+V0000\nESC+X22This prints at 100,100\nESC+Q1\nESC+Z",
        "description": "Shift entire label 100 dots right and 100 dots down"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/hash/"
    },
    {
      "command": "ESC+P",
      "name": "Pitch Size",
      "description": "Sets the character spacing (pitch) for bitmap fonts. Higher values add more space between characters. This controls the dot gap between each character in the current font.",
      "category": "text",
      "syntax": "ESC+Pnn",
      "parameters": [
        {
          "name": "nn",
          "description": "Pitch value (0-99, default is 2)"
        }
      ],
      "whenToUse": "When you want to adjust character spacing — useful for making text more readable or fitting text into a specific width.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+P05\nESC+X22Wide spacing\nESC+Q1\nESC+Z",
        "description": "Text with wider character spacing"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/p/"
    },
    {
      "command": "ESC+L",
      "name": "Character Enlargement",
      "description": "Enlarges the current font by multiplying its width and height. The first two digits set horizontal enlargement, the second two set vertical enlargement. For example, L0202 doubles both width and height.",
      "category": "text",
      "syntax": "ESC+Laabb",
      "parameters": [
        {
          "name": "aa",
          "description": "Horizontal enlargement factor (01-24)"
        },
        {
          "name": "bb",
          "description": "Vertical enlargement factor (01-24)"
        }
      ],
      "whenToUse": "When you need larger text. Instead of switching fonts, you can enlarge the current one. Values of 01 mean normal size, 02 means double, etc.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+L0303\nESC+X22Big Text\nESC+L0101\nESC+H0050\nESC+V0130\nESC+X22Normal Text\nESC+Q1\nESC+Z",
        "description": "Triple-size text followed by normal-size text"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/l/"
    },
    {
      "command": "ESC+%",
      "name": "Rotation",
      "description": "Rotates the next field. 0 = no rotation, 1 = 90 degrees clockwise, 2 = 180 degrees (upside-down), 3 = 270 degrees clockwise. Applies to text, barcodes, and 2D codes.",
      "category": "text",
      "syntax": "ESC+%n",
      "parameters": [
        {
          "name": "n",
          "description": "Rotation: 0 (normal), 1 (90°), 2 (180°), 3 (270°)"
        }
      ],
      "whenToUse": "When you need text or barcodes rotated — common for side labels, vertical text, or upside-down printing.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+%0\nESC+X22Normal\nESC+H0300\nESC+V0050\nESC+%1\nESC+X22Rotated 90\nESC+Q1\nESC+Z",
        "description": "Normal text alongside 90-degree rotated text"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/pct/"
    },
    {
      "command": "ESC+PS",
      "name": "Proportional Spacing On",
      "description": "Enables proportional spacing — each character takes up only as much width as it needs (\"i\" is narrower than \"m\"). This gives a more natural, professional look to text.",
      "category": "text",
      "syntax": "ESC+PS",
      "parameters": [],
      "whenToUse": "When you want text to look naturally spaced. Pair with ESC+PR to switch back to fixed-width.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+PS\nESC+X22Proportional text\nESC+Q1\nESC+Z",
        "description": "Text with proportional spacing enabled"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/ps/"
    },
    {
      "command": "ESC+PR",
      "name": "Proportional Spacing Off",
      "description": "Disables proportional spacing and returns to fixed-width (monospaced) mode. Every character takes the same width, which is useful for aligning columns of data.",
      "category": "text",
      "syntax": "ESC+PR",
      "parameters": [],
      "whenToUse": "When you need fixed-width text — common for data tables, numeric columns, or when characters must line up vertically.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+PR\nESC+X22Fixed width\nESC+Q1\nESC+Z",
        "description": "Text with fixed-width (monospaced) spacing"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/pr/"
    },
    {
      "command": "ESC+E",
      "name": "Auto Line Feed",
      "description": "Sets the automatic line feed spacing in dots. When enabled, text commands automatically advance the vertical position by this amount after printing. Set to 0 to disable.",
      "category": "text",
      "syntax": "ESC+Ennnn",
      "parameters": [
        {
          "name": "nnnn",
          "description": "Line spacing in dots (up to 4 digits)"
        }
      ],
      "whenToUse": "When printing multiple lines of text that should be evenly spaced without manually setting V positions for each line.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+E0030\nESC+X22Line one\nESC+X22Line two\nESC+Q1\nESC+Z",
        "description": "Print two lines of text with 30-dot spacing"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/e/"
    },
    {
      "command": "ESC+X20",
      "name": "Font X20 (5x9 Bitmap)",
      "description": "Selects the tiny X20 bitmap font (5 dots wide, 9 dots tall) and prints the text that follows. This is the smallest built-in font — good for fine print and dense information.",
      "category": "text",
      "syntax": "ESC+X20text",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you need very small text, such as regulatory notices, fine print, or dense data.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X20Tiny text for fine print\nESC+Q1\nESC+Z",
        "description": "Very small text using the X20 font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/x20/"
    },
    {
      "command": "ESC+X21",
      "name": "Font X21 (17x17 Bitmap)",
      "description": "Selects the X21 bitmap font (17 dots wide, 17 dots tall) and prints the text. A small-to-medium fixed-width font, suitable for general-purpose text.",
      "category": "text",
      "syntax": "ESC+X21text",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you need a small but readable font for general text content.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X21Medium text\nESC+Q1\nESC+Z",
        "description": "Text using the X21 font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/x21/"
    },
    {
      "command": "ESC+X22",
      "name": "Font X22 (24x24 Proportional)",
      "description": "Selects the X22 proportional font (24 dots base) and prints the text. This is one of the most commonly used SBPL fonts — a good default for readable label text.",
      "category": "text",
      "syntax": "ESC+X22text",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "The workhorse font for most labels. Use it as your default for readable, proportionally-spaced text.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X22Hello World\nESC+Q1\nESC+Z",
        "description": "Standard text using the popular X22 font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/x22/"
    },
    {
      "command": "ESC+X23",
      "name": "Font X23 (48x48 Proportional)",
      "description": "Selects the large X23 proportional font (48 dots base) and prints the text. A big, bold font for headings and prominent information.",
      "category": "text",
      "syntax": "ESC+X23text",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you need large, attention-grabbing text — product names, headings, or any text that needs to be read from a distance.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X23HEADING\nESC+Q1\nESC+Z",
        "description": "Large heading text using the X23 font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/x23/"
    },
    {
      "command": "ESC+X24",
      "name": "Font X24 (48x48 Proportional)",
      "description": "Selects the X24 proportional font (48 dots base) and prints the text. Similar in size to X23, but a different typeface. Offers an alternative look for large text.",
      "category": "text",
      "syntax": "ESC+X24text",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you want a large font with a different style from X23.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X24Big Alt Font\nESC+Q1\nESC+Z",
        "description": "Large text using the X24 alternative font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/x24/"
    },
    {
      "command": "ESC+XU",
      "name": "Font XU (Helvetica)",
      "description": "Selects the Helvetica-style scalable font and prints the text. This is a clean, professional sans-serif font commonly used for product labels.",
      "category": "text",
      "syntax": "ESC+XUtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you want a clean Helvetica-like appearance. Good for professional labels.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+XUHelvetica style\nESC+Q1\nESC+Z",
        "description": "Text in a Helvetica-style font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/xu/"
    },
    {
      "command": "ESC+XS",
      "name": "Font XS (Universe Condensed Bold Small)",
      "description": "Selects the small Universe Condensed Bold font and prints the text. A condensed font that fits more characters per line.",
      "category": "text",
      "syntax": "ESC+XStext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you need to fit more text into a narrow space — condensed fonts are ideal for dense information.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+XSCondensed text fits more\nESC+Q1\nESC+Z",
        "description": "Condensed bold text using the XS font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/xs/"
    },
    {
      "command": "ESC+XM",
      "name": "Font XM (Universe Condensed Bold Medium)",
      "description": "Selects the medium Universe Condensed Bold font (24 dots base) and prints the text. This is the default font used by the SBPL engine when no font is explicitly selected.",
      "category": "text",
      "syntax": "ESC+XMtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "A solid general-purpose font. It's the engine default, so you get this automatically if you don't specify a font.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+XMDefault font text\nESC+Q1\nESC+Z",
        "description": "Text in the default XM font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/xm/"
    },
    {
      "command": "ESC+XB",
      "name": "Font XB (Universe Condensed Bold Large)",
      "description": "Selects the large Universe Condensed Bold font (48 dots base) and prints the text. A large, bold condensed font for headings that need to be dense but impactful.",
      "category": "text",
      "syntax": "ESC+XBtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "For large headings where you want a bold, condensed look — fits more text than X23/X24 at the same size.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+XBBOLD HEADING\nESC+Q1\nESC+Z",
        "description": "Large bold condensed heading"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/xb/"
    },
    {
      "command": "ESC+XL",
      "name": "Font XL (Sans Serif Large)",
      "description": "Selects the large Sans Serif font (48 dots base) and prints the text. A clean, large sans-serif typeface for prominent text.",
      "category": "text",
      "syntax": "ESC+XLtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you want large, clean sans-serif text for titles or important information.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+XLSans Serif Title\nESC+Q1\nESC+Z",
        "description": "Large sans-serif title text"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/xl/"
    },
    {
      "command": "ESC+U",
      "name": "Font U (5x9 Fixed)",
      "description": "Selects the tiny U bitmap font (5 dots wide, 9 dots tall) and prints the text. A monospaced micro font for extremely dense or technical data.",
      "category": "text",
      "syntax": "ESC+Utext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "For the smallest possible fixed-width text. Similar size to X20 but monospaced.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+UTiny fixed data\nESC+Q1\nESC+Z",
        "description": "Micro text using the U font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/u/"
    },
    {
      "command": "ESC+S",
      "name": "Font S (8x15 Fixed)",
      "description": "Selects the S bitmap font (8 dots wide, 15 dots tall) and prints the text. A small monospaced font — readable and compact.",
      "category": "text",
      "syntax": "ESC+Stext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you need small, fixed-width text that's slightly more readable than the U font.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+SSmall fixed text\nESC+Q1\nESC+Z",
        "description": "Small monospaced text using the S font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/s/"
    },
    {
      "command": "ESC+M",
      "name": "Font M (13x20 Fixed)",
      "description": "Selects the M bitmap font (13 dots wide, 20 dots tall) and prints the text. A medium monospaced font — good for data that needs to align in columns.",
      "category": "text",
      "syntax": "ESC+Mtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "For medium-sized fixed-width text, especially when vertical alignment matters.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+MMedium fixed text\nESC+Q1\nESC+Z",
        "description": "Medium monospaced text using the M font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/m/"
    },
    {
      "command": "ESC+WB",
      "name": "Font WB (18x30 Fixed)",
      "description": "Selects the WB bitmap font (18 dots wide, 30 dots tall) and prints the text. A large monospaced font — bold and easy to read.",
      "category": "text",
      "syntax": "ESC+WBtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "When you need large, fixed-width text that's prominent and easy to scan.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+WBLarge fixed text\nESC+Q1\nESC+Z",
        "description": "Large monospaced text using the WB font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/wb/"
    },
    {
      "command": "ESC+WL",
      "name": "Font WL (28x52 Fixed)",
      "description": "Selects the WL bitmap font (28 dots wide, 52 dots tall) and prints the text. The largest built-in monospaced font — for text that absolutely must be read from a distance.",
      "category": "text",
      "syntax": "ESC+WLtext",
      "parameters": [
        {
          "name": "text",
          "description": "The text string to print"
        }
      ],
      "whenToUse": "For the biggest fixed-width text available. Use sparingly — it takes a lot of label space.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+WLBIG\nESC+Q1\nESC+Z",
        "description": "Extra-large monospaced text using the WL font"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/wl/"
    },
    {
      "command": "ESC+FW",
      "name": "Ruled Line / Box",
      "description": "Draws a ruled line or box at the current position. You specify vertical border width, horizontal border width, vertical length, and horizontal length in dots. If the border widths are thin and the lengths are large, you get a rectangle outline. If one length is very small, you get a line.",
      "category": "graphics",
      "syntax": "ESC+FWaaaa,bbbb,cccc,dddd",
      "parameters": [
        {
          "name": "aaaa",
          "description": "Vertical border width in dots"
        },
        {
          "name": "bbbb",
          "description": "Horizontal border width in dots"
        },
        {
          "name": "cccc",
          "description": "Vertical length (height) in dots"
        },
        {
          "name": "dddd",
          "description": "Horizontal length (width) in dots"
        }
      ],
      "whenToUse": "For drawing borders, divider lines, boxes, and table structures on your label.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+FW0002,0002,0200,0600\nESC+Q1\nESC+Z",
        "description": "Draw a 600x200 dot rectangle with 2-dot border"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/fw/"
    },
    {
      "command": "ESC+FC",
      "name": "Circle",
      "description": "Draws a circle at the current position. You specify the radius and line width in dots. The centre of the circle is at the current H,V position.",
      "category": "graphics",
      "syntax": "ESC+FCrrrr,wwww",
      "parameters": [
        {
          "name": "rrrr",
          "description": "Radius in dots"
        },
        {
          "name": "wwww",
          "description": "Line width in dots"
        }
      ],
      "whenToUse": "When you need circular elements — certification marks, decorative elements, or attention indicators.",
      "example": {
        "source": "ESC+A\nESC+H0200\nESC+V0150\nESC+FC0080,0003\nESC+Q1\nESC+Z",
        "description": "Draw a circle with 80-dot radius and 3-dot line width"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/fc/"
    },
    {
      "command": "ESC+FT",
      "name": "Triangle",
      "description": "Draws a triangle by specifying three corner points and a line width. Each point is given as x,y coordinates in dots.",
      "category": "graphics",
      "syntax": "ESC+FTx1,y1,x2,y2,x3,y3,w",
      "parameters": [
        {
          "name": "x1,y1",
          "description": "First corner coordinates in dots"
        },
        {
          "name": "x2,y2",
          "description": "Second corner coordinates in dots"
        },
        {
          "name": "x3,y3",
          "description": "Third corner coordinates in dots"
        },
        {
          "name": "w",
          "description": "Line width in dots"
        }
      ],
      "whenToUse": "For triangular shapes — warning symbols, directional indicators, or decorative elements.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+FT0100,0050,0200,0150,0000,0150,0003\nESC+Q1\nESC+Z",
        "description": "Draw a triangle with 3-dot line width"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/ft/"
    },
    {
      "command": "ESC+BG",
      "name": "Code 128",
      "description": "Prints a Code 128 barcode — the most versatile 1D barcode that can encode all 128 ASCII characters. It automatically selects the most efficient subset (A, B, or C). This is the go-to barcode for most modern labelling applications.",
      "category": "barcode",
      "syntax": "ESC+BGabcdddddata",
      "parameters": [
        {
          "name": "a",
          "description": "Subset: 0=auto, 1=A, 2=B, 3=C"
        },
        {
          "name": "b",
          "description": "Check digit: 0=none, 1=include"
        },
        {
          "name": "c",
          "description": "Bar width ratio (1-4)"
        },
        {
          "name": "dddd",
          "description": "Barcode height in dots (4 digits)"
        },
        {
          "name": "data",
          "description": "The data to encode"
        }
      ],
      "whenToUse": "For general-purpose barcodes, shipping labels, inventory, and anywhere you need to encode mixed alphanumeric data.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+BG020100ABC-12345\nESC+Q1\nESC+Z",
        "description": "Code 128 barcode encoding \"ABC-12345\" with 100-dot height"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/bg/"
    },
    {
      "command": "ESC+B",
      "name": "Code 39 (Ratio 1:3)",
      "description": "Prints a Code 39 barcode with a 1:3 wide-to-narrow ratio. Code 39 is one of the oldest barcode standards — it encodes uppercase letters, digits, and a few special characters. The 1:3 ratio produces a more compact barcode.",
      "category": "barcode",
      "syntax": "ESC+Babcdddddata",
      "parameters": [
        {
          "name": "a",
          "description": "Barcode type selector: 1 = Code 39 (the symbology this command prints)"
        },
        {
          "name": "b",
          "description": "Reserved (use 0)"
        },
        {
          "name": "c",
          "description": "Narrow bar width in dots"
        },
        {
          "name": "dddd",
          "description": "Barcode height in dots (4 digits)"
        },
        {
          "name": "data",
          "description": "Uppercase letters, digits, and -.$/ +%"
        }
      ],
      "whenToUse": "When your application requires Code 39 — common in military (MIL-STD), automotive (AIAG), and legacy systems.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+B1020080HELLO123\nESC+Q1\nESC+Z",
        "description": "Code 39 barcode (type selector 1) encoding \"HELLO123\""
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/b/"
    },
    {
      "command": "ESC+D",
      "name": "Code 39 (Ratio 1:2)",
      "description": "Prints a Code 39 barcode with a 1:2 wide-to-narrow ratio. This produces a wider, more easily scanned barcode compared to ESC+B. The wider ratio improves readability at the cost of more label space.",
      "category": "barcode",
      "syntax": "ESC+Dabcdddddata",
      "parameters": [
        {
          "name": "a",
          "description": "Barcode type selector: 1 = Code 39 (the symbology this command prints)"
        },
        {
          "name": "b",
          "description": "Reserved (use 0)"
        },
        {
          "name": "c",
          "description": "Narrow bar width in dots"
        },
        {
          "name": "dddd",
          "description": "Barcode height in dots (4 digits)"
        },
        {
          "name": "data",
          "description": "Uppercase letters, digits, and -.$/ +%"
        }
      ],
      "whenToUse": "When you need Code 39 with better scan reliability — the wider ratio is more forgiving for worn or damaged labels.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+D1020080PART-456\nESC+Q1\nESC+Z",
        "description": "Code 39 (1:2 ratio) barcode (type selector 1) encoding \"PART-456\""
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/d/"
    },
    {
      "command": "ESC+BC",
      "name": "Code 93",
      "description": "Prints a Code 93 barcode. Code 93 is a denser version of Code 39 — it encodes the same characters but takes up about 25% less space. It includes two mandatory check characters for higher reliability.",
      "category": "barcode",
      "syntax": "ESC+BCabcdddddata",
      "parameters": [
        {
          "name": "a",
          "description": "Check digit mode"
        },
        {
          "name": "b",
          "description": "Reserved (use 0)"
        },
        {
          "name": "c",
          "description": "Narrow bar width in dots"
        },
        {
          "name": "dddd",
          "description": "Barcode height in dots (4 digits)"
        },
        {
          "name": "data",
          "description": "The data to encode"
        }
      ],
      "whenToUse": "When you need the Code 39 character set but need a more compact barcode — often used in postal and logistics applications.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+BC0020080SHIP789\nESC+Q1\nESC+Z",
        "description": "Code 93 barcode encoding \"SHIP789\""
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/bc/"
    },
    {
      "command": "ESC+BI",
      "name": "GS1-128 (EAN-128)",
      "description": "Prints a GS1-128 barcode (formerly EAN-128). This is the supply-chain standard — it uses Code 128 encoding but adds GS1 Application Identifiers (AIs) to structure the data. AIs identify what each piece of data means (lot number, expiry date, weight, etc.).",
      "category": "barcode",
      "syntax": "ESC+BIabcdddddata",
      "parameters": [
        {
          "name": "a",
          "description": "Subset: 0=auto, 1=A, 2=B, 3=C"
        },
        {
          "name": "b",
          "description": "Check digit: 0=none, 1=include"
        },
        {
          "name": "c",
          "description": "Bar width ratio"
        },
        {
          "name": "dddd",
          "description": "Barcode height in dots (4 digits)"
        },
        {
          "name": "data",
          "description": "GS1 data with Application Identifiers"
        }
      ],
      "whenToUse": "For supply chain, logistics, and retail compliance. Required by many trading partners for shipping labels, pallet labels, and product identification.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+BI01020100(01)09501101530003\nESC+Q1\nESC+Z",
        "description": "GS1-128 barcode with GTIN Application Identifier"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/bi/"
    },
    {
      "command": "ESC+2D30",
      "name": "QR Code",
      "description": "Prints a QR code — the familiar square matrix barcode you see everywhere. QR codes can hold thousands of characters and are scannable by any smartphone camera. They support error correction so they still work even if partially damaged.",
      "category": "2dcode",
      "syntax": "ESC+2D30,params,data",
      "parameters": [
        {
          "name": "model",
          "description": "QR model: 1 or 2 (use 2 for standard)"
        },
        {
          "name": "ecc",
          "description": "Error correction: L (7%), M (15%), Q (25%), H (30%)"
        },
        {
          "name": "size",
          "description": "Module size in dots"
        },
        {
          "name": "data",
          "description": "The data to encode"
        }
      ],
      "whenToUse": "When you need a barcode that smartphones can scan, or when encoding URLs, long text, or large amounts of data.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+2D30,06,03,04,01,00,0000https://example.com\nESC+Q1\nESC+Z",
        "description": "QR code encoding a URL"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/2d30/"
    },
    {
      "command": "ESC+2D50",
      "name": "DataMatrix",
      "description": "Prints a DataMatrix code — a compact 2D barcode popular in manufacturing, electronics, and healthcare. It's smaller than QR for the same data, making it ideal for marking small items like electronic components or medicine vials.",
      "category": "2dcode",
      "syntax": "ESC+2D50,params,data",
      "parameters": [
        {
          "name": "size",
          "description": "Module size in dots"
        },
        {
          "name": "cols",
          "description": "Number of columns (0=auto)"
        },
        {
          "name": "rows",
          "description": "Number of rows (0=auto)"
        },
        {
          "name": "data",
          "description": "The data to encode"
        }
      ],
      "whenToUse": "For marking small items, direct part marking, and applications where space is very limited. Common in electronics, pharmaceutical, and aerospace industries.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+2D50,04,00,00,00,SN12345-ABC\nESC+Q1\nESC+Z",
        "description": "DataMatrix code encoding a serial number"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/2d50/"
    },
    {
      "command": "ESC+2D10",
      "name": "PDF417",
      "description": "Prints a PDF417 barcode — a stacked 2D barcode that looks like a series of small 1D barcodes on top of each other. It can hold a lot of data and is used on ID cards, boarding passes, and postage stamps.",
      "category": "2dcode",
      "syntax": "ESC+2D10,params,data",
      "parameters": [
        {
          "name": "width",
          "description": "Module width in dots"
        },
        {
          "name": "height",
          "description": "Row height in dots"
        },
        {
          "name": "ecc",
          "description": "Error correction level (0-8)"
        },
        {
          "name": "data",
          "description": "The data to encode"
        }
      ],
      "whenToUse": "For applications that need to encode large amounts of data in a scannable format — ID cards, transport documents, and government applications.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+2D10,03,10,02,00,00,0000PASSENGER:JOHN SMITH FLIGHT:QF123\nESC+Q1\nESC+Z",
        "description": "PDF417 barcode encoding passenger data"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/2d10/"
    },
    {
      "command": "ESC+A1",
      "name": "Media Size",
      "description": "Sets the label dimensions. V sets the vertical size (height, or feed length) and H sets the horizontal size (width) — both in dots. At 203 DPI, a standard 4\"x2\" label is about H0812V0406.",
      "category": "config",
      "syntax": "ESC+A1VnnnnnHmmmm",
      "parameters": [
        {
          "name": "nnnnn",
          "description": "Vertical size (height) in dots, up to 5 digits"
        },
        {
          "name": "mmmm",
          "description": "Horizontal size (width) in dots, up to 4 digits"
        }
      ],
      "whenToUse": "At the start of your label when using non-standard label sizes. If your labels aren't the default 4\"x2\", you need this.",
      "example": {
        "source": "ESC+A\nESC+A1V0812H0812\nESC+H0050\nESC+V0050\nESC+X22Square label\nESC+Q1\nESC+Z",
        "description": "Set media to a 4\"x4\" (812x812 dot) square label"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/a1/"
    },
    {
      "command": "ESC+CS",
      "name": "Print Speed",
      "description": "Sets the print speed. Lower speeds give better print quality (sharper, more precise), while higher speeds increase throughput. The available speeds depend on your printer model.",
      "category": "config",
      "syntax": "ESC+CSnn",
      "parameters": [
        {
          "name": "nn",
          "description": "Speed setting (printer-dependent, typically 02-10)"
        }
      ],
      "whenToUse": "When you need to trade off between quality and speed. Use slower speeds for barcodes and graphics, faster speeds for simple text labels.",
      "example": {
        "source": "ESC+A\nESC+CS05\nESC+H0100\nESC+V0050\nESC+X22Medium speed\nESC+Q1\nESC+Z",
        "description": "Print at medium speed (5)"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/cs/"
    },
    {
      "command": "ESC+#F",
      "name": "Print Darkness",
      "description": "Sets the print darkness (head temperature). Higher values make the print darker but can cause smearing or ribbon wrinkle on thermal-transfer labels. Lower values produce lighter print but use less ribbon and extend head life.",
      "category": "config",
      "syntax": "ESC+#Fnn",
      "parameters": [
        {
          "name": "nn",
          "description": "Darkness level (printer-dependent, typically 01-20)"
        }
      ],
      "whenToUse": "When adjusting print quality — increase if barcodes aren't scanning, decrease if print is bleeding or smearing.",
      "example": {
        "source": "ESC+A\nESC+#F10\nESC+H0100\nESC+V0050\nESC+BG020100TEST-DATA\nESC+Q1\nESC+Z",
        "description": "Set medium darkness for barcode printing"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/hashf/"
    },
    {
      "command": "ESC+PO",
      "name": "Print Position Offset",
      "description": "Adjusts the horizontal print position offset. This shifts the entire printable area left or right — useful for fine-tuning alignment when the print head doesn't perfectly line up with the label stock.",
      "category": "config",
      "syntax": "ESC+POnnn",
      "parameters": [
        {
          "name": "nnn",
          "description": "Offset in dots (can be positive or negative)"
        }
      ],
      "whenToUse": "When labels are consistently printing slightly off-centre. This is a printer calibration setting rather than a design command.",
      "example": {
        "source": "ESC+A\nESC+PO010\nESC+H0100\nESC+V0050\nESC+X22Shifted 10 dots\nESC+Q1\nESC+Z",
        "description": "Shift print position 10 dots for alignment correction"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/po/"
    },
    {
      "command": "ESC+IP0",
      "name": "RFID EPC Write",
      "description": "Writes data to the EPC (Electronic Product Code) memory bank of a UHF RFID tag. The EPC is the main identifier stored on the tag — it's what gets read when an RFID reader scans the label. This is the core command for RFID-enabled labels.",
      "category": "rfid",
      "syntax": "ESC+IP0,params,data",
      "parameters": [
        {
          "name": "format",
          "description": "Data format: hex or ASCII"
        },
        {
          "name": "length",
          "description": "Data length in bytes"
        },
        {
          "name": "data",
          "description": "The EPC data to write to the tag"
        }
      ],
      "whenToUse": "Whenever you're printing RFID labels and need to encode the tag. Used in retail, logistics, inventory management, and supply chain applications.",
      "example": {
        "source": "ESC+A\nESC+H0100\nESC+V0050\nESC+X22RFID Label\nESC+IP0,1,12,300833B2DDD9014000000001\nESC+Q1\nESC+Z",
        "description": "Print a label and write a 96-bit EPC to the RFID tag"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/ip0/"
    },
    {
      "command": "ESC+IP5",
      "name": "RFID Antenna Power",
      "description": "Sets the RFID antenna power level. Higher power gives better read/write range but can cause issues with densely packed tags (reading the wrong tag). Lower power is more precise but the tag must be closer to the antenna.",
      "category": "rfid",
      "syntax": "ESC+IP5nn",
      "parameters": [
        {
          "name": "nn",
          "description": "Power level (printer-dependent range)"
        }
      ],
      "whenToUse": "When fine-tuning RFID encoding reliability — increase if tags aren't encoding, decrease if neighbouring tags are being accidentally written.",
      "example": {
        "source": "ESC+A\nESC+IP520\nESC+H0100\nESC+V0050\nESC+X22RFID Label\nESC+IP0,1,12,300833B2DDD9014000000001\nESC+Q1\nESC+Z",
        "description": "Set antenna power to 20 before encoding RFID"
      },
      "previewSupported": false,
      "canonicalUrl": "https://rfid.me/reference/sbpl/ip5/"
    },
    {
      "command": "ESC+&S",
      "name": "Store Form Overlay",
      "description": "Stores the current label design as a form overlay in the printer's memory. A form overlay is like a template — the static parts of your label (logos, borders, fixed text) that don't change. You can recall it later with ESC+&R and only send the variable data.",
      "category": "memory",
      "syntax": "ESC+&Sname",
      "parameters": [
        {
          "name": "name",
          "description": "Overlay name to store (up to 8 characters)"
        }
      ],
      "whenToUse": "When you have a label format that gets printed many times with only some fields changing. Storing the overlay reduces data sent to the printer for each label.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+FW0002,0002,0300,0700\nESC+H0060\nESC+V0060\nESC+X23SHIPPING LABEL\nESC+&SSHIP01\nESC+Z",
        "description": "Store a shipping label border and heading as overlay \"SHIP01\""
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/amps/"
    },
    {
      "command": "ESC+&R",
      "name": "Recall Form Overlay",
      "description": "Recalls a previously stored form overlay from the printer's memory and applies it to the current label. The recalled overlay provides the static design elements, and you add the variable data on top.",
      "category": "memory",
      "syntax": "ESC+&Rname",
      "parameters": [
        {
          "name": "name",
          "description": "Overlay name to recall (must match a stored overlay)"
        }
      ],
      "whenToUse": "When printing labels that use a stored template. Recall the overlay, then add only the variable fields — this is much faster than resending the entire label design each time.",
      "example": {
        "source": "ESC+A\nESC+&RSHIP01\nESC+H0060\nESC+V0150\nESC+X22Order: #12345\nESC+H0060\nESC+V0200\nESC+X22Destination: Sydney\nESC+Q1\nESC+Z",
        "description": "Recall the SHIP01 overlay and add variable order data"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/ampr/"
    },
    {
      "command": "ESC+WT",
      "name": "Calendar Setup",
      "description": "Configures the date/time format for calendar printing. The format string uses placeholders like YY (year), MM (month), DD (day), hh (hour), mm (minute). The printer substitutes these with its internal clock values at print time.",
      "category": "calendar",
      "syntax": "ESC+WTformat",
      "parameters": [
        {
          "name": "format",
          "description": "Date/time format string using YY, MM, DD, hh, mm, ss placeholders"
        }
      ],
      "whenToUse": "When you need the printer to stamp labels with the current date and time — common for production dates, expiry dates, and lot tracking.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+WTDD/MM/YY hh:mm\nESC+H0050\nESC+V0100\nESC+WA\nESC+Q1\nESC+Z",
        "description": "Set up a date/time format and print it"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/wt/"
    },
    {
      "command": "ESC+WP",
      "name": "Calendar Addition",
      "description": "Adds or subtracts a fixed offset from the calendar date set by ESC+WT. Use this to print future or past dates — for example, an expiry date 1 year from the print date.",
      "category": "calendar",
      "syntax": "ESC+WP{+/-}{YY}{MM}{DD}",
      "parameters": [
        {
          "name": "+/-",
          "description": "Direction: + to add, - to subtract"
        },
        {
          "name": "YY",
          "description": "Years to add/subtract (2 digits)"
        },
        {
          "name": "MM",
          "description": "Months to add/subtract (2 digits)"
        },
        {
          "name": "DD",
          "description": "Days to add/subtract (2 digits)"
        }
      ],
      "whenToUse": "When you need to print a date offset from the current date — e.g. expiry dates, review dates, or best-before dates.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+WTDD/MM/YY\nESC+WP+010000\nESC+WA\nESC+Q1\nESC+Z",
        "description": "Print a date 1 year from now (expiry date)"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/wp/"
    },
    {
      "command": "ESC+WA",
      "name": "Calendar Print",
      "description": "Prints the date/time at the current position using the format previously configured with ESC+WT. The printer substitutes the format placeholders with its real-time clock values when the label is printed.",
      "category": "calendar",
      "syntax": "ESC+WA",
      "parameters": [],
      "whenToUse": "After ESC+WT to actually output the formatted date/time on the label.",
      "example": {
        "source": "ESC+A\nESC+H0050\nESC+V0050\nESC+X22Packed:\nESC+H0200\nESC+V0050\nESC+WTDD/MM/YY\nESC+WA\nESC+Q1\nESC+Z",
        "description": "Print \"Packed:\" followed by the current date"
      },
      "previewSupported": true,
      "canonicalUrl": "https://rfid.me/reference/sbpl/wa/"
    }
  ]
}
