Skip to content

Architecture Overview

Kona has three layers: Liquid renders the page, Vite builds the assets, and islands hydrate the interactive parts. Everything else is static HTML — no framework owns the page.

The three layers

Server rendering (Liquid) — Shopify renders every page to complete HTML before any JavaScript executes. Pages are fast and functional with JS disabled.

Build pipeline (Vite) — Vite compiles frontend source (theme/frontend/) into production assets (theme/assets/). In development, Vite serves assets with HMR. In production, built files ship from the Shopify CDN. Five plugins coordinate the integration — see Build Pipeline for credits and details.

Client hydration (Islands) — Interactive components are Web Components that hydrate on the client. The revive runtime from vite-plugin-shopify-theme-islands scans the DOM for custom elements, matches them to island files, and loads them based on hydration directives that control when each component's JavaScript loads.

How the pieces connect

The layout file theme/layout/theme.liquid loads two entry points via auto-generated snippets:

  • theme.css — Tailwind CSS v4 with the full design system
  • theme.js — Imports the revive runtime and accessibility utilities

Sections and snippets render custom elements with hydration directives:

liquid
<header-drawer client:media="(max-width: 1023px)">
  <details>
    <!-- Full HTML markup, functional without JS -->
  </details>
</header-drawer>

The revive runtime sees <header-drawer>, finds theme/frontend/islands/header-drawer.js, checks the client:media directive, and dynamically imports the island when the media query matches.

All npm packages are devDependencies. No third-party JavaScript ships to the browser — every interactive component is a vanilla Web Component using platform APIs.

Deep dives

PageWhat it covers
Islands ArchitecturePartial hydration, the revive runtime, progressive enhancement, nested islands
Hydration DirectivesThe 5 directives that control when islands load
Build PipelineVite config, the 5 plugins, dev vs. production modes
Project LayoutDirectory structure and file organization