Hyvä themes

Hyvä is one of four supported Magento frontend stacks on StoreFrame, installed via Composer and configured automatically at provision time.

Hyvä is a Tailwind-based Magento 2 frontend that replaces Luma's RequireJS/Knockout stack with Alpine.js and server-rendered HTML. On StoreFrame, Hyvä is one of four supported theme families — alongside Luma, Breeze, and StoreFrame's own package-base / package-licensed themes. When you select a Hyvä theme in HUB, the provisioning role wires up the licensed Composer repository, installs the theme, applies Hyvä-specific Magento config, and writes the theme assignment directly to core_config_data.

Theme detection

The Magento role detects which theme family is being installed by pattern-matching the magento_theme Composer package name:

PatternTheme type
theme-frontend-lumaluma
hyva (anywhere in the package name)hyva
storeframestoreframe
breeze / swissupbreeze

Any package containing hyva resolves to the Hyvä install path, including the official hyva-themes/magento2-default-theme, hyva-themes/magento2-luma-fallback, and custom child themes published under any vendor namespace.

Licensed Composer repository

Hyvä is a commercial theme and requires authenticated Composer access. You don't need your own Hyvä licence. StoreFrame provides access for every environment that selects a Hyvä package, and Composer is set up for it before the theme is installed.

Luma fallback

If you install hyva-themes/magento2-default-theme, the role automatically also installs hyva-themes/magento2-theme-fallback. The fallback is required to render Magento admin pages and any storefront route that Hyvä does not yet implement (some third-party module frontends, certain checkout edge cases). Without the fallback, those pages render against Hyvä's stripped-down layout and break.

Production config applied at install

Magento has many JavaScript / CSS optimization flags that need to be set differently for Hyvä than for Luma. The role applies the following via bin/magento config:set immediately after installing the theme:

SettingValueWhy
dev/js/merge_files1Merge JS into bundles
dev/js/minify_files1Minify merged JS
dev/js/move_script_to_bottom1Defer scripts to body close
dev/css/merge_css_files1Merge CSS into bundles
dev/css/minify_files1Minify merged CSS
dev/css/use_css_critical_path1Inline critical CSS
dev/static/sign1Cache-bust static URLs

The role also clears design/head/includes (some default Magento installs ship third-party tag injections there that conflict with Hyvä's head structure) and enables three Hyvä-specific catalog features: client-side breadcrumbs, recently-viewed product blocks on PDP, and recently-viewed product blocks on PLP.

Theme ID lookup and assignment

Hyvä is installed via Composer but Magento does not auto-assign new themes. The role queries the theme table directly and assigns the highest-ID Hyvä theme:

SELECT theme_id FROM theme WHERE theme_path LIKE 'Hyva/%' ORDER BY theme_id DESC LIMIT 1;

The resulting ID is inserted into core_config_data at design/theme/theme_id with scope default, 0. This sets the theme for all stores and websites on the environment.

If you want different stores to use different themes (Luma on one website, Hyvä on another), you need to override the design/theme/theme_id value at the website or store scope after provisioning, using either the admin UI (Content → Design → Configuration) or bin/magento config:set --scope=stores --scope-code=<code>.

Asset build pipeline

Tailwind compilation runs in the node-cli container, whose Node.js version is pinned per Magento release (.env). The platform does not compile Tailwind during deployment: the default Hyvä theme ships with compiled CSS, and for your own child theme you run the build yourself and commit the result. See Node.js for the commands.

Switching themes after provisioning

The theme family is chosen at provisioning. To switch themes afterwards, change the theme package with Composer and reassign the theme ID in the admin or with bin/magento config:set, or file a support ticket.

On this page