Changelog
3.0.1 2026-10-22
Fixed
- Fixed false draft conflicts preventing entries with Hyper 2 content from being saved. (#284 (opens new window))
- Fixed upgrades failing when stored Hyper content belongs to an unavailable plugin's element type.
3.0.0 2026-10-21
{warning} Before upgrading to Hyper 3, review the Upgrading from v2 guide for breaking changes and required migration steps.
Added
- Added shared Link Type Configs for reusing link types and field layouts across Hyper fields, alongside field-owned Custom configurations. (#52 (opens new window))
- Added Bulk Add for multi-link fields, with multiple element selection and one-value-per-line entry for supported link types. (#158 (opens new window), D#37 (opens new window))
- Added a card view mode for multi-link fields. (#246 (opens new window), D#36 (opens new window))
- Added copy, cut and paste actions for links between compatible Hyper fields. (#107 (opens new window))
- Added draft conflict protection to prevent concurrent edits from overwriting changes to the same Hyper field. Conflicting drafts are retained with recovery instructions.
- Added selectable-element conditions for Entry, Asset and User links, and field-layout visibility and editability conditions for link types. (#225 (opens new window))
- Added default values and character limits for Link Text fields. (#210 (opens new window), #96 (opens new window))
- Added default and fixed values for URL link types. (#51 (opens new window))
- Added the Passive link type for labels without a destination. (#8 (opens new window))
- Added a New Window field layout element.
- Added allowed-domain settings for individual Embed link types. (#24 (opens new window))
- Added options to hide Entry and Category sources without URI formats. (#242 (opens new window), #63 (opens new window))
- Added default upload volume and subpath settings for Asset links. (#101 (opens new window))
- Added multi-link previews to element cards and tables. (#251 (opens new window))
- Added link collection filtering by type handle, native attributes and custom fields, with Boolean conditions, ordering, limits and explicit empty-link selection.
- Added automatic batching of linked-element queries on frontend requests and
with()eager-loading paths for linked elements and their fields, including links nested in Matrix and Neo. (#222 (opens new window), #84 (opens new window)) - Added a content API for inspecting and updating custom fields inside links, including links nested in Vizy content.
- Added
LinkCollectionInterfaceandLinkCollection::withLinks()for creating a collection with a replacement set of links. - Added a GraphQL
fieldsproperty for custom link field values and anemptyargument for including or selecting links without destinations. (D#68 (opens new window)) - Added Embed
html,iframeSrc,embedImageandproviderNamevalues to the GraphQLHyperLinkInterface. (#194 (opens new window)) - Added support for upgrading directly from Hyper 1 on Craft 4 without installing Hyper 2 first.
- Added migration support for native Craft Link and wrav/oEmbed fields. (#124 (opens new window))
- Added
hyper/migrate/entrify-categoriesto remap Category links after Craft category entrification. (#136 (opens new window)) - Added
hyper/content/sync-relationsto rebuild the link relation index from stored content.
Changed
- Hyper now requires Craft 5.9 or later and Embed 4.
- Redesigned link block headers with compact controls and inline field-layout tabs, replacing the Advanced settings slide-out. (#160 (opens new window))
- Empty single-link fields now show an Add link action instead of a blank link block. (#141 (opens new window))
- Multi-link fields using Translate for each site now synchronise added, removed and reordered links across an entry's sites while preserving existing translated labels and custom fields. (#219 (opens new window))
- Element links now resolve localised destinations through Craft's propagation lifecycle. (#45 (opens new window), #212 (opens new window))
- Link collections now exclude links without a resolved URL from iteration, counting, array access, first-link rendering and GraphQL results. Use
empty(null)to include all stored links, including Passive links. - Link
isEmpty()now consistently checks the resolved URL across link types. - Link destinations are now literal values. Replace environment-variable and Craft alias references before upgrading.
- Link rendering now escapes ordinary label strings and validates custom attributes. Use template-authored Twig markup for labels containing HTML.
- URL values now use a shared URI scheme policy. Configure
allowedUriSchemesfor additional application schemes. - The
embedHeaderssetting now requires headers to be configured per exact HTTPS origin. - Embed domain restrictions now match complete hostnames or subdomains, and control-panel previews use sandboxed frames.
- YouTube Embed links now prefer higher-resolution thumbnails when available. (#243 (opens new window))
- Saved content now uses stable
linkTypeHandleidentifiers instead of PHP class names. Existing Hyper 2 content remains readable, and saved link type handles are read-only. (#255 (opens new window)) - Link type settings now use
LinkTypeDefinitionobjects. Custom integrations that treat settings as Link objects must use the definition API. - GraphQL link type names now use original field handles and stable link type handles. Update fragments based on custom type labels or field-layout aliases. (#218 (opens new window))
- Link objects now use Craft's normal method handling, including attached behaviours. Unknown method calls throw an error instead of returning null.
- Reverse relation lookups now use a dedicated
hyper_linksindex rebuilt from stored content during the upgrade. - Unavailable link types retain their original content instead of falling back to the default type.
- Deleting a site now removes its references from Hyper settings, defaults and stored link content. (#264 (opens new window))
- Third-party content migrations now support dry runs and rebuild link relations after conversion.
- Improved Typed Link migration handling for Vizy content, orphaned elements and encoded URLs. (#244 (opens new window), #226 (opens new window), #191 (opens new window))
Fixed
- Fixed cleared element selections continuing to resolve a cached target. (#259 (opens new window))
- Fixed field-level New Window defaults and per-link overrides not being applied consistently. (#146 (opens new window))
- Fixed link type layouts rendering a Link Value input when that field was omitted. (#129 (opens new window))
- Fixed required Link Text preventing otherwise-empty links from being saved. (D#192 (opens new window))
- Fixed Embed URLs being cleared when metadata had not finished loading. (#203 (opens new window))
- Fixed hash-only and configured custom-scheme URL values being rejected. (#188 (opens new window), #235 (opens new window))
- Fixed empty Site links appearing to select the first available site. (#233 (opens new window))
- Fixed shared link attributes being lost when changing link type. (#108 (opens new window))
- Fixed link rendering dropping zero-valued link text, titles, ARIA labels, classes and custom attributes.
- Fixed multi-column fields overflowing narrow control-panel containers and flyouts. (#180 (opens new window))
- Fixed migration of Link content nested in Matrix and Super Table fields. (#253 (opens new window))
Deprecated
- Deprecated separate
-fieldand-contentconsole migration commands for Typed Link, Linkit and Link. Use the source command with--step=fieldor--step=contentinstead, such ashyper/migrate/typed-link --step=content.
Removed
- Removed arbitrary collection forwarding to the first link. Read custom fields, edit attributes and call type-specific methods on a Link obtained through
first()or iteration. Explicit rendering conveniences such asgetLink(),getUrl()andgetText()remain available. - Removed the
ElementCacheandFieldCacheservices, legacy cache tables, page-template preload and Hyper's Clear Caches utility entry.