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 LinkCollectionInterface and LinkCollection::withLinks() for creating a collection with a replacement set of links.
  • Added a GraphQL fields property for custom link field values and an empty argument for including or selecting links without destinations. (D#68 (opens new window))
  • Added Embed html, iframeSrc, embedImage and providerName values to the GraphQL HyperLinkInterface. (#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-categories to remap Category links after Craft category entrification. (#136 (opens new window))
  • Added hyper/content/sync-relations to 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 allowedUriSchemes for additional application schemes.
  • The embedHeaders setting 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 linkTypeHandle identifiers 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 LinkTypeDefinition objects. 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_links index 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

Deprecated

  • Deprecated separate -field and -content console migration commands for Typed Link, Linkit and Link. Use the source command with --step=field or --step=content instead, such as hyper/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 as getLink(), getUrl() and getText() remain available.
  • Removed the ElementCache and FieldCache services, legacy cache tables, page-template preload and Hyper's Clear Caches utility entry.