Skip to main content

Objects

Everything a theme can read, exposed on the DataApi (useData()) and its companions. Where an industry-standard theme language would give you a template global, theme-kit gives you a typed method or hook.

Store & content​

ObjectAccessWhat you get
shopuseData().shopName, description, email/phone, brand (logo, colors), primary domain, payment settings, cookie banner
shop.policiesuseData().shop.policiesPrivacy, refund, terms of service, shipping, subscription — each with handle, title, url, body
menu (linklists)menu(handle) · listMenus()Recursive items[] with title, url, typed MenuItemType
pagepageByHandle(handle)Title, HTML body, bodySummary, author, timestamps, templateSuffix, SEO
blogblogByHandle(handle, { articles })Title, articles[], SEO, templateSuffix
articlearticleByHandle(blogHandle, articleHandle)Title, excerpt, contentHtml, image, author, publishedAt, tags, SEO
metaobjectmetaobject(type, handle) · metaobjects(type, { first })fields[] plus a convenient values map
localizationuseData().localizationActive country/currency/language/market + all available countries & languages

Commerce​

ObjectAccessWhat you get
productproductByHandle(handle) (card) · fetchProduct(handle) (full PDP)Price/compare-at (Money), images & media[] (image / video / 3D / external video), options[], variants[], selling plan groups, collections, totalInventory, metafields, SEO
product.variants[]on a full productPrice, availableForSale, selectedOptions, sku/barcode, inventory policy & quantity, weight, quantityRule, unit price, per-location storeAvailability
collectioncollectionByHandle(handle) · allCollections()Title, description, image, products, productsCount, metafields, SEO
collection (paged)collectionProducts(handle, { first, after, sortKey, reverse, filters })Products page + faceted filters[] + pageInfo cursors
cartuseCart()Lines, totals, discount & gift-card codes, note, attributes — plus mutations: add, updateQuantity, remove, clear, applyDiscountCodes, applyGiftCardCodes, updateNote, updateAttributes
recommendationsproductRecommendations(productId)Recommended products[], intent, performed
searchsearch(query, { first, after, types })totalCount, products/pages/articles, faceted filters[], pageInfo
predictive_searchpredictiveSearch(query, { limit })Query suggestions + matching products/collections/pages/articles

Customer & orders​

ObjectAccessWhat you get
customeruseData().customerProfile, acceptsMarketing, numberOfOrders, tags, default address, addresses[], store credit accounts
ordercustomer.orders(token) · orderByLookup(...)Name/number, financial & fulfillment status, totals, lineItems[], transactions, addresses, fulfillments, gift cards
addresscustomer.addresses + create/update/deleteFull CustomerAddress shape
payment methodscustomer.paymentMethods(token)Saved payment methods

Extras (beyond the classic set)​

ObjectAccessNotes
pixelsuseData().pixels()Store tracking pixels for the analytics bus
locationsuseData().locations()Physical store locations (store locator)
raw GraphQLuseData().graphql(query, vars)Live-only escape hatch to the storefront API
dynamic sourcesuseBound(value) / useResourceContext()Resolve { '@source': 'product.metafields.custom.x' } bindings, incl. metaobject:type:handle.field

Differences from a classic template language​

Classic globalIn theme-kit
paginateCursor pagination via pageInfo on collectionProducts / search — render your own controls
formOrdinary React forms calling CartApi / customer methods
request / routesURLs come pre-built on objects (product.onlineStoreUrl, menuItem.url, policy.url)
typed metafields dropsMetafields arrive as a "namespace.key" → value map, with typed shapes (Rating, Measurement, GenericFile, …) exported for parsing
section / blockYour component's attributes + children (SectionProps)