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
- Go to Content → Metaobjects in your admin.
- Click Add Definition.
- Enter a type name (snake_case, e.g.
designer) and a display name (e.g. "Designer"). - Choose access: Public (entries queryable via the storefront) or Admin Only (entries visible only in the admin).
- Add fields using the Add Field button. Each field has a type, a key (snake_case), and a label.
- Optionally drag fields to reorder them — the order is what merchants see in the entry form.
- 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
- Open the definition and click Add Entry.
- 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.
- Set the Status: Active (visible on storefront), Draft, or Archived.
- 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
-copysuffix 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.