Skip to content

Building Custom Content with Metaobjects

What Are Metaobjects?

Metaobjects let you create your own custom content types — a Designer profile, a FAQ item, a Store location — and display them anywhere in your Liquid theme. Unlike product metafields (which add extra data to a product), Metaobjects are standalone records you design from scratch.

Two concepts to know:

  • Definition — the schema: the type name and the list of fields (e.g. a "Designer" definition with fields: name, bio, photo, portfolio_url).
  • Entry — one record filling in that schema (e.g. the entry for "Alice Chen" with her name, bio, photo, and URL).

Create a Definition

  1. Go to Content → Metaobjects in your admin.
  2. Click Add Definition.
  3. Enter a type name (snake_case, e.g. designer) and a display name (e.g. "Designer").
  4. Choose access: Public (entries queryable via the storefront) or Admin Only (entries visible only in the admin).
  5. Add fields using the Add Field button. Each field has a type, a key (snake_case), and a label.
  6. Optionally drag fields to reorder them — the order is what merchants see in the entry form.
  7. Save the definition.

Field Types Available

  • Single-line text, Multi-line text — for short or long plain text
  • Rich text — a WYSIWYG editor for formatted content (bold, italic, links, headings, lists)
  • Integer, Decimal, Money — for numbers and prices
  • Boolean — a toggle (yes/no)
  • Date, Date & Time — date pickers
  • URL, Color — validated inputs
  • File / Image — opens the media library to pick an uploaded image or file
  • Product, Collection — search and select from your store catalog
  • Page — pick a CMS page by title
  • Metaobject — reference an entry from another (or the same) definition
  • List of … — array variant of any type above (e.g. "List of Products" for a curated product list)

Field Validations

Two optional validations make fields smarter:

  • Choices — restrict a text field to a fixed list of options (e.g. "S", "M", "L"). The entry form shows a dropdown instead of a free-text input, preventing inconsistent values.
  • Metaobject type — required for Metaobject reference fields. Specifies which definition type to pull entries from when picking a reference.

Create and Edit Entries

  1. Open the definition and click Add Entry.
  2. Fill in the fields. Each field type has a dedicated input — rich text opens an editor, image fields open the media picker, product/collection fields let you search your catalog.
  3. Set the Status: Active (visible on storefront), Draft, or Archived.
  4. Click Save.

Managing Entries

The entries list supports:

  • Status tabs — switch between Active, Draft, and Archived views.
  • Search — filter entries by handle.
  • Sort — by created date, updated date, or handle.
  • Bulk actions — select multiple entries, then delete them all or change their status in one step.
  • Inline toggle — flip an entry's status directly from the list without opening it.

Row Actions on Each Entry

  • Duplicate — clones the entry. The new handle gets a -copy suffix so the original is unaffected.
  • JSON view — shows the raw API representation of the entry. Useful for debugging or copying values to use in integrations.
  • Storefront usage — scans your active Liquid templates to show which sections and snippets reference this entry's handle. Review this before archiving or deleting a live entry.

Export Entries

Click Export in the entries list toolbar. Choose JSON (full field objects, good for re-importing or processing in code) or CSV (flat columns, good for spreadsheets). The file downloads immediately.

Display Entries in Your Theme

Entries are available in any Liquid template via metaobjects.TYPE.entries:

{% for designer in metaobjects.designer.entries %}
  <div>
    <h3>{{ designer.fields.name }}</h3>
    <p>{{ designer.fields.bio }}</p>
  </div>
{% endfor %}

Up to 50 entries per type are available in a single Liquid render (250 total across all types). For larger lists, use the Storefront API.

Admin-only definitions return an empty list on the storefront — their entries are never exposed to customers.

Notes

  • The type name cannot be changed after the definition is created.
  • Deleting a definition deletes all its entries permanently. Use the Storefront usage scanner first to check for live references.
  • Metaobjects are also queryable via the GraphQL Storefront API for headless storefronts.
Was this helpful?