CALIPRY

How to show your specifications on cards and product pages

Last checked against Splash 1.0.0 / 2026-08-15

Every specification Splash prints comes from a product metafield you create and fill in yourself. The theme never guesses a figure and never invents one. Create the metafields once, then decide where each one appears.

There are five places a specification can show, and they are configured separately. Four of them are below. The fifth is the optional Product details section, which carries a second table of its own and is covered at the end of this page. Nothing appears in any of them until the metafields exist and a product carries a value.

Where it appears What controls it How many
Product cards in collection, search, featured products and recommendations Theme settings, then Product specs Up to 3
Product cards in a blog article sidebar The same Spec 1 setting, always on 1
The specification table below the buy box The Specification table block on the Product section Up to 8
Proportional bars in the buy column The Spec bars block on the Product section Up to 3

Step one: create the metafield definitions

This is the step everything else depends on, and it happens in Shopify admin rather than in the theme editor.

Go to Settings, then Custom data, then Products, then Add definition. Give the definition a name, set its type, and save. Repeat for each figure you want to publish.

Single line text

The type to reach for. It holds a number and its unit together, which is what the table and the bars both read: 80 GPM, 2.7 kW, 316 stainless.

Integer or Decimal

Also works. The value prints as a bare number with no unit, so put the unit in the row label instead.

Multi-line text or a list type

For the values that are a list rather than a figure: the package contents panel, and the Metafield content block on the Product details section. Both are covered below. Multi-line text also works for the short description in the buy box.

The namespace and key

Shopify writes the metafield's address as a namespace and a key joined by a dot. That address is what you type into the theme, and it must match exactly.

specs.flow_rate     correct
custom.flow_rate    correct, if that is the address you created
flow_rate           wrong: no namespace
specs/flow_rate     wrong: slash instead of dot
specs.pump.flow     wrong: more than one dot

Exactly one dot. The theme reads everything before the dot as the namespace and everything after it as the key, so a second dot leaves it looking for a key that does not exist. There is no error message when this happens: the row is left out of the page.

When you create a definition, Shopify proposes an address for you, usually custom. followed by the name you typed. You can edit it on the spot. Splash ships pointing at specs.flow_rate, specs.head and specs.power, which are the demo store's pump measurements and will not exist on your store. Either create your definitions in a specs namespace with those keys, or leave them in custom and change the theme settings to match. Any namespace works as long as the two sides agree.

Requires The definition must be readable by the storefront. Look for the Access section on the definition and confirm Storefronts can read it. A definition that only the admin can read is filled in on the product page and invisible on the storefront.

Step two: fill in a value on each product

Open a product in admin and scroll to the Metafields section at the bottom of the page. Fill in the definitions that apply to that product and leave the rest blank.

Leaving one blank is a supported state, not an omission. Rows are resolved per product, so one configuration can cover a catalog where a pump carries a flow rate, a heater carries two of the three, and a sun lounger carries none. Each product drops the rows it cannot answer. This is deliberate across the whole theme: see why Splash shows nothing rather than a guess.

Specifications on product cards

Open Online Store, then Themes, then Customize, then Theme settings at the foot of the sidebar, then Product specs.

Show specifications on product cards

Off by default. Off, a card shows the product type, title, SKU, price and stock. On, up to three specification rows are added beneath the title.

Spec 1 metafield, Spec 2 metafield, Spec 3 metafield

The address of each metafield, written namespace.key.

Spec 1 label, Spec 2 label, Spec 3 label

The wording beside each value. Leave it blank and the theme uses the key with underscores turned into spaces and the first letter capitalized, so flow_rate reads Flow rate. Type a label when you want anything else, an acronym such as GPM included.

These three pairs are set once and apply to every product card in the store: collection pages, search results, the Featured products section on the home page, and the product recommendation sections beneath a product. There is no per-collection override.

A card that resolves none of the three keys drops the list entirely rather than reserving space for it, so a catalog that mixes pumps with pool shells does not print three empty rows on every shell.

Note The three metafield addresses ship filled in and the switch above them ships off. Turning the switch on before you have created metafields at those exact addresses changes nothing you can see. That is the commonest reason this feature looks broken.

Everything else about card layout, including how many cards sit in a row, is on collection and search pages.

The one place the switch does not apply

A blog article can carry up to four Product blocks, which draw small cards in the article sidebar under the heading Products in this article. Those cards always print the Spec 1 metafield value, whether or not Show specifications on product cards is on.

They print the value on its own with no label, so choose a Spec 1 value that reads without one. 26 GPM works; 26 does not. Article sidebars are covered on blog and content pages.

The specification table

This is the full table, up to eight rows, drawn below the gallery and buy column. It is a block on the Product section: Customize, then a product template, then the Product section, then Add block, then Specification table. One per product template.

The rows

Eight numbered groups of two settings each, Row 1 through Row 8.

Row metafield

The address, namespace.key. A row with this blank is not configured at all.

Row label

The wording in the left column. Same fallback as the card labels: blank uses the key with underscores turned into spaces.

Rows print in the order 1 to 8. To reorder them, retype the addresses.

The heading and the two groups

Tab label

Names the band in the tab strip. Default Specifications. Used only when Product information display is set to Tabs.

Caption

The small line above the heading. Default Specifications. It is hidden whenever Product information display is set to Tabs, because the tab label names the band instead. The setting is what decides this, not what you see: a product answering only one band is drawn stacked with no tab strip, and the caption is still hidden there. Set Product information display to Stacked if you want it on the page.

Heading

The table's own heading. Default Full technical data.

First group heading and Second group heading

The table draws as two columns. Name each one, or leave both blank to keep the headings off screen while screen readers still announce them.

Rows in the first group

A slider, 1 to 7, default 4. It decides where the table splits into its second column.

The split counts the rows that actually appeared on this product, not the rows you configured. A product answering three of your eight rows with a split set to 4 puts all three in the first column and draws no second column at all.

What makes a row disappear

The product has no value

The row is dropped for that product. Other products keep it.

The value is nothing but a dash

A value of -, an en dash or an em dash on its own is read as "not applicable" and the row is dropped. A controller has no flow rate, and a row saying so is noise. If you want a dash on the page, write something else, such as Not applicable. A dash inside a longer value, such as 3-5 ft, is unaffected.

What makes the whole table disappear

When a product resolves no rows at all, the table does not render, and neither does its tab. You get no heading, no empty table and no Specifications tab with nothing behind it.

This is the behaviour to expect on a brand new store before any metafields exist, and on any product that carries none of the eight measurements. If a table is missing on one product and present on others, check that product's metafield values rather than the theme setting.

Whether the table appears as a tab or as a stacked band is decided by Product information display on the Product section, and covered on the product page. A single band is always stacked, because one tab is a label pretending to be a control.

Spec bars

Up to three figures drawn as proportional fills in the buy column, so the shape of the product reads before the numbers do. Add block, then Spec bars. One per product template. Drag it in the block list to sit where you want it, above or below the price and buy buttons.

Each of the three rows has four settings.

Row metafield

The address, namespace.key.

Row label

The wording above the bar. Same blank fallback as everywhere else.

Scale

A number, with no default. The highest value across products of this kind. The bar fills to the product's value as a share of it. A metafield carries a value and nothing else, so this is where you state what the value is being measured against.

Emphasis

Accent or Neutral. Accent draws the fill in your accent color, Neutral in grey. Default Accent. Use Neutral for the figure a buyer checks rather than compares on.

A bar needs three things, not one

  1. A Row metafield address.
  2. A Scale above zero. Leave it blank and no bar is drawn, however good the metafield value is.
  3. A value on the product that begins with a number.

The theme reads the first word of the value as the figure and the rest as the unit. 80 GPM prints 80 with GPM beside it and fills the bar to 80 against your scale. Variable speed begins with a word, so nothing is drawn. A value of 0 draws nothing either.

Commas and a percent sign are stripped from the figure before it is measured, so 1,200 L reads as 1200. Because the percent sign is stripped, 80% prints as a bare 80. Write 80 % with a space, or put the sign in the label.

A value above the scale fills the bar to 100% rather than overflowing, and still prints the real number. If bars across your catalog keep hitting the end, your scale is set too low.

Note The block draws nothing at all rather than an empty bordered box when a product answers none of the three bars. Configuring three bars does not reserve three tracks on every product.

Package contents

What is in the box, as a ruled list inside a collapsible panel in the buy column. Add block, then Package contents. One per product template.

Heading

The panel's summary line. Default Package includes.

Metafield

The address, namespace.key. Default specs.package.

Open by default

Off by default, so the panel starts closed.

Two metafield types work, and they behave the same on the page.

  • Multi-line text. Each line becomes one row. Blank lines are ignored.
  • A list type, such as a list of single line text values. Each entry becomes one row.

The block renders nothing on the storefront when the metafield is missing or empty on that product. In the theme editor you see the note "Enter a metafield with a value on this product, for example specs.package." instead, so you can find the block while you are still filling it in.

The short description in the buy box

The Description block beside the gallery prints the product description. It is trimmed to the first paragraph only when the Full description block is on the same template, so on a template without that block the buy column carries the description in full. A metafield can replace it either way.

The block carries one setting, Short description metafield, defaulting to custom.short_description. Create that definition as Single line text or Multi-line text and fill it in per product.

When the metafield holds a value it replaces that text entirely, untrimmed: the product description is not used in the buy column and is not appended. When it is empty the description returns. Leave the setting blank to switch the metafield off across the store.

Note The text behind it changes on its own when you add the Full description block to the same template: the buy box trims itself to the first paragraph so the same prose does not print twice on one page. A description written as a single paragraph is cut to its first 40 words instead, because there is no paragraph break to cut at.

A second, independent table

Product details is an optional section that sits below the buy box and holds long-form content in a stack of collapsible items. It carries its own Specification table block, with its own eight Row metafield and Row label pairs, unconnected to the one on the Product section.

Add it with Add section, then Product details, on a product template. It ships with two items: Description and Specification table.

Use it for the values that did not earn a place next to the price: carton dimensions, certifications, materials, whatever a buyer reads once. Two differences from the main table are worth knowing.

No group split

It draws one table, not two columns. There is no Rows in the first group setting.

A dash is printed, not dropped

Only the main product table treats a lone dash as "not applicable". Here it prints as written.

Each item takes a Heading and an Open by default checkbox, and an item with no heading or no content is left off the storefront entirely, with a note in its place in the theme editor. The section is listed in full on the section and block reference.

If a row does not appear

Work through these in order. The first three cover almost every case.

  1. Check the product's own value. Open the product in admin, scroll to Metafields, and confirm the field is filled in on this product. Rows resolve per product, so a table can be complete on one product and absent on the next.
  2. Check the address, character for character. One dot, correct namespace, correct key, no trailing space. specs.flow_rate and spec.flow_rate are different addresses and only one of them exists.
  3. Check the definition's storefront access. Settings, then Custom data, then Products, then the definition. Storefronts must be able to read it.
  4. For a card row, check that Show specifications on product cards is on. It ships off.
  5. For a bar, check that Scale is filled in and above zero, and that the value begins with a number.
  6. For a table row, check that the value is not a lone dash.

There is no error state anywhere in this chain. A wrong address, a missing definition and an empty product field all produce the same result: the row is not on the page. That is why the order above starts with the product and works outward.

Full definitions of every setting named here are on the theme settings reference and the section and block reference. If something is still missing after all six checks, contact support.

Something wrong here If a step does not match what you see, say so and it gets fixed. Documentation goes stale, which is why the line under the title carries a date.