Changelog

3.0.0 2026-09-

{warning} Before upgrading to Hyper 3, review the Upgrading from v2 guide for breaking changes and required migration steps.

Added

  • Added named Link Type Configs in project config, with dedicated settings screens and support for field-owned custom configurations. Configurations are stored by UID so fields remain attached when a handle changes. (#52 (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 opt-in Bulk Add for multi-link fields, with element selection and one-value-per-line entry for supported link types. (#158 (opens new window), D#37 (opens new window))
  • Added per-field block and card view modes for multi-link fields. (#246 (opens new window), D#36 (opens new window))
  • Added selectable-element conditions and field-layout visibility and editability conditions across link types. (#225 (opens new window))
  • Added copy, cut and paste actions for links, with stable content identities that preserve moves without duplicating copied links. (#107 (opens new window))
  • Added header tabs and inline pane switching to link field layouts. (#160 (opens new window))
  • Added a native New Window field layout element.
  • 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 label-only links without a URL target. (#8 (opens new window))
  • Added per-field allowed-domain settings for Embed link types. (#24 (opens new window))
  • Added per-link-type controls for limiting element sources to sections or groups with URI formats. (#242 (opens new window), #63 (opens new window))
  • Added default upload volume and subpath settings for Asset link types. (#101 (opens new window))
  • Added an Add-link call to action for empty fields instead of pre-seeding a blank row. (#141 (opens new window))
  • Added multi-link previews to element cards and tables. (#251 (opens new window))
  • Added the hyper_links relation index for reverse lookups, plus hyper/content/sync-relations for rebuilding the index from canonical content.
  • Added automatic batch hydration and Craft-style with() eager-loading for linked elements, including links nested in Matrix and Neo fields. (#222 (opens new window), #84 (opens new window))
  • Added a raw content API for safely updating custom fields inside links, including links nested in Vizy content.
  • Added LinkCollectionInterface and immutable LinkCollection::withLinks() collection updates.
  • Added a GraphQL fields bag for custom link layout values. (D#68 (opens new window))
  • Added a GraphQL empty argument for including or selecting links without destinations.
  • Added native Craft Link field and content migrators, with raw-content conversion, relation syncing and dry-run support.
  • Expanded Typed Link migration support for Vizy content, orphaned elements, encoded URLs and relation syncing. (#244 (opens new window), #226 (opens new window), #191 (opens new window))
  • Added wrav/oEmbed field and content migrators. (#124 (opens new window))
  • Added a Category-to-Entry entrification remapper. (#136 (opens new window))

Changed

  • Hyper now requires Craft 5.9 or later and Embed 4.
  • Hyper 3 now supports upgrading directly from Hyper 1 on Craft 4 without installing Hyper 2 as an intermediate step.
  • Link collections now exclude links without a resolved URL by default, with consistent iteration, counting, array access and first-link rendering in single-link and multi-link fields. Use empty(null) to include all stored links.
  • Link isEmpty() now consistently checks the resolved URL across all link types, including element links.
  • Link content now uses stable, author-owned type handles and writes the v3 linkTypeHandle content shape while continuing to read v2 payloads. (#255 (opens new window))
  • Link destinations now use literal values. Existing environment-variable and alias references must be updated before upgrading.
  • Link block headers now use the link type as a compact title and menu, with additional layout tab labels shown alongside it.
  • Element links now localize through Craft’s propagation lifecycle, including multi-link structure propagation and current-owner-site resolution. (#45 (opens new window), #219 (opens new window), #212 (opens new window))
  • GraphQL link type names now derive from original field handles and stable link type handles rather than layout aliases or control-panel labels. (#218 (opens new window))
  • Embed html, iframeSrc, embedImage and providerName values are now available on the GraphQL HyperLinkInterface. (#194 (opens new window))
  • Deleting a site now removes its UID from Hyper settings, defaults and stored link content. (#264 (opens new window))
  • YouTube embeds now prefer maxresdefault thumbnails when available. (#243 (opens new window))
  • Unsupported or unavailable link types and missing named configurations now retain their original content instead of falling back to the default type.
  • URL values now allow only safe built-in schemes by default, with additional schemes configurable through allowedUriSchemes; dangerous schemes remain blocked.
  • Embed requests now enforce exact-domain allowlists, public-IP redirect checks, response limits and TLS verification, and control-panel previews use sandboxed frames.
  • Link rendering now escapes author-supplied text by default and rejects unsafe attribute names while continuing to trust template-supplied Twig Markup.
  • Improved relation-index save performance for fields containing many links.
  • Revised the documentation with complete link creation, rendering, importing, multisite, event and GraphQL guidance.
  • Clarified that linkValue should remain on the first field layout tab. (#145 (opens new window))

Fixed

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 legacy element cache, page-template preload and cache utility after migrating reverse lookups to hyper_links.
  • Removed the unused field cache and its legacy database table.