Weaverse LogoWeaverse
All Articles
Paul Phan
11 mins read

Shopify’s New Liquid Architecture vs. Weaverse Pilot

Shopify is moving theme composition back into readable Liquid. We compare its new blocks, partials, and agent tooling with Weaverse Pilot’s React and Hydrogen architecture.
#shopify#liquid#hydrogen#weaverse#ai-agents#storefront-architecture#theme-development
Shopify’s New Liquid Architecture vs. Weaverse Pilot
Table of Contents

Shopify’s New Liquid Architecture vs. Weaverse Pilot

Shopify Liquid architecture compared with Weaverse Hydrogen Pilot components

Shopify’s July 2026 Liquid developer preview is not a headless announcement. It does not turn themes into React applications, and it does not replace Online Store 2.0. It changes a more specific boundary: where page composition is represented and how reusable pieces declare their contracts.

The preview adds two Liquid primitives. {% block %} lets a template call a reusable theme block directly, pass named parameters and settings, and provide nested body content. {% partial %} marks a named server-rendered region that JavaScript can fetch and replace without reloading the page. Existing JSON templates, sections, settings, and themes remain supported.

This direction is notable because it approaches an architecture that Weaverse has already applied to Shopify Hydrogen: developers define components and editing contracts in code, while merchants compose and configure those components visually. Weaverse Pilot does this with React, TypeScript, React Router, GraphQL, createSchema(), and Weaverse Studio. Shopify is now building a Liquid-native version of code-defined components, explicit contracts, and visual composition.

The overlap is real, but the implementations are not equivalent. Pilot has a stronger application architecture for typed data, component behavior, and headless storefront development. Shopify’s preview currently has a major advantage in repository-local page legibility: a developer or coding agent can open templates/collection.liquid and read the page’s concrete composition from top to bottom. In Pilot, the component capabilities are local, but the selected page tree is loaded from Weaverse at request time.

That tradeoff is the most useful way to compare them.

The common model: code defines capability, an editor controls selected values

Shopify’s new block model separates two kinds of input.

A block can accept parameters controlled by the template. It can also expose {% schema %} settings controlled through the Theme Editor. A template might fix a button’s HTML type, for example, while allowing a merchant to choose its visual variant. The block keeps its Liquid markup, accessibility attributes, behavior, and editor settings in one file.

The template then makes the composition explicit:

{% block 'container', class: 'collection' %}
<h1>{{ collection.title }}</h1>
{% block 'product-card', block.settings.product: product %}{% endblock %}
{% endblock %}

Pilot uses the same broad separation with different primitives. A section exports a React component and a createSchema() definition. The component implements behavior and rendering. The schema declares the component type, title, settings, allowed children, placement constraints, and presets used by Studio.

The inspected image-with-text section, for example, declares childTypes for image and content components. Its content child allows only subheading, heading, paragraph, and button children, and its preset supplies an initial tree. The main-product section limits itself to product pages, accepts media and information children, and can appear only once. These are not just form fields. They define a constrained component grammar for a visual composition system.

That is why the Liquid preview and Weaverse feel related. Both make a developer-authored contract the boundary of merchant editing. Neither asks a visual editor to generate arbitrary application code.

Where Shopify is currently more legible

The strongest part of Shopify’s preview is not that Liquid is simpler than React. It is that the instantiated page structure returns to the repository.

In the current JSON-template model, Shopify says developers must reconstruct a page by cross-referencing the JSON template, sections, blocks, settings, schemas, and Liquid files. With the preview, a Liquid template names its blocks directly, includes page-specific HTML inline, and shows nesting in the same file. {% block %} body content behaves much like component children, but the result remains a server-rendered Liquid document.

Ben Sehl’s launch article frames this as making page structure “readable code again.” That is accurate for the preview’s template-controlled pages. If an agent opens templates/product.liquid, it can see that a container wraps a product title and button. It does not need a separate content API response to learn that this particular page uses those pieces in that order.

Pilot’s repository tells a different story. app/weaverse/components.ts is an explicit registry of available components. Individual files reveal each component’s implementation and schema. app/weaverse/schema.server.ts defines global theme settings and locale structure. AGENTS.md documents route, schema, loader, codegen, and registration conventions in detail.

But app/routes/home.tsx does not reveal the homepage tree. Its loader calls context.weaverse.loadPage({type}), returns weaverseData, and the component renders <WeaverseContent />. WeaverseContent passes the local component registry to WeaverseHydrogenRoot, which interprets the loaded composition. The repository shows what the system can render, not necessarily what the current homepage does render.

This is an honest weakness for code review and agent reasoning. A developer inspecting only a branch cannot reliably infer the live page hierarchy, selected presets, or merchant-authored content. They need the remote page data, Studio, or another exported representation. Weaverse’s repo-local AGENTS.md reduces architectural ambiguity, but it does not make the active page tree local.

Shopify’s advantage also has a boundary. The docs distinguish {% block %}, where the template controls composition, from {% content_for %}, where merchants add and arrange blocks and Shopify stores the result in JSON. Maximum repository legibility and maximum merchant-controlled rearrangement are still different modes. The preview improves that tradeoff; it does not abolish it.

Contracts: typed Liquid and Theme Check versus TypeScript, schemas, and GraphQL

Shopify is strengthening Liquid’s contract surface. A block can use {% doc %} to describe named parameters and examples. Sehl says the expanded documentation supports typed parameters, validation, editor feedback, and Theme Check, alongside 20 new rules covering contracts, structure, validation, complexity, nesting, and file-size limits. {% schema %} separately defines merchant-facing settings.

This is important because Liquid contracts have historically been easy to imply and hard to enforce. A documented {string} parameter, a schema-defined select value, and a linter that flags invalid structure give both humans and agents a clearer target.

Pilot’s contract system is broader because it operates inside a TypeScript application. Component props can extend HydrogenComponentProps; createSchema() validates the shape of editor configuration; childTypes, enabledOn, limit, conditions, and presets constrain composition; and GraphQL code generation provides operation result types. The package scripts expose typecheck, Hydrogen GraphQL codegen, route checks, Biome, and Playwright tests.

The featured-products section demonstrates the difference. Its schema lets an editor select automatic, collection-based, or manual product sourcing. Conditional inputs expose the appropriate picker. A server-side component loader then runs a typed Storefront API query for the selected collection or product IDs, with a best-selling fallback. The rendered child reads the parent’s loader data and maps typed products into React product cards.

A Liquid block can receive Shopify objects and render commerce data concisely, but Pilot can model arbitrary asynchronous data flows, compose Shopify and third-party APIs, share typed application utilities, and use the full React ecosystem. For a complex headless storefront, that is the stronger contract and execution environment.

There is still duplication to manage. In Pilot, the TypeScript props and the createSchema() inputs are adjacent but separate declarations. A setting rename or type change may require coordinated edits. Component registration is also manual. Pilot’s own AGENTS.md calls missed registration and skipped GraphQL codegen common pitfalls. Stronger tooling does not mean fewer moving parts.

Liquid has the inverse profile. Its object model and rendering path are narrower, and its new typed documentation is less expressive than an end-to-end TypeScript and GraphQL application. But fewer layers can make common theme work easier to inspect and harder to over-architect.

Partials versus React and React Router

Shopify’s {% partial %} addresses a long-standing gap between full-page server rendering and client-side application state. A developer marks a named region in a Liquid template. The @shopify/partial-rendering helpers can fetch one or several regions and apply the returned HTML to matching locations. The documented implementation preserves focus, text selection, form values, and scroll position during replacement.

This is deliberately not a virtual DOM. Sorting a collection can refresh the product grid, count, and active filters in one request while leaving the rest of the document untouched. There is no separate endpoint or client-rendered version of the region to maintain.

The simplicity comes with explicit responsibilities. Shopify’s docs warn about stale responses, loading feedback, screen-reader announcements, transient DOM state, and server-owned values. Developers may need AbortSignal, aria-busy, live regions, and state restoration. Partials make HTML replacement smaller; they do not remove interaction design.

Pilot uses React 19 and React Router 7. Routes own request-level data loading, caching, SEO, analytics metadata, and mutations. Components can hold client state, use hooks and context, and participate in React’s reconciliation model. Weaverse section loaders add another server-side data boundary scoped to editor-defined component data.

React and React Router are more capable for application-like interfaces, nested state, optimistic interactions, customer account flows, and shared client behavior. They also require more application code, more dependencies, and more knowledge of rendering boundaries. Partials are attractive precisely when a server-rendered storefront only needs targeted HTML refreshes. They are not a drop-in replacement for a React application, and React is not automatically justified for every collection filter or cart count.

Theme Editor and Sidekick versus Studio’s no-redeploy editing

Shopify’s architecture keeps editing inside the native theme system. {% schema %} settings appear in the Theme Editor. Merchant-arranged blocks can still use Shopify’s JSON-backed composition path. Sidekick adds natural-language theme editing on top. Sehl also describes repository-level .agents, AGENTS.md, and DESIGN.md guidance so coding agents can follow project conventions.

That is a tightly integrated path for stores that want Liquid, Shopify hosting, native theme primitives, and the established editor. The preview is still explicitly unstable: Shopify says block behavior and JavaScript helpers can change before general availability.

Pilot serves a different operating model. The repository defines React components and schemas, while Weaverse Studio stores and edits page composition remotely. Pilot’s README states that merchants can change content and layout without redeploying the Hydrogen application. Routes load that composition alongside Storefront API data, often in parallel. Developers retain the React codebase; editors operate within the schemas and child constraints developers expose.

The benefit is clear for Hydrogen: a campaign layout or copy change does not require a Git change and Oxygen deployment. The cost is equally clear: the deployable code and the active experience are split across systems. Local development, incident investigation, visual diffs, and agent analysis need access to both. Shopify’s template-first preview keeps more of the concrete page in Git, while Studio gives non-developers a more dynamic headless composition layer.

Neither editing model should be described as universally safer or more governed without evidence about permissions, publishing workflows, history, and rollback. The inspected sources establish visual editing and no-redeploy updates for Studio, not a complete governance comparison.

Practical implications

For a theme team, the Liquid preview offers a credible way to regain code locality without giving up server rendering or Theme Editor settings. It should be especially useful when most page structure is developer-owned and merchants mainly edit bounded values. Partials can remove some Section Rendering API and client-framework plumbing from targeted interactions.

For a Hydrogen team, Pilot remains the more expressive architecture. Its component contracts can include typed React props, editor schemas, nested composition rules, server loaders, generated GraphQL types, routing, and arbitrary integrations. It is designed for storefronts whose requirements exceed a theme runtime.

For teams evaluating both, the decision is not “old Liquid versus modern React.” Shopify is modernizing Liquid around many of the same ideas that make visual headless systems workable: explicit components, documented inputs, constrained composition, agent-readable instructions, and fast feedback.

The sharper question is where the active page definition should live. If repository-local readability and Shopify-native operation dominate, Liquid’s new template composition is compelling. If a headless application and no-redeploy merchant composition dominate, Pilot’s remote model is more capable. Teams choosing Pilot should treat exportable or queryable page structure as important developer infrastructure, not incidental CMS data. Teams choosing Liquid should be precise about which compositions remain in code and which return to JSON through merchant-controlled block arrangement.

Bottom Line

Shopify’s July 2026 preview is a Liquid-native implementation of code-defined components, contracts, and visual composition. It validates the architectural direction Weaverse has already taken for Hydrogen, but it also exposes a weakness in Weaverse’s current model: Shopify can now make a template’s concrete page tree legible in one repository file, while Pilot usually loads that tree remotely.

Weaverse Pilot is stronger where a storefront needs TypeScript, React, React Router, generated GraphQL types, component-scoped data loaders, and a visual editing layer that can change Hydrogen pages without redeployment. Shopify is stronger where a storefront benefits from a narrow server-rendered runtime, native Theme Editor integration, and local page structure that humans and agents can read directly.

The convergence matters more than declaring a winner. Both systems are moving toward the same durable boundary: developers define trustworthy components and contracts; editors compose within those boundaries. The remaining tradeoff is whether the primary artifact is a readable Liquid template in Git or a remotely composed React page interpreted by a headless application.

Sources

Reactions

Like
Love
Celebrate
Insightful
Cool!
Thinking

Join the Discussion

Never miss an update

Subscribe to get the latest insights, tutorials, and best practices for building high-performance headless stores delivered to your inbox.

Join the community of developers building with Weaverse.