Skip to main content

How to use the V2 packing slip template editor

A guide to the V2 template editor — including how to switch, how the Liquid-based syntax works, the Template Assistant AI tool, layout blocks, and common customizations.

Updated yesterday

The V2 template editor is SKULabs's newer, more powerful way to customize your packing slips. Instead of adding replacement variable flags to the bottom of an HTML file, V2 uses a structured Liquid-based syntax with a live preview panel and a built-in AI assistant to help you make changes without needing to write code yourself.

V1 templates still work. Switching to V2 is optional. Your existing V1 packing slip templates will continue to work. V2 is recommended for new setups or if you want more layout control, a live preview, or access to the Template Assistant.

How to access the V2 editor

  1. Go to Settings > Stores and click the edit (pencil) icon on the store whose template you want to update.

  2. Click the Templates tab, then click the pencil icon next to Packing Slip to open the template editor.

  3. At the top of the editor, you'll see a blue banner that says: "You have been invited to template editor v2, create your first upgraded template today."

  4. Click Open Editor in that banner to launch the V2 editor.

Don't see the banner? V2 access is being rolled out gradually. If you don't see the "Open Editor" link yet, contact SKULabs support and we can enable it for your account.

Note: Once you start editing in V2, the template uses V2 syntax going forward. If you need to revert to your previous V1 template, contact SKULabs support and we can restore it.

Editor overview

The V2 editor is split into two panels side by side:

  • Left panel — Code editor: This is where you write and edit your template using Liquid-based syntax. Line numbers are shown on the left. The code is syntax-highlighted to make it easier to read.

  • Right panel — Live preview: This shows a real-time rendering of your template using sample order data. As you make changes to the code, the preview updates so you can see exactly how your packing slip will look when printed.

At the top of the editor there are three controls:

  • Template Assistant (Beta) — An AI-powered text bar where you can describe a change in plain English and click Generate to have it applied automatically.

  • Packing Slip Options — A dropdown that lets you switch between different template variants (e.g. Default Packing Slip, Amazon-specific template).

  • Menu / Save — The Menu button gives access to template actions; Save commits your changes.

Using the Template Assistant

The Template Assistant is the fastest way to make changes to your V2 template without writing code. It's an AI tool built directly into the editor.

  1. Click the Template Assistant text bar at the top of the editor (it shows the placeholder text "Try something like 'Add a barcode column to the products table'").

  2. Type your request in plain English. For example:

    • "Add a barcode column to the products table"

    • "Show customer notes below the items table"

    • "Add the ship by date to the header"

    • "Remove the price column"

    • "Make the font size larger"

    • "Add a thank you message at the bottom"

  3. Click Generate. The assistant will update the template code and the live preview will refresh.

  4. Review the preview to confirm the change looks right, then click Save.

Tip: Be specific in your requests. "Add the order tag below the order number in the header" will give better results than "add tags." If the result isn't quite right, you can refine your request or edit the code directly.

Understanding the V2 template syntax

V2 templates use a Liquid-inspired syntax. If you're comfortable editing code directly, here's what you need to know.

Template tags: {% %}

Tags wrapped in {% %} are structural or logical commands. They don't output text themselves — they define layout, logic, and loops.

  • {% PackingSlip %} — Required at the start of every packing slip template. Marks the beginning of the template.

  • {% FlexRow %} / {% endFlexRow %} — Defines a horizontal row of columns. Everything between these tags is arranged side by side.

  • {% FlexColumn %} / {% endFlexColumn %} — Defines a column inside a FlexRow. Add text-right to right-align the column's content (e.g. {% FlexColumn text-right %}).

  • {% StoreLogo %} — Inserts your store's logo image.

  • {% Barcode orderNumber %} — Inserts a scannable barcode of the order number.

  • {% Bin %} — Inserts the bin number the order was picked to.

  • {% if condition %}...{% endif %} — Conditional logic. Content only renders if the condition is true. Example: {% if origin.phone %}#{{ origin.phone }}{% endif %} only shows the phone number if one exists.

  • {% assign variable = value %} — Sets a variable for use later in the template.

Output tags: #{{ }}

Tags wrapped in #{{ }} output a value — they insert data directly into the rendered packing slip.

  • #{{ currentDate | formatDate: 'Mon DD YYYY' }} — Outputs today's date formatted as "Mar 26 2026". The part after the pipe (|) is a filter that transforms the value.

  • #{{ orderNumber }} — Outputs the order number with a # prefix.

  • #{{ origin.name }} — Store name.

  • #{{ origin.phone }} — Store phone number.

  • #{{ origin.email }} — Store email address.

  • #{{ origin.address }} — Store's full address block.

  • #{{ origin.company | default: origin.name }} — Company name, falling back to store name if not set.

  • #{{ order.metafields.custom.store_name }} — A custom Shopify metafield value. Replace store_name with your metafield key.

  • #{{ customer.company }} — Customer's company name.

  • #{{ customer.name }} — Customer's full name.

Filters

Filters modify output values and follow a pipe (|) after the variable name.

  • | formatDate: 'Mon DD YYYY' — Formats a date.

  • | default: 'fallback text' — Shows fallback text if the variable is empty or undefined.

How layout blocks work

The V2 template builds layouts using FlexRow and FlexColumn blocks — the same concept as a two- or three-column layout in a document or webpage.

The default packing slip header uses two FlexColumns inside one FlexRow: the left column shows the store logo, date, and order number; the right column (right-aligned) shows the order barcode and bin number. Below that, a second FlexRow creates the Store and Customer address columns side by side, with conditional fields that only render if the data exists on the order.

Adding a new column: To add a third column to any row, add a new {% FlexColumn %}...{% endFlexColumn %} block inside the existing {% FlexRow %}...{% endFlexRow %}. The columns will automatically share the available width.

Packing Slip Options

The Packing Slip Options dropdown at the top of the V2 editor lets you switch between different template variants for the same store — for example, a Default Packing Slip for most orders and a separate template for Amazon orders. Each variant can be customized independently.

To create a new variant, click the Menu button and look for the option to duplicate or create a new template. You can then use shipping rules (Settings > Shipping > Rules) to route orders to the correct packing slip variant automatically.

Saving and previewing

  • The live preview on the right updates as you type, so you can see changes in real time before saving.

  • Click Save in the top right to commit your changes. Unsaved changes won't affect printed packing slips until saved.

  • If a change breaks the template (e.g. a syntax error), the preview will show an error. Fix the code before saving.

Common customizations in V2

Here are the most frequently requested changes and how to make them — either using the Template Assistant or by editing the code directly.

Add customer notes

Template Assistant: "Show customer notes below the items table." Or add this directly:

{% if order.notes %}
<p><strong>Notes:</strong> #{{ order.notes }}</p>
{% endif %}

Show the ship by date

Template Assistant: "Add ship by date to the header." Or add #{{ order.ship_by_date }} inside a FlexColumn in the header row.

Add order tags

Template Assistant: "Add order tags below the order number." Or add #{{ order.tags }} in the desired location.

Show bin and batch info

The {% Bin %} tag is already in the default V2 template header (right column). If removed, add it back inside a {% FlexColumn %} block.

Hide the price column

Template Assistant: "Remove the price column from the items table."

Change the date format

Edit the formatDate filter — change 'Mon DD YYYY' to 'MM/DD/YYYY' for a numeric format, for example.

Add a custom footer or thank you message

Template Assistant: "Add a thank you message at the bottom of the packing slip." Or add static HTML text at the end of your template.

V1 vs V2 — key differences

  • V1 uses replacement variable flags (ORDER_ITEMS_WITH_BARCODES, EXCLUDE_BLANKS, NOTES) added to the bottom of an HTML file. The layout is mostly fixed by SKULabs's default rendering.

  • V2 gives full layout control using FlexRow/FlexColumn blocks and Liquid-style syntax. You can place any field anywhere on the slip.

  • V2 has a live preview — V1 required printing a test order to see changes.

  • V2 has the Template Assistant — V1 required manual HTML editing or contacting support.

  • V1 replacement variables are not used in V2. Data is accessed via #{{ variable }} syntax and structural blocks like {% Barcode %} and {% Bin %} instead.

If you need help migrating a heavily customized V1 template to V2, contact SKULabs support with your store name and we can help convert it.

Frequently asked questions

I don't see the "Open Editor" link in my template editor. How do I get V2?

V2 access is being rolled out gradually. If you don't see the blue banner with the "Open Editor" link at the top of your packing slip template editor, contact SKULabs support and we can enable V2 for your account.

Can I switch back to V1 after using V2?

Not directly from the editor. If you need to revert to your previous V1 template, contact SKULabs support and we can restore it.

Does V2 work for all template types (invoices, purchase orders, etc.)?

Currently, V2 is available for packing slips. Invoices, purchase orders, and pick lists still use the V1 system. See How to customize templates for V1 replacement variables.

Does V2 support the same replacement variables as V1?

No — V2 uses a different syntax. V1 replacement variables like ORDER_ITEMS_WITH_BARCODES or EXCLUDE_BLANKS are not used in V2. Instead, V2 uses Liquid-style output tags (#{{ }}) and structural tags ({% %}). The Template Assistant can help translate common V1 behaviors into V2 equivalents.

What happens to my V1 template when I open V2?

Your original V1 template is preserved. V2 starts you with a default template or a converted version. If you need your old V1 template restored, contact SKULabs support.

Can I have different V2 templates for different stores?

Yes. Templates are per-store. Each store has its own packing slip template that can be independently customized in V2. Use the Packing Slip Options dropdown to manage multiple variants within the same store.

Related articles

Did this answer your question?