Skip to content

Changelog - Hyvä CMS

All notable changes to Hyvä CMS are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

1.2.2 Hyvä CMS - 2026-07-15

This release is a patch update to Hyvä CMS for bug fixes, it includes fixes required for Hyvä Checkout 1.4.0-beta1 and for Hyvä Menu Builder 1.0.2

Added

  • More Magezon page-builder stylesheets in the liveview_clean.xml fallback denylist.

Changed

  • The Magewire fork's cache type is renamed from magewire to hyva_cms_magewire. Previously it merged with Magewire identically-named cache type and both modules overwrote each other's resolver cache entry. Sites scripting bin/magento cache:enable magewire for the CMS should use the new name.

Fixed

  • Liveview ajax content renders now emulate the target store's environment. The request hits from the admin host, so components rendered with the default store's theme, locale and translations — issue was spotted in the menu builder's mobile menu showing the default Magento logo in the preview. Thanks to Matt Powell (Digital Studio NW) for reporting this.
  • Liveview editor failing with "No component resolver complies for block liveview-composer" when Magewire v3 is installed (e.g. by Hyvä Checkout 1.4.0-beta1). The Magewire fork submodule now marks its blocks with a cms_magewire layout argument instead of magewire, so Magewire v3 no longer claims and breaks them. The fork's exception block also renders its own Hyva_CmsMagewire::component/exception.phtml instead of referencing the upstream Magewire module. Thanks to Stuart Otter (Aware Digital) for reporting.
  • "Generate Tailwind styles on edit" losing styles with the v4 in-browser compiler. Single-field edits fed only the edited component to the JIT compile and relied on re-scanning the existing compiled CSS to keep the other components' classes — a trick only the v3 compiler's extractor supports, so v4 dropped the edited component's CSS Classes and everyone else's on each keystroke. The JIT compile now receives the full current field tree, matching the save/publish path. Requires the coordinated commerce-module-cms-tailwind-jit-bridge update for the v4 live-on-edit path.
  • Daemon-compiled Hyvä CMS Tailwind CSS overriding the theme's utilities (e.g. a CMS w-[377px] beating the theme's w-full). The hyva-cms-tailwind cascade layer is now declared at the top of <head>, before the theme stylesheet, in every compilation mode — pinning it to the lowest priority so styles.css wins consistently. Previously only in-browser compilation got this, via a jit-bridge plugin that has been removed in a companion change.
  • Static content deploy crashing with JS minification enabled — Magento's JShrink minifier dies on the pre-minified Monaco editor bundle (RuntimeException: Unclosed string). Monaco and the other bundled vendor libraries are now listed in dev/js/minify_exclude / dev/css/minify_exclude, the same way core excludes TinyMCE. Monaco also loads its chunks and CSS by their original file names, so the exclusion doubles as a fix for 404s once minification renames assets to .min. Note that Hyvä recommends leaving Magento's built-in minification off — this is a safeguard for sites that enable it anyway. Thanks to Pieter Hoste (Baldwin) for reporting and contributing the fix.
  • Liveview editor link handler prefix select now displays the selected value. Thanks to Luuk Meijer (Emico) for the contribution.

1.2.1 Hyvä CMS - 2026-07-15

This release is a patch update to Hyvä CMS for bug fixes, primarily to ease the upgrade from 1.1.x to 1.2.x.

Changed

  • Batch category and product link URL resolution at render — a Hyvä CMS entity with many links now issues one collection query per type instead of one per link. URLs resolve in the current store context, so they stay correct per store view. Many thanks to Ole Schäfer (CustomGento) and Luke Rodgers (Gene) for reporting!

Fixed

  • Fixed all bin/magento commands failing with Cannot instantiate interface Hyva\CmsInstanceComponents\Api\InstanceComponentRepositoryInterface when the new CMS modules were not yet enabled — which blocked the very commands needed to enable them (setup:upgrade, module:enable). Console command dependencies and the instance component collector are now lazy proxies, so the CLI stays usable mid-upgrade. Many thanks to Julian Nuß (integer_net) for diagnosing this and contributing the fix!
  • Give CMS Logger constructor defaults so broken DI can't break the site with a 500. Was occuring periodically on CI builds.

1.2.0 Hyvä CMS - 2026-06-30

This release is a major update to Hyvä CMS, with many new features and improvements. Highlights include, Product Attribute support, template and snippet support, Tailwind V4 support, improved import/export functionality, UX improvements and lots more.

Added

  • Import/Export now exports Templates and Snippets, and exposes a documented extension point (ContentTypeHandlerInterface + HandlerPool) so any module can register its own content type. Handlers live in the module that owns the content type — see src/cms-import-export/README.md. As a worked example, Hyva_MenuBuilder registers a menu handler.
  • Auto attributes for Hyvä CMS components: Editor integration attributes are now injected automatically into the first HTML element of each component's output. This includes data-liveview-element, id (when a block ID is set), and the attributes from getEditorAttrs(). Most component templates no longer need to add these manually on the root element. To take full manual control (e.g. for layouts with multiple root elements), set $block->setData('auto_attributes', false) in your template and add the required attributes yourself.
  • Tailwind V4 support
  • Attribute support (products, categories)
  • Favorite components
  • User settings database storage
  • Default component classes
  • Ability to scroll to element from editor to preview
  • Monaco editor
  • Bridge utility for communication between editor and preview iframe
  • Component preview text (auto-generated, configurable in editor preferences). When enabled, preview text is generated from available content in text, textarea, richtext, link, and category_selector fields.
  • Context menu in preview
  • Added {entityType}_liveview_editor layout handle to the Liveview editor for custom entity types. Allows for custom layout updates for specific entity types.
  • New Hyvä CMS specific logo
  • Allow sidebar position to be changed (left, right, re-size)
  • Tabs (recent pages, blocks, etc...)
  • Improved import/export functionality
  • Tiptap editor (+ better feature-set for richtext editing)
  • Added 2 extra directives for Tiptap editor: {{hyva_image}} and {{hyva_link}}
  • Resize single panel
  • Icon support for instance components (emoji)
  • Ability to add new variants to existing components
  • Component toolbar search
  • Allow button label and image alt texts to be translated
  • Extra options for undo/redo in revision history (rollback, go back to earliest undo, go forward to latest redo)
  • Keybindings (publish, save draft, open search, open component library, open navigator, open version history, open preferences)
  • Extra buttons for components list empty state (add a component, browse templates)
  • First time user experience for new entities (page, block, etc...)
  • Bridge for events (closing open dropdowns)
  • Editor extension point: feature modules can push context flags onto Alpine.store('global').disallowedRootComponentContextFlags to hide flagged components from the "Add a Component" picker. Pairs with the existing allowedRootComponentContextFlags whitelist.
  • View published page button
  • Fetch priority high option to loading strategy of banner, card, testimonial, usp, and image components. Many thanks to Luke Rodgers (Gene) for the contribution!
  • Store & Custom Variables — curated, searchable list of allow-listed store variables ({{config path="…"}}) and admin-defined custom variables ({{customVar code="…"}}), sourced from Magento's own variable system.
  • Custom Directive — builders for {{var …}}, {{trans "…"}}, and {{store url="…"}} with live preview.
  • Duplicate component button
  • New preset field type: a visual picker that applies multiple field values in one click. Options declare a fields map; selection is stateless and derived from the component's current values, so it deselects automatically when fields are customised. With config.preview: "grid" thumbnails are auto-drawn as mini grids from the preset's own values. Applied via a new batched updateFields Magewire method (single round trip).
  • Layout presets on the Grid / Columns component: pick from 9 visual layouts (1–4 columns, larger first/last, featured center, header + columns) that fill in the responsive column, style, and full-size-column fields as a starting point.
  • Slider loop option: Added a "Loop" toggle to the Slider component design settings. When enabled it passes the loop modifier to x-snap-slider, so navigation wraps from the last slide back to the first (and vice versa). Supported by both the Default and Basic slider variants.
  • Snap Slider plugin updated to v2.2.2: Adds loop support, index-based slide navigation with an isNavigating guard to prevent scroll conflicts, scrollend/fallback scroll events for reliable navigation state, smarter mutation observer watching style attribute changes on the subtree, hidden slides excluded from the slide list, pager gains the inert attribute when there is no overflow, and ArrowUp/ArrowDown keyboard shortcuts added alongside ArrowLeft/ArrowRight for pager navigation.
  • HTML Dialog plugin updated to v2.3.0: Adds modeless modifier support, which opens the dialog as a non-blocking modeless dialog using el.show() instead of el.showModal().
  • Media Gallery API composer requirement for better image handling
  • Card component now translatable
  • Implement Media Optimization XML resizing declarations

Changed

  • Nesting depth is now per-component. A component can declare its own max_nesting_level in its children config, which restarts the depth count for its subtree; a component that declares none inherits its parent's remaining budget.
  • Editor preferences now saved to user instead of local storage
  • Key enter in component name input now saves the name
  • Component panel now has sticky header
  • Editor preferences UI
  • HTML field editor now uses Monaco editor
  • Component sidebar now feels more fluid and less glitchy
  • Scheduled update banner now has a gradient background
  • Better fixed positions (more app like feeling)
  • Moved navigator to tabs bar
  • Improve Banner titles with automatic hyphenation
  • More improvements to initial page load (optimise looping in components.phtml)
  • Variants now show as radio buttons instead of a select box (with an icon)
  • Component sidebar design improvements
  • Renamed layout handles from default.xml to hyva_default.xml
  • UX for translations slide-over
  • Product handler UX
  • Navigator UX improvements
  • Must select attribute to enable during setup
  • Allow installation on PHP 8.5 & Magento 2.4.9 by raising the upper bound to <8.6.
  • Allow installation with symfony/http-foundation v8 by raising the version constraint to ^5.0 || ^6.0 || ^7.0 || ^8.0.
  • Tailwind JIT compilation server-side: magento2-cms-tailwind-compiler replaces the in-browser JIT; output is wrapped in .hcms-{type}-{id} for scoping. Breaking change for custom ProviderInterface impls — getScopeSelector() is now required, getTailwindClassPrefix() is deprecated. New scoping method fixes issue where TW class names from the phtml templates were being overridden with prefixed class names. In addition, the new tailwind compiler lets you choose which method to use for JIT compilation (browser or server).
  • Hide the "Generate Hyvä Styles" toggle on the Magento cms_page_form and cms_block_form when the Hyvä editor is enabled for that entity — the new server-side JIT compilation mechanism no longer shares its setting with the entity it extends, so the legacy toggle duplicates the one inside the editor and was confusing.
  • Previews for devices are now scale-to-fit with true-resolution so on a tabled device you can preview a large desktop layout instead of collapsing to mobile.
  • Moved preview settings (device sizes, split-view width) out of Stores > Configuration into a per-user Preview tab in Editor Preferences, persisted under one preview_preferences object. The in-canvas split divider orientation is now a per-user preference, defaults to side-by-side, and can be overridden on a per-page/entity basis. Breaking change (low impact): the released hyva_cms/preview admin fields — Mobile/Tablet Preview Width and Split View Minimum Width — are removed. Values set there stop applying after upgrade and preview sizing falls back to per-user defaults. Editor-only (no storefront impact); the getMobileWidth()/getTabletWidth() PHP API is retained. The defaults each user starts from are seeded from config.xml (hyva_cms/preview/devices and hyva_cms/preview/split_view_fixed_width), so integrators can set system-wide preview defaults there.
  • Drag and drop now supports moving components between containers
  • Images will load by ID if available, otherwise fallback to src. Media Gallery API is used to resolve the image ID from the src.

Fixed

  • Component definitions are now looked up once per request instead of being re-decoded on every component render, which noticeably speeds up pages with large component trees (e.g. big menus). Many thanks to Ole Schäfer (CustomGento) for reporting!
  • Import/Export no longer offers CMS pages/blocks that have no Hyvä CMS content for export (filtered from the picker and rejected server-side).
  • Overflow issue in component handler
  • Cast page identifier to string when getting page URL. Many thanks to Kieran Monaghan for the contribution!
  • Fixed column style calculation and direction in Grid / Columns Component. Note: This corrects a logic error where styles were applied in reverse. Existing implementations should be reviewed to ensure correct display.
  • Apply CSS classes from Advanced tab on menu_list_item
  • Image handler grid
  • Image handler alt value stops updating back to default value
  • Dialog padding issue
  • Empty preview: added event listener to document instead of element
  • Inline translations button z-index issue
  • Panel single: submit button type issue (user_defined_name)
  • Issue with older PHP/Magento version (switched to type casting for better compatibility)
  • Added missing Hyvä CSP script registration in CMS frontend templates
  • Duplicate product calls for frontend products
  • Load less products in product handler
  • Fix favourites components dropdown to filter by allowedRootComponentContextFlags
  • Fix drag-and-drop reorder not updating preview on first drag. Opening a component's panel populated the findComponentByUid cache with references from an independently parsed object tree. Subsequent sorting lookups received these stale references instead of walking the live content tree, so child reorder assignments never reached the data that gets serialized and sent to the server. Cache is now invalidated before sorting lookups and after every this.fields reassignment; component panel lookups no longer populate the shared cache. Reproduced on the mobile_menu component but affected any component whose panel was opened before reordering its children.
  • Issue where attribute needs pagebuilder content stored to be visible.
  • Prevent TypeError on "Save & Duplicate" for CMS Pages/Blocks that have no draft content yet. Many thanks to Finn Reinhardt (Basecom) for the contribution!
  • Liveview editor: register CspPolicyCollector as a proxy in CompositePolicyCollector to prevent eager collector instantiation during CLI bootstrap (e.g. events:generate:module), while preserving CSP policy collection for HTTP requests. Many thanks to Daniel Delgado (Hiberius) for the contribution!
  • Rewrite contentId and uid on duplicated CMS page/block content, so that the duplicated page/block can be scheduled in the same release as the original page/block.
  • Variant will pre-select the default variant if no variant is selected
  • Full migration column issue when migrating from Magento PageBuilder to Hyvä CMS. Many thanks to Ashish Viradiya (Evrig) for flagging this issue.
  • Grid / Columns: the earlier column style direction fix missed the base (mobile) breakpoint — start/end were still applied in reverse there. Now consistent with tablet and desktop.
  • window.liveview.fields went stale after every Magewire round trip: the @magewire:update handler reassigns this.fields from the dataset but didn't re-sync the global (all other reassignment paths do). Anything reading window.liveview.fields after a wire update (e.g. preset selection state, inline translations lookups) saw an orphaned content tree.
  • "Undefined array key" warning rendering image elements (card, banner, cta, usp, testimonial, image) with no alt text — surfaced as a 500 on the editor preview when adding a Card. Image attributes are now read defensively; width/height are omitted when unset rather than rendered empty.
  • Liveview editor now surfaces preview update failures instead of swallowing them: a server error logs the response body to the console and shows the user a message pointing them at the console and their admin. A stale request hash (404) still refreshes silently as before.
  • Widget edit dialog no longer double-decodes the widget directive. URLSearchParams.get() already percent-decodes, so the extra decodeURIComponent threw URIError and broke the dialog whenever a widget option held a literal % (e.g. 50% off). Many thanks to Arnoud Beekman (X-Interactive) for the contribution!
  • 404 cms page now working in preview

Removed

  • Text class toggle
  • Prism HTML editor
  • Html field editor input (not needed anymore as HTML editor sends directly to wire)
  • Hyvä Commerce logo
  • Quill editor
  • Cut individual component button

1.0.1 Hyvä CMS AI Translations - 2026-06-30

Fixed

  • Fixed PHPCS code style issues

1.0.0 Hyvä CMS Google Maps - 2026-06-30

Added

  • Google Maps Component for Hyvä CMS

1.2.0-beta2 Hyvä CMS - 2026-05-28

The 1.2.0-beta2 release for Hyvä CMS introduces no new features. This release is to bring the beta version in line with Hyvä CMS version 1.1.2 which is primarily to support PHP 8.5 and Magento 2.4.9. It includes minor bug fixes for Hyvä CMS.

1.1.2 Hyvä CMS - 2026-05-26

Changed

  • Allow installation on PHP 8.5 & Magento 2.4.9 by removing the upper bound.
  • Renamed layout handles from default.xml to hyva_default.xml. Many thanks to Louis McHugh for the contribution!

Fixed

  • Liveview editor: added liveview_clean layout fallback so non-allowed assets (e.g. require.js) are still removed when plugins on Page\Config\Structure are not applied (e.g. Magento patch ACSD-66153 bypasses DI). Many thanks to Tatiana Velichko (Monsoon Consulting) and Mykyta Denysenkov (Monsoon Consulting) for the contribution!
  • Moved the admin asset allowlist plugin from Page\Config\Structure::getAssets() to Page\Config::getAssetCollection(). The previous hook was silently skipped when patch ACSD-66153 instantiated Structure directly (bypassing DI), letting RequireJS and the adminhtml styles.css leak onto the editor page and break the Quill / Livewire / Magewire UMD bundles. The new hook is the renderer-facing API, so the filter always fires regardless of how Structure was constructed. Favicon identifiers (icon, shortcut-icon) were also added to the allowlist so the admin favicon renders on the editor.
  • Scheduling: allow re-adding cancelled entity to same release
  • Change scheduling content column to mediumtext for large pages. Many thanks to Alberto Gatto for the report!
  • Prevent TypeError on "Save & Duplicate" for CMS Pages/Blocks that have no draft content yet. Many thanks to Finn Reinhardt (Basecom), Tatiana Velichko (Monsoon Consulting) and Mykyta Denysenkov (Monsoon Consulting) for the contribution!
  • Reinitialize sortable after paste refresh to fix sort issues after pasting components. Many thanks to Jeroen Alewijns (IO) for the report!
  • Rewrite contentId and uid on duplicated CMS page/block content, so that the duplicated page/block can be scheduled in the same release as the original page/block. Many thanks to Edwin Bos (Cream) for the report!
  • CMS Page/Block providers: coerce store_id to an array before reading from it, so the Liveview Editor opens cleanly on Magento 2.4.6-p15 (the patch changed getData('store_id') to return a scalar in some paths, which broke reset()). Many thanks to Irina Smidt (CustomGento) for the report.
  • Fix duplicate SQL queries when loading CMS pages / blocks on the storefront: CMS plugins now load Liveview records via CmsPageProvider / CmsBlockProvider instead of calling Hyvä PageRepository / BlockRepository directly. getByCmsPageId() runs a fresh getList() query every time; the providers cache by entity ID for the request. Many thanks to Luke Rodgers (Gene) for the contribution!
  • Register CspPolicyCollector as a proxy in CompositePolicyCollector to prevent eager collector instantiation during CLI bootstrap (e.g. events:generate:module on Adobe Commerce Cloud), while preserving CSP policy collection for HTTP requests. Many thanks to Daniel Delgado (Hiberius) for the contribution!
  • Fixed an issue where opening the liveview editor for a new CMS block on Magento 2.4.9 left the preview iframe without the Hyvä JavaScript helpers, so users could not add components to a new block.

1.2.0-beta1 Hyvä CMS - 2026-02-27

The 1.2.0-beta1 release for Hyvä CMS introduces support for Attribute and Tailwind v4 support for Hyvä CMS.

Added

  • Tailwind V4 support
  • Attribute support (products, categories)

Fixed

  • Liveview editor: added liveview_clean layout fallback so non-allowed assets (e.g. require.js) are still removed when plugins on Page\Config\Structure are not applied (e.g. Magento patch ACSD-66153 bypasses DI). Many thanks to Tatiana Velichko (Monsoon Consulting) and Mykyta Denysenkov (Monsoon Consulting) for the contribution!
  • Cast page identifier to string when getting page URL. Many thanks to Kieran Monaghan for the contribution!
  • Fixed column style calculation and direction in Grid / Columns Component. Note: This corrects a logic error where styles were applied in reverse. Existing implementations should be reviewed to ensure correct display.
  • Apply CSS classes from Advanced tab on menu_list_item
  • Image handler grid

1.1.1 Hyvä CMS - 2026-02-16

Added

  • Add console commands to show information about CMS components and fields. These commands help document the components and fields available in Hyvä CMS at the project level, both core and custom, and are useful when creating new components and fields with AI assistants, skills, and other tooling.
    • hyva:cms:describe-components CLI command – Describes enabled CMS components with name, label, description, and category. Supports --format=json for full config output and an optional component name filter.
    • hyva:cms:list-fields CLI command – Lists Hyvä CMS field types (core and custom). Supports --format=json for full config output and an optional field name filter.
    • hyva:cms:list-disabled-components CLI command – Lists disabled CMS components.

Fixed

  • Fix component validation to allow disabled components to validate for backward compatibility with existing content.
  • Fix undefined $hyvaCsp on Luma storefront
  • Use Magento_Backend::content for liveview editor ACL resource to resolve issues gitlab issue #20 with ACL configuration.
  • Fix Firefox liveview preview error on initial about:blank load

1.1.0 Hyvä CMS - 2026-02-03

Added

  • REST and GraphQL endpoints for Hyvä CMS Page and Block.
  • Hyvä CMS translations (with AI).
  • Container class to TW safelist. This will reduce issue people experience when using the liveview editor and not having configured tailwind.browser-jit-config.js`.
  • Add context_flags to the JSON schema for use in various contexts, e.g. restricting root components for specific entities.
  • Restrict root components for entities which pass the allowed_root_component_context_flags property when emitting the init-content-properties event.
  • Support componentPath=false for explicit template usage When componentPath is set to false, the Element block will now call the parent::getTemplate() method. This enables blocks to be created via createBlock with an explicit template set via setTemplate(), allowing components to render child components or sections of their markup with custom templates set in the component template. e.g. <?= $block->getLayout()->createBlock(\Hyva\CmsLiveviewEditor\Block\Element::class,'',['data' => [...]])->setTemplate('Vendor_Module::elements/custom-template.phtml')->toHtml() ?>
  • Added layout blocks for injecting scripts in liveview preview mode:
    • Added after-body-start block for early script injection
    • Added additional-scripts-preview block for conditional script loading
    • Both blocks only render child HTML when in valid preview context
  • Add support for wbr tag to richtext
  • Add split view for preview mode.
  • Restore last view used in the liveview editor by entity reference when loading the liveview editor.
  • Add New Marquee Component
  • Category Field to select multiple category IDs for a Hyva CMS Component. (thanks Antoni Tormo - Onestic for the contribution)
  • Widget icon for component.
  • Add New Card Component, with two styles
  • Added new field type Url
  • Add New Embed Component for Videos
  • Added support for max_nesting_level configuration in component definitions. When configured, children containers and related UI elements beyond the specified nesting depth are automatically hidden via CSS rules.
  • Added include_child_category_products attribute to product_slider component (thanks Alex Berger for the contribution)
  • Button to remove all categories and products from field values.
  • Options to create new pages, blocks from the Hyvä CMS Editor Navigator.
  • Added aria-label to visibility toggle button.

Changed

  • Updated README.md to link to the Hyvä Commerce CMS documentation to avoid repetition and for consistency.
  • Text Class added to component now added in PHP via addField method instead of in JavaScript.
  • saveState is used less frequently by combining the action with the content update.
  • Skip preview update if we're only saving state.
  • Sidebar styling improvements (add component button stays in place when scrolling + component tree gradient shadows)
  • Give more space to the component list dialog on smaller screens.
  • Pagebuilder migration now no longer experimental and does not require toggle in editor preferences.
  • Update link-handler to show category path.
  • Use Hyvä Default Theme Slider as the template for the Product Slider, to use the same style between Themes.
  • Applied display: contents to Hyvä CMS liveview wrapper divs so they can be removed from the store-front while kept in the Editor preview without affecting layout on either, ensuring that the preview matches the actual store-front result. This results in less nesting and markup added to the store-front when using Hyvä CMS, with performance improvements from reduced DOM complexity.
    • BREAKING-CHANGE: severity level low:
      Frontend customisations that rely on the Hyvä CMS liveview wrapper divs (e.g., CSS or JavaScript targeting these divs, or using them for child layout) may break. Most users are unaffected. To restore the previous behaviour, enable legacy liveview-content wrapper divs in Stores → Settings → Configuration → Hyvä Themes → Hyvä CMS → Advanced.
  • Refactoring of repository classes:
    • Replace date() calls with DateTime dependency injection
    • Add PHPDoc blocks to resolve linting errors
    • Refactor delete methods with improved type annotations
    • Affects Block, Page, Scheduled repositories.
  • Component edit panels are now loaded when required, rather than pre-loaded when the liveview editor is initialized or when Magewire updates. This significantly improves performance by reducing the LiveView Composer response payload and ensuring only the required panels are rendered in the DOM.
    • BREAKING-CHANGE: severity level low:
      Custom field type templates that read validation state from the Magewire component (e.g. $magewire->errors[$uid][$fieldName]) will no longer show validation errors in the editor panel. Field type templates are now always rendered by the panel block, so the Magewire component is not in scope when panels are loaded on demand. Migration: Read validation state from the block instead: $hasError = $block->getData('hasError'); and $errorMessage = (string) ($block->getData('errorMessage') ?? '');. Remove the use Hyva\CmsLiveviewEditor\Magewire\LiveviewComposer; statement and the @var LiveviewComposer $magewire annotation from your custom field type template if they are only used for errors. See Creating custom component field types for the current pattern.
  • Open panel automatically when adding a new component when enabled in preferences (to work with updated panels)

Fixed

  • Prevent time_scheduled column from auto-updating on record update. Depending on MySQL/MariaDB version, it may auto-apply ON UPDATE CURRENT_TIMESTAMP to the first TIMESTAMP column even when on_update="false" is set. Setting the column to its current value prevents this auto-update behaviour per MySQL documentation.
  • Component visibility for nested components which use a parent's template.
  • Corrected duplicate detection in CMS observers so Hyvä CMS content is copied when duplicating pages/blocks, i.e. "Save & Duplicate".
  • Fixed default text and heading styles from effecting the other CMS blocks
  • Accordion from not closing other items when opening one.
  • Fix type error when accessing scheduling editor with Tailwind JIT disabled
  • Fixed show_if property to handle null values correctly.
  • Fix JIT style sheets to load before closing head tag.
  • Scheduling so it automatically saves the content before scheduling.
  • Scheduling of CMS blocks bug where it was not possible to update a blocks is_active setting when scheduling it for release.
  • Overflow issue in widget field type when using long option values.
  • Cut off tooltips in version history list and sidebar component list.
  • Open dropdowns in component list after adding components.
  • Fixed comment wrapping in field type boolean
  • Fixed reverse option in Banner split variant
  • Fixed searchable select field type to handle duplicate option values.
  • HTML editor text position not matching preview position (thanks to Nichita Blanari for the help of testing and detailed reporting)
  • Suppress known Alpine.js errors in preview mode.

Removed

  • Remove symfony/http-foundation dependency. To avoid errors from transitive dependency on new magento installs. The http-foundation was only used to check two HTTP constants for Livewire.php, to reduce the number of dependencies and avoid conflicts with other versions of the library, these two constants were added directly to the Livewire.php file.

1.0.0 Hyvä CMS AI Translations - 2026-02-03

Added

  • Added: ability to use AI for Hyvä CMS Translations

1.0.2 Hyvä CMS - 2025-11-11

Added

  • Integration tests for VersionHistoryManager
  • Link to image component
  • Add toggle for adding prose class by default
  • Section for editor settings in stores configuration
  • blockListSize parameter in CmsBlocks source model to protect against performance issues
  • Navigator for CMS pages/blocks
  • Editor preference for "Confirm Before Publishing" - opt-in confirmation modal when publishing changes
  • Search in component selector
  • Larger editing modal for richtext field
  • Allow components to be excluded in children > config > excludes (see slider component)
  • Conditional visibility rules for fields in the Liveview editor
  • Added datetime field type
  • Automatic strict CSP frame-ancestors header for multi-domain setups (configurable setting, enabled by default)
    • Note: Previously these CSP policies required manual configuration in csp_whitelist.xml and enabling strict CSP mode. This is no longer required and may be removed once the hyva_cms/general/auto_csp_frame_policies configuration is enabled.
    • Note: If you have built a custom integration extending Hyvä CMS for another custom content type, to support Automatic CSP Frame Policies on additional routes which include the Hyvä CMS preview, you must add the routes as an argument to Hyva\CmsLiveviewEditor\Model\Security\IsValidAdminPreviewRequest passed via dependency injection, i.e. etc/adminhtml/di.xml.
    • For more information, see the documentation.

Changed

  • Improved template override logic for components overridden in hyva_cms/components.json to prefer JSON defined template paths and falling back to the stored paths. Includes support for variant and legacy templates.
  • Update Alpine Dialog to v2.2.1
  • Bump hyva-themes/magento2-cms-tailwind-jit version dependency to ^1.2.4 to ensure Tailwind JIT iframe receives CSP frame-ancestors header when previewing version history by appending parent window editor_view hash parameters. Required for 'Automatic strict CSP frame-ancestors header for multi-domain setups' feature adding in this release.
  • Better-looking sidebar (ellipsis / animate)
  • Building CMS page URLs from identifier, avoiding an extra trailing slash
  • Replaced rakit/validation with magewirephp/validation, a fork to support PHP 8.4
  • Added support for Hyvä 1.4 and Tailwind 4
  • Updated Hyvä theme detection to support >=1.4.0 and older versions, supporting both service class check and legacy theme inheritance checks
  • Editor preferences declared using XML
  • Component selector built with AlpineJS instead of PHP
  • Component selector bypassed if there's only 1 available component
  • Optimised richtext file
  • Refactored JavaScript template organization and moved to page/js/utils directory for better maintainability and reusability, specifically with admin dashboard widgets which require date formatting functionality.
  • Enabled Page Builder migration tool by default for new installations. Can be disabled in the stores configuration or editor preferences.
  • Added better Tailwind 4 support.
  • Image sizes for components with fixed size images. Without this change, images are only scaled down by the browser, but loaded in full size. The image type (second param of getResponsiveImageData) isn't implemented yet and has no effect. Effected components: usp/card, usp/icon, usp/compact, testimonial/card, testimonial/simple.

Fixed

  • Fixed USP icon image compression when text content is long.
  • Fixed local time formatting for version history
  • Broken CMS pages in link handler dropdown
  • Link handler dropdown width being too small
  • Prevent panel closure via Escape key while a modal is open.
  • Add missing > entity decoding in JitCssProcessor to properly handle escaped greater-than symbols in Tailwind CSS classes
  • Fixed infinite loop in Tailwind CSS prepending when previewing version history with Hyva CMS disabled and existing PageBuilder content
  • JSON Schema validity check for version-history
  • Stop deleting siblings children when child is cut from component sidebar
  • Sync issues between component tree Magewire and Alpine (switch Alpine usage to vanilla JS)
  • Missing semicolons from Alpine attribute field for colorpicker
  • Optimised findComponentByUid to use utility which also caches
  • Redirection to dashboard from Liveview editor when content does not exist
  • Fix initial skip for CSP content updates to consider non-empty content
  • Fix previewUrl for configured home page path so that cms_index_index layout handle is applied
  • Fixed cache invalidation for CMS blocks in admin editor. Newly created or deleted CMS blocks now appear/disappear immediately in the editor CMS block's component dropdown without requiring manual cache refresh.
  • Quill link overflow issue
  • Overflow dialog overflow issue
  • Fix drag-and-drop with object-based children. Handle children stored as objects in component search and convert to array when updating.

Removed

  • Default values in the banner templates
  • Shadow effect removed when clicking on component (only shown when dragging)

1.0.1 Hyvä CMS - 2025-08-26

Added

  • Page Builder migration tool

Changed

  • Updated package.json with scoped name and correct main file so that it can be imported more easily when customizing the Liveview editor css from another module. Many thanks to Antoni Tormo (onestic) for the contribution!
  • Updated design for version history.
  • Header for image handler.
  • Menu string/icon/position changes.

Fixed

  • Form key check for Liveview editor when using custom admin URL.
  • Ensure unique block name for CMS page Liveview editor to prevent ID conflicts on some environments (likely due to installed modules).
  • Fixed preview query for content AJAX endpoint on new content creation.
  • Move CMS block and page plugin declaration from global etc/di.xml to etc/frontend/di.xml to prevent area code errors during setup:upgrade when B2B AddAccessViolationPageAndAssignB2CCustomers data patch is being applied.
  • Fixed 404 redirection on invalid emptypreview & pagepreview requests.
  • Fixed issue with theme selection on CMS page core settings.
  • Corrected validation rules for CMS page core settings.
  • Preserve existing links when reopening rich text editor.
  • Fix missing class option in Banner.
  • Deleted products/cms/categories will no longer give error on update.

1.0.0 Hyvä CMS - 2025-07-11

Added

  • Image lazy loading field for 'Testimonial' and 'USP' components
  • Translation CSV file
  • Support for default LucideIcons included in magento2-theme-module:1.3.15 module
  • Fallback system for icons (it will fallback to magento2-theme-module icons if not found in the module)
  • Support for media optimisation (Hyvä Commerce)
  • Lazy loading field added to Testimonials and USP components as missing and deemed important for performance
  • Whitelist functionality for fields not mapped in components.json (e.g. user_defined_name)
  • Heading tag selection for Slider component
  • Improvements for CMS Blocks store switcher

Changed

  • All image output (for 'Image', 'Banner', 'Testimonial' and 'USP' components) now uses the \Hyva\Theme\ViewModel\Media::getResponsivePictureHtml() method added in the Hyvä Theme 1.3.15 release
    • This provides the base for future integration for the Hyvä Commerce Media Optimisation functionality, without requiring a hard dependency
    • \Hyva\CmsLiveviewEditor\Block\Element::processImage() method has been deprecated as part of this implementation as is no longer required
    • The previously deprecated 'CTA' and 'Banner (basic)' templates have not been updated and still use the above deprecated method
  • Changed Link Button variant none to as link to be consistent with the Banner CTA styles
  • Moved icons to the Hyva_CmsLiveviewEditor::svg/lucide directory.
  • Refactoring and method additions made to the \Hyva\CmsLiveviewEditor\Block\Element class to provide support
  • Slideouts now full height (page settings / components edit)
  • Refactored store switching logic in liveview editor controllers to be more reliable. This was working previously but not on all environments.

Fixed

  • Issue where 3rd party modules that inject incompatible scripts via default.xml layout handle (e.g., RequireJS) were breaking the liveview editor. e.g. Mageplaza_Core::js/help.js
  • Filter page assets added to the head section in liveview editor.
  • Add custom liveview-empty.xml page_layout to prevent 3rd party modules adding assets to the body section. This is a backward-compatibility breaking change. If you have customized the Hyva CMS Editor admin page and added assets via the liveview_editor_index.xml layout handle, you must whitelist those assets in the PageConfigStructurePlugin's allowedAssets array via di.xml. See liveview-editor/etc/adminhtml/di.xmlq for an example.
  • The 'Link' field now uses URL rewrites for product and category links, resolving issues with 404s where URL suffixes or custom URL rewrites were added
  • Removed translatable strings from the Height source model as numeric values and '0' value causes bin/magento i18n:collect-phrases to error
  • Fix duplicate block ID error for CMS Block component (affected certain environments only)
  • Issue of full Varnish cache flush when publishing CMS content by replacing direct fullPageCache->clean($tags) calls with clean_cache_by_tags event dispatch, avoiding adminhtml_cache_refresh_type trigger down the stack.
  • Issue where the content state was not set correctly when a new page was created from the editor without any content added.
  • Fix preview interactivity after restoring version history item.
  • CTA component and old Banner template ignored as have been deprecated
  • Type errors in Element.php
  • Select All now selects top level items
  • Text truncation in store switcher
  • Fix handle missing form_key in iframe version preview requests for TW JIT Content update

Removed

  • Redundant cache handling logic from Hyva\CmsMagento\Model\CoreSettings\Block as it is handled in the repository save method.
  • Removed duplicated icons stored in the Hyva_CmsLiveviewEditor::svg/lucide directory.

0.6.0 Hyvä CMS - 2025-06-26

Added

  • Added Tailwind safelist to tailwind.config.js and updated JIT compiler to remove safelist classes from generated stylesheets. i.e. removes the prose class from the generated stylesheets as it include a lot of style rules which already exist in most themes.
  • Support for PHP 8.4 For more information, please refer to merge request #182.
  • A unique liveview_preview key per version history item This is backward-compatibility breaking change.
    Projects that have extended Hyvä CMS for custom content types must update their Hyva\CmsLiveviewEditor\Api\ProviderInterface implementations to be compatible with this version.
  • A signout dialog which is shown when admin session ends, the session checks are by session_lifetime timeout or invalid request responses.
  • Additional checks to the content generation controller for additional validation of the request.
  • renderBlockId utility class in Element.php
  • "require_parent" option in components to hide from full list, this can be show if a parent passes it in "accepts"
  • Image dimensions to the image component.
  • Added info message in settings slideout to clarify that saving content settings updates both the draft preview and the enabled storefront block/page.
  • Cache for components list hyva_cms
    • Patch implemented to enable on production/default mode (disabled on developer)
    • Caches all collected components (components.json)
  • Tooltip utility class to ensure tooltip starts from other side
  • Re-added generate urls command
  • Batching Url requests (UrlBatchProcessor)

Changed

  • Formatting of changelog to match the Hyvä documentation, i.e. use * instead of - for bullet points.
  • Moved component template variants from JSON to PHP source models for better plugin extension support.
  • Updated components
    • Columns (text + bg color)
    • Html (classes + block id)
    • Slider (default block id + multiple instances)
    • Product slider (classes)
    • Testimonial (block id)
    • Cta (heading/paragraph colors + loading to advanced)
    • Cms block (remove bg color)
    • Banner (alignment, remove color, add heading/subtitle color, remove default typography)
    • Text (block id + classes)
    • Spacer (block id change + classes)
  • Changed how children fields are declared in the components.json file. Children fields must now be declared at the root level of the component declaration instead of within the content section. This enforces the logical hierarchy and prevents UI issues. This is a backward-compatibility breaking change. Projects with custom components using children fields must update them to follow the new schema. See upgrade documentation for migration assistance.
  • Moved page/block settings tab to slideout (seperated from main)
  • Updated UX (focus states for header buttons)
  • Refactor preview url params to use liveview_preview instead of both key & is_liveview_preview
  • Changed default value of heading component to h2 from h1.
  • Introduced a Call to Action (CTA) component as a variant of the banner
    • Includes both Split and Text layout options
  • Added configurable text and content alignment options for banner elements.
  • Enhanced banner functionality to support Button components, with a fallback to standard link behavior.
  • Refactored JIT CSS classes. This is backward-compatibility breaking change. Projects that have extended Hyvä CMS for custom content types and which support Tailwind JIT must update their implementations to use Hyva\CmsLiveviewEditor\Model\Tailwind.
  • Uses native checkbox as switch/boolean toggle instead of a button
  • Replaces JS accordion in Page/Block settings for Native HTML Details Accordion
  • UX improvements, related to A11Y, including more consistency in button styles
  • Component Panel close button icon, to avoid having two x icons close to each other
  • Magento constants for filter values
  • Move Url Models to Model/Url folder
  • Refactored status indicator in the header to use different colours and to give more meaningful information.

Fixed

  • Bug where draft content for blocks were being shown in page preview.
  • Text change in header of widget handler
  • The Liveview editor setting is no longer disabled when saving CMS Pages or Blocks when the is_liveview_enabled key is not present in the payload.
    This provides compatibility when using Adobe Commerce Content Staging to schedule updates for other block/page settings (i.e. excluding Hyvä CMS content) as well when pages/blocks are saved via other methods (e.g. custom code or via APIs).
  • Issue where image dimensions were not being preserved when the same image was selected in the image handler.
  • Double aria alert announcement fix
  • Fix empty preview toggle component list button to be CSP compatible
  • Children quick actions add button passes accepts correctly
  • Overflow issue with tooltip on right side
  • CORS issue for some multi-site setups by reverting to using admin domain for building ajax endpoint to generate content.
  • Fix TW JIT issue where classes which included the characters & and , were not being applied properly to the generated CSS.
  • Contrast A11Y issues with colors
  • Fixed extra label in icons
  • Link handler selectbox, by using interactive element
  • Landmarks with proper tag and labels
  • Tooltip label value, now uses the aria-label for visual users only, so it is not used double.
  • Better indent liveview.phtml file
  • Fix z-index to show header dropdowns while component slide-out is open
  • Copy paste issue with children (component ordering issue)
  • Link tooltip fix
  • Added missing block id to spacer
  • Url Params fix (force string)
  • Bumped cms-tailwind-jit to resolve an issue preventing the TW JIT iframe from loading on the storefront for compiling version history CSS, especially in cross-domain Admin/Storefront or CSP-restricted setups.

Removed

  • Legacy patching tool (legacy items will be handled automatically instead of a manual patch)
  • Tabs in sidebar
  • CTA component declaration
  • Unrequired filter class usage

0.5.0 Hyvä CMS - 2025-06-04

Added

  • Nothing

Changed

  • quill downgrade 2.0.3 to 2.0.2 to fix   issue in richtext component.
    REF: https://github.com/slab/quill/issues/4509
  • Refactor store switcher into reusable component to be used in both toolbar and version history.

Fixed

  • Undefined array key in usp variants
    Many thanks to Klaas van der Weij (Sparkable) for the contribution!
  • CSS cascade conflict where JIT-generated classes, e.g. cmsp1_flex, overrode template Tailwind classes, e.g. lg:grid, breaking responsive layouts.
    This is a backward-compatibility breaking change. Projects that have extended Hyvä CMS for custom content types must now call the TailwindCssJit::processContentWithStyles() method rather than TailwindCssJit::prependContentStyles(). JIT styles are now injected in the head section before the main stylesheet to preserve proper CSS cascade order.
  • HyvaCompatibleOptions now only excludes Hyva/reset theme from design options. The preview store view allows all themes which are based on a Hyva theme including Hyva/reset, unless restrict_preview_to_hyva_themes is disabled.
  • JavaScript destructuring error in image handler when imageOptions is null

0.4.0 Hyvä CMS - 2025-05-29

Added

  • Component visibility control to show components in editor but hide them on frontend
  • Cut in the toolbar
  • Cut components from the quick actions
  • Copy components from the quick actions
  • Add children direct from the quick actions
  • New controllers to fetch values for the link handler
  • New options in link handler
  • Command to patch data for Hyva Liveview version upgrades
  • Improvements to layout rendering
  • Added "Edit - Hyvä CMS" option to the beginning of actions column in the CMS Pages and CMS Blocks grids.
  • Image editor event to open/close the image handler sidebar
  • Config option to restrict preview to Hyva themes only. As only Hyva themes are supported in the editor at the moment it is enabled by default. Until Luma themes are supported this setting can only be changed in config file rather than from the admin panel.
  • Search as you type filter to the store switcher

Changed

  • Switch Tailwind JIT compilation to use hyva-themes/magento2-cms-tailwind-jit for consistency across Hyvä products, class prefixing, custom config/CSS support, support for multiple themes, better scalability and portability.
    This is backward-compatibility breaking change. Projects that have extended Hyvä CMS for custom content types must update their Hyva\CmsLiveviewEditor\Api\ProviderInterface implementations to be compatible with this version.
  • Simplified liveview preview content loading on Magento admin forms using just a postMessage, AJAX call was redundant.
  • Used consistent Page loaders and messages across the editor matching brand colour guidelines.
  • Enhanced message system with dynamic status updates for improved user feedback. Maintained legacy events.
  • Removed the custom breakpoint options from the spacer component and replaced them with tailwind default values.
  • Replaced text color on the accordion component with seperate heading and content color settings on accordion items.
  • Refactored USP to component to include text and background colors.
  • Added text color options to the testimonial componenet.
  • Updated UX for the link handler
  • Updated component templates to use the new link handler
  • Using controllers instead of GraphQL for handlers
  • Minor UX updates to the image handler
  • Add prose class to richtext component by default

Fixed

  • Sharable Preview URLs which were over a day old.
  • Duplicate layered nav filters when a Hyvä CMS block is used on the page
  • Slider component layout bug using previous method for adding children
  • Removed the custom breakpoint options from the spacer component and replaced them with tailwind default values.
  • Replaced text color on the accordion component with separate heading and content color settings on accordion items.
  • Refactored USP to component to include text and background colors.
  • Added text color options to the testimonial component.
  • Sorting on CMS Pages and CMS Blocks magento admin listing grids.
  • Newly created content in the editor from returning to a new page or block form in the magento admin. Now it returns to the correct page or block form.
  • Removed logic setting the return URL from the editor. It is now handled by the Hyva_CmsMagento integration module so that it may now be set by other integration modules. Default return paths are set in the editor incase integration modules do not set them.
  • Update edited image preview to use a cache busting parameter to force reload the image.
  • Fixed issue where bullet lists were not converted to ul tags in the richtext component.

0.3.0 Hyvä CMS - 2025-05-06

Added

  • Widget component
  • CSP support for frontend scripts used by component templates.
  • CSP support for liveview editor script for live updates to work with a Hyvä CSP theme.
  • Improvements to field validation.
  • Option to use data-[validation rule] attribute to avoid browser API validation.
  • Options to use data-[validation-message] attribute to set custom validation messages.
  • Feature to allow preview editor to focus on non-input as well as input fields when editing content.
  • Gitlab issue templates

Changed

  • Stop closing modals when clicking the backdrop
  • Move block_id to advanced section in all components
  • Added none option the the button component
  • Synced Slider Basic styles with UI version
  • Field types now require wrapping in a #field-container-[uid]_[field name] div for frontend validation.
    This is backward-compatibility breaking change for any custom field type templates which may have been added to your project. See the documentation for more information how to create a custom field type template.

Fixed

  • Validation for cms_block preview_url_key to allow .html suffix
  • Preview url validation caused by category id conflict with Hyvä CMS entity id
  • Removed random JS debugger statement
  • Translate a string (All)
  • Fix JSON in Alpine.js x-data attributes breaking during CMS directive processing
  • Preview handling to support CSP-compliant themes
  • Empty href in button component
  • Fix to validate against the correct value array vs string for links, images, etc.
  • Fix formatting & positioning of error messages to work better with frontend validation. Allows custom positioning of error messages.
  • Fixed issue where duplicate element IDs could occur in ROOT.phtml by moving child block rendering logic to a ViewModel, ensuring compatibility regardless of block class.
  • Specificity for Columns Component styles, allowing custom style override
  • Fixed issue caused by typo in iframe message type check, causing invalid preview URL message to be shown

0.2.0 Hyvä CMS - 2025-04-17

Added

  • CSP Support to snap slider plugin, to avoid any errors in the checkout & Hyvä CSP Default Theme

Changed

  • Accordion component refactoring & renaming
    This is a backward-compatibility breaking change
    Please refer to the 0.2.0 upgrade notes for more information on how to upgrade
  • Composer requirements to allow Symfony HTTP Foundation 7.0 for Magento 2.4.8 compatibility

Fixed

  • Hyvä theme module dependency in composer.json
  • Stray JavaScript debug statement
  • Show correct status when new content is created i.e. save/draft
  • Show warning when content is enabled but has no published version
  • Incorrect warning: "Your changes are published, but the content is disabled" shown when new content is created and not yet published
  • Regex validation for page settings on url_key to allow underscores
  • PHP 8.3 issue where null values in regex validation triggered preg_match() deprecation exception in Magento 2.4.8
  • Magewire compatibility with store codes in URLs

0.1.0 Hyvä CMS - 2025-04-11

Added

  • All initial features of our new CMS solution
  • See the release notes for more details

Changed

  • Nothing changed

Removed

  • Nothing removed