42 min read

How to Install the Hyvä Theme in Magento 2: The Complete 2026 Guide

A complete, developer-tested 2026 guide to installing the Hyvä theme in Magento 2 — now free and open source. Composer commands, child themes, Luma migration, hosting, and fixes.

Jul 15, 2026
Share

If you build or maintain Magento stores, 2026 is the year the Hyvä conversation stopped being "should we?" and became "how fast can we?". As of November 2025, the Hyvä theme is free and open source — the paid license that used to gate it is gone. The single biggest barrier to a modern Magento front end just disappeared.

This guide walks through installing Hyvä in Magento 2 the way we'd do it on a real project: verified Composer commands, a clean child theme so your work survives updates, a realistic path for migrating off Luma, the hosting stack that actually makes the performance numbers real, and the handful of issues that trip up almost everyone on their first install.

TL;DR — what you'll do

  • Grab a free Hyvä Composer key, wire up authentication, and composer require the theme.
  • Activate Hyvä at the Website scope and disable Magento's legacy JS/CSS bundling.
  • Create a child theme so every customization is upgrade-safe.
  • Migrate Luma customizations from Knockout.js to Alpine.js.
  • Serve it on a stack (PHP 8.4, Redis/Valkey, Varnish, OpenSearch) that lets Hyvä hit 90+ Lighthouse.

01What Hyvä actually is

Hyvä (Swedish for "good") is a complete replacement for Magento's default Luma front end. Instead of the legacy stack of Knockout.js, RequireJS, LESS, and a mountain of jQuery, Hyvä rebuilds the storefront on two modern, lightweight tools:

  • Tailwind CSS — a utility-first CSS framework that ships only the styles you actually use.
  • Alpine.js — a tiny (~15 KB) reactive JavaScript framework for interactivity, with no build-step tax on the browser.

Crucially, Hyvä is not a headless or PWA rewrite. It keeps Magento's native, server-rendered architecture — the same .phtml templates, layout XML, and blocks you already know — so you get a dramatic performance jump without throwing away the platform's SEO strengths or committing to a separate front-end application. For most merchants, that's the sweet spot: modern speed, familiar Magento.

The big 2026 change On November 10, 2025, Hyvä Themes relicensed the core theme to OSL-3.0 + AFL-3.0 — the same open-source licenses Magento Open Source uses. What was a €1,000 one-time license is now free. Premium add-ons (Hyvä UI, Checkout, Commerce) remain paid, but the theme itself no longer costs anything.

02Why it's so much faster

The performance gap between Hyvä and Luma isn't marginal — it's an order of magnitude, and it comes down to how much the browser has to download and execute. Luma ships hundreds of kilobytes of JavaScript before a shopper can do anything. Hyvä ships a fraction of that.

Product page weight Hyvä ~0.15 MB Luma ~0.90 MB Category page load (throttled mobile) Hyvä ~1.6 s Luma ~8.0 s Lighthouse (2026): Hyvä 90+ achievable · Luma typically 40–60
Representative figures — real numbers depend on your catalog, extensions, and hosting stack.

Three things drive the difference: Hyvä sends roughly 80–90% less front-end code, it replaces Knockout+RequireJS with Alpine's ~15 KB, and Tailwind's build step purges unused CSS so the stylesheet stays tiny. Fewer bytes and less JavaScript execution translate directly into faster Largest Contentful Paint, better Core Web Vitals, and — in practice — higher conversion on mobile.

03License & cost in 2026

Here's the current lay of the land, so you know exactly what you're getting for free and where money still comes into play.

ComponentCost (2026)What it is
Hyvä Theme (core)Free / OSL-3.0 + AFL-3.0The full storefront front end. This is what this guide installs.
Hyvä UI€250 / storeLibrary of prebuilt, copy-paste UI components.
Hyvä Checkout€1,000 (one-time)A rebuilt, high-performance checkout to replace Luma's.
Hyvä Commerce€3,000 / yearSubscription bundling checkout + premium support.
Hyvä Enterprise€7,500 / yearB2B / advanced features for large operations.
You still create a free account on the Hyvä portal to get a Composer key — "free" doesn't mean "no registration". The theme is also mirrored on GitHub, but the Packagist key is the cleanest way to manage it with Composer.

04Before you start

Hyvä runs on top of a standard Magento install, but check these off first. A mismatch here is the most common reason an install "doesn't work".

RequirementSupportedNotes
Magento / Adobe Commerce2.4.4-p9, 2.4.5-p8, 2.4.6-p7, 2.4.7-p1 or higherWorks on both Open Source and Adobe Commerce.
PHP8.1, 8.2, 8.3 or 8.48.4 recommended for new builds.
Node.js≥ 20.0.0 (LTS 20 or 22)Dev only — used to compile Tailwind, not on production.
Composer2.xWith CLI access to your Magento root.
Hyvä keyFree packagist.com keyFrom your account at hyva.io.
Back up first Never run this on production without a tested backup and, ideally, a staging environment. Switching the applied theme changes what every visitor sees the moment you flush cache.

05Installing Hyvä — 8 steps

On a prepared server this takes 15–30 minutes. Run every bin/magento command from your Magento root directory.

1

Get your free Packagist key

Register at hyva.io, open your account dashboard, and generate a free packagist.com authentication key. Individual accounts get several keys; agency partners get many more. Copy your key and your project name — you'll need both in the next step.

2

Configure Composer authentication

Point Composer at Hyvä's private Packagist repository and store your key. Replace YOUR_KEY and YOUR_PROJECT_NAME with your real values.

terminalbash
# Store your Hyvä auth key
composer config --auth http-basic.hyva-themes.repo.packagist.com token YOUR_KEY

# Register the private Hyvä repository
composer config repositories.private-packagist composer https://hyva-themes.repo.packagist.com/YOUR_PROJECT_NAME/
3

Require the theme & run setup

Pull in the default Hyvä theme package and let Magento register the new modules.

terminalbash
composer require hyva-themes/magento2-default-theme
bin/magento setup:upgrade
4

Activate Hyvä in the admin

In the Magento admin, go to Content → Design → Configuration, edit your store's scope, and set the Applied Theme to Hyvä default. Save.

Do this at Website scope Set the theme at the Website level, not only the Store View. Applying it too narrowly is the #1 reason people see a half-styled or still-Luma storefront after install.
5

Disable Magento's legacy minification & bundling

Hyvä manages its own optimized assets. Magento's built-in JS/CSS merging and bundling will fight it and can break the front end, so turn them off.

terminalbash
bin/magento config:set dev/template/minify_html 0
bin/magento config:set dev/js/merge_files 0
bin/magento config:set dev/js/enable_js_bundling 0
bin/magento config:set dev/js/minify_files 0
bin/magento config:set dev/js/move_script_to_bottom 0
bin/magento config:set dev/css/merge_css_files 0
bin/magento config:set dev/css/minify_files 0
6

Disable the legacy CAPTCHA

Magento's default CAPTCHA relies on Luma-era JavaScript and can silently break Hyvä forms (including checkout). Disable it and use Google reCAPTCHA v2/v3 instead.

terminalbash
bin/magento config:set customer/captcha/enable 0
7

Verify GraphQL modules

Hyvä uses GraphQL for several interactive pieces (mini-cart, search, etc.). Confirm the modules are enabled — on 2.4.7+ they are by default.

terminalbash
bin/magento module:status | grep GraphQl
8

Deploy static content & flush cache

Finally, compile and deploy, then flush the cache to see Hyvä live.

terminalbash
bin/magento setup:static-content:deploy
bin/magento cache:flush
Success looks like Load the storefront. You should see a clean, fast, unstyled-by-Luma page rendering through Hyvä. It'll look plain until you build your own theme on top — which is exactly the next step.

06Create a child theme (don't skip this)

Never customize the default Hyvä theme directly — the next update will overwrite your work. Instead, create a child theme that inherits from Hyvä and holds all your changes. Here's the minimal structure:

app/design/frontend/ MagedIn/ store/ registration.php theme.xml web/tailwind/ tailwind.config.js // declares the theme // sets Hyvä as parent // your Tailwind config
A minimal Hyvä child theme. Everything you customize lives here, safely above updates.

The key file is theme.xml, where you declare Hyvä as the parent:

app/design/frontend/MagedIn/store/theme.xmlxml
<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
    <title>MagedIn Store</title>
    <parent>Hyva/default</parent>
</theme>

And registration.php, which registers the theme with Magento:

app/design/frontend/MagedIn/store/registration.phpphp
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::THEME,
    'frontend/MagedIn/store',
    __DIR__
);

Then install Tailwind's dependencies and compile your CSS. Use --watch while developing and --minify for production:

web/tailwindbash
# from your child theme's web/tailwind directory
npm install
# development: rebuild on change
npx tailwindcss -o ../css/styles.css --watch
# production: minified build
npx tailwindcss -o ../css/styles.css --minify

Set your child theme as the Applied Theme in the admin (same place as Step 4), and from here on, every template override, Tailwind tweak, and component lives in MagedIn/store — untouched by Hyvä updates.

07Migrating from Luma

If you're moving an existing store, the theme install is the easy part. The real work is porting customizations. The mental shift is Knockout.js → Alpine.js: declarative reactivity moves from separate JS files into small, readable attributes right on your markup.

The pattern, side by side

Here's a simple "Add to Cart" button. First the Luma/Knockout way:

Luma — Knockout.jshtml
<button data-bind="click: addToCart, attr: { disabled: !inStock() }">
    <span data-bind="text: buttonLabel"></span>
</button>

<script>
define(['ko'], function(ko) {
    return {
        inStock: ko.observable(true),
        buttonLabel: ko.observable('Add to Cart'),
        addToCart: function() { /* logic */ }
    };
});
</script>

And the same thing in Hyvä with Alpine — no separate module, no RequireJS, just the component declared inline:

Hyvä — Alpine.jshtml
<div x-data="{ inStock: true, buttonLabel: 'Add to Cart' }">
    <button @click="addToCart()" :disabled="!inStock">
        <span x-text="buttonLabel"></span>
    </button>
</div>

A sane migration order

  1. Audit your extensions first. Check every third-party module against Hyvä's compatibility registry before you commit to a timeline (more on this below).
  2. Work in staging. Never migrate straight to production; test every page type.
  3. Port templates from Knockout to Alpine, page type by page type.
  4. Rebuild checkout customizations in Alpine, or adopt Hyvä Checkout.
  5. Test every payment gateway with a real test transaction before go-live.
  6. Validate performance on production-like hardware — numbers from a laptop don't count.

08Extension compatibility

This is where migrations succeed or stall. Because Hyvä replaces the front end, any extension that renders storefront UI needs a Hyvä-compatible version — its Luma templates won't just work. Three outcomes for each extension:

  • Native Hyvä support — the vendor ships a Hyvä-ready module. Ideal.
  • A compatibility module — a bridge package (often via the Hyvä compatibility registry or the vendor) adapts the extension. Budget roughly $50–$300 each.
  • No support — you rebuild the front end yourself, or replace the extension.
MagedIn's take This is exactly why we build every MagedIn extension native to Hyvä from day one — not as a Luma module with a compatibility patch bolted on later. If you're standardizing on Hyvä, "native Hyvä" should be a hard requirement when you evaluate any new extension.

09Hosting & the stack that makes it real

Hyvä makes the front end fast, but a slow backend will still make you wait. To actually hit those 90+ Lighthouse scores, the server stack has to keep up. This is the setup we target:

CDN HTTP/2 · HTTP/3 Varnish 7.7 full page cache PHP 8.4-FPM Magento + Hyvä Redis 7.2 / Valkey 8 session + backend cache OpenSearch 3 catalog search MySQL / MariaDB primary database
A performance-first Magento + Hyvä stack. Varnish and a fast cache layer do the heavy lifting the front end can't.

In short: PHP 8.4-FPM with enough workers, Redis 7.2 or Valkey 8 for sessions and backend cache, Varnish 7.7 for full-page caching, OpenSearch 3 for search, a CDN for static assets, and HTTP/2 or HTTP/3 enabled. Get this right and Hyvä's front-end wins actually reach the shopper.

10Common issues & fixes

Styles aren't loading / the store looks unstyled

Usually stale static assets or a wrong theme scope. Clear and redeploy:

terminalbash
bin/magento cache:flush
rm -rf pub/static/frontend/*
bin/magento setup:static-content:deploy

Then confirm the theme is applied at Website scope, not just Store View.

GraphQL errors

Confirm the GraphQL modules are enabled, then re-run setup:

terminalbash
bin/magento module:status | grep GraphQl
bin/magento setup:upgrade

Tailwind CSS won't compile

Almost always a Node version mismatch. Hyvä needs Node 20 or 22 LTS:

terminalbash
node --version        # need v20.x or v22.x
nvm use 20            # switch with nvm if needed
rm -rf node_modules && npm install

An extension renders broken HTML

It doesn't have a Hyvä-compatible front end. Check the Hyvä compatibility registry and install the required compatibility module, or replace the extension.

Checkout fails silently

The usual culprit is the legacy CAPTCHA (Step 6). Disable Magento's default CAPTCHA and install Google reCAPTCHA instead.

11Frequently asked questions

Is the Hyvä theme really free now?
Yes. Since November 10, 2025, the core Hyvä theme is free and open source under OSL-3.0 + AFL-3.0. You still register for a free account to get a Composer key. Premium add-ons (Hyvä UI, Checkout, Commerce, Enterprise) remain paid.
Do I need to go headless or build a PWA to use Hyvä?
No — that's the whole point. Hyvä keeps Magento's native, server-rendered architecture (the same .phtml templates, layout XML, and blocks). You get modern performance without the complexity and cost of a headless/PWA rewrite.
Will my current extensions work with Hyvä?
Extensions that render storefront UI need a Hyvä-compatible version or a compatibility module; backend-only extensions are generally unaffected. Always audit your extension list against the Hyvä compatibility registry before migrating.
How long does a migration from Luma take?
For a mid-market store, plan on roughly 4–8 weeks depending on how many custom templates, checkout customizations, and incompatible extensions you have. A clean, lightly-customized store can be much faster.
Does Hyvä work with Adobe Commerce, not just Open Source?
Yes. Hyvä supports both Magento Open Source and Adobe Commerce on all currently supported 2.4.x lines (2.4.4-p9 and up).
Can I customize Hyvä without losing my work on updates?
Yes — create a child theme (Section 6) that sets Hyvä as its parent, and keep all customizations there. Never edit the default Hyvä theme directly.

Standardizing on Hyvä?

MagedIn builds premium Magento 2 & Adobe Commerce extensions with native Hyvä front ends and open, un-obfuscated code — so you can read every line before it hits production. No Luma-with-a-patch, no encrypted black boxes.

Browse the extensions Talk to us
TS
Founder, MagedIn Technology · Senior Magento Developer (15+ yrs)

Tiago builds premium Magento / Adobe Commerce extensions and writes about doing Magento well — modern front ends, clean code, and the real trade-offs behind the hype.

Subscribe to Blog Updates

Stay updated with our latest blog posts and news.