An extension that works on Luma will often break on Hyvä, because Hyvä does not load RequireJS, Knockout.js or jQuery. We build compatibility modules that replace an extension's frontend with Hyvä templates, ViewModels and Alpine.js — without editing the original vendor code.
Hyvä loads its own templates in place of Luma templates. A compatibility module is a small Magento module that registers itself with Hyvä's compatibility module fallback, so when the extension renders on a Hyvä store, Magento uses our templates instead of the vendor's. Backend logic is untouched; only the frontend is replaced.
Inside the module we remove RequireJS and Knockout dependencies, move data preparation into ViewModels, write the interactive parts as Alpine.js components, and style everything with Tailwind classes that your theme compiles. If you run the CSP-compatible Hyvä theme, we write Alpine components that avoid inline expressions so they work under strict Content Security Policy.
Before building anything we check Hyvä's compatibility tracker and the vendor's own releases. If an official compatibility module already exists, installing it is cheaper than writing a new one.
From a single widget to a full set of modules for a migration project.
We list every module in your store, check Hyvä support and estimate the effort for each one that needs work.
Hyvä templates, ViewModels and Alpine.js components for extensions without official support, packaged as a separate module.
Components written for the Hyvä CSP theme, avoiding unsafe-eval and inline expressions so they work with strict CSP on checkout and beyond.
When the vendor releases a new version, we update the compatibility module and re-test it.
Extensions that hook into checkout are adapted for Hyvä Checkout using Magewire components or for the Luma checkout fallback.
For extension vendors: we build and maintain Hyvä compatibility for your product so Hyvä merchants can buy it.
Take a typical product Q&A extension. On Luma it renders a template containing a data-mage-init attribute, loads a RequireJS module, and uses jQuery to post questions over AJAX and redraw the list. None of that runs on Hyvä.
In the compatibility module we override the extension's template for Hyvä only. Data that the old JavaScript calculated in the browser — the product ID, form key, translated labels and endpoint URL — moves into a ViewModel. The template outputs that data through $escaper and initialises an Alpine.js component that uses the native fetch() API to post the question and update the list reactively. Styling is written with Tailwind utility classes so it inherits your theme.
Because the module is registered with Hyvä's compatibility fallback, Luma store views on the same installation still use the vendor's original templates. The vendor module is untouched and can be updated through Composer as normal.
A good compatibility module is small, readable and survives vendor updates.
Templates use $escaper for output, ViewModels via the view model registry, and Alpine components with clear data and methods.
We test against the vendor version you run and note the supported version range in the module.
Keyboard navigation, focus states and ARIA attributes are part of every component.
No jQuery and no external libraries unless necessary. Scripts are loaded only on pages that need them.
Small modules take a few days; complex ones such as product configurators take longer.
We review the vendor's layout XML, templates, JavaScript and AJAX endpoints to understand what the frontend does.
We decide which parts become ViewModels, which become Alpine components and how data reaches the browser.
Templates, components and styling are built in a separate compatibility module registered with Hyvä.
Functional, accessibility and browser tests, plus a short README with supported versions.
Delivered to your repository or private Composer registry, with optional maintenance for future vendor releases.
List the extensions (vendor and version) that are not working on Hyvä. We will check for official compatibility modules and estimate custom work for the rest.
Within one business day, Mon–Fri
No obligation. We reply within one business day.