You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Matrix fields set to the “Cards” or “Blocks” view modes now show an “Add” button per entry type group, when the viewport is wide enough to support it. (#17731)
Matrix fields set to the “Cards” view mode now have “Copy selected entries”, “Duplicate selected entries”, and “Delete selected entries” field-level actions, if any entries are selected. (#18251)
Matrix fields set to the “Blocks” view mode now have a “Expand/collapse selected blocks”, “Copy selected blocks”, “Duplicate selected blocks”, and “Delete selected blocks” field-level actions, if any entries are selected. (#18001, #18251)
Matrix fields set to the “Blocks” view mode now have block action menus with “Expand/Collapse”, “Entry type settings”, and “Copy” actions, even if the field isn’t editable. (#18013)
Chips and cards are generally no longer hyperlinked. (#17591)
Entry revision menus now always include a “View all revisions” link. (#18050)
Timestamps within entry revision menus now have tooltips that reveal the full date and time. (#18050)
It’s now possible to add new sites to entries via their slideout editors. (#17795)
Entry “Duplicate” bulk actions now duplicate entries as drafts. (#18260)
Elements created via “Save as a new…” actions now initially have an empty slug. (#17932)
The control panel is no longer scrollable when a menu is expanded. (#17960)
Most site breadcrumbs no longer include selection menus if there’s only one selectable site. (#16526)
Number fields with “Step Size” and “Min Value” or “Max Value” settings will now get min/max attributes set on their input. (#17973)
Element, field, and entry type edit pages now redirect back to the previous page’s URL on save. (#16140)
Bulk element actions are now available on element indexes for mobile devices.
Textual condition rules are now case-insensitive. (#18107)
Added support for exporting elements as XLSX and YAML files. (#18160)
Non-editable fields now have “Read Only” badges. (#18215)
Revisions now keep track of which element attributes/fields were modified for the revision.
Improved the styling of tips and warnings in field layouts. (#18261)
Accessibility
Improved the accessibility of the Orientation setting within the Image Editor’s crop tool. (#17690)
The Image Editor’s focal point tool is now keyboard accessible. (#17880)
All sortable checkbox select options, selected Dashboard widgets, and site listings now have keyboard-accessible “Move up” and “Move down” action items. (#18067)
Improved the accessibility of user permission lists and GraphQL schema component lists. (#18290)
Administration
It’s now possible to divide entry sources into multiple index pages, via the Customize Sources modal. (#17779)
The Customize Sources modal now supports mobile devices. (#18067)
Added the “UI Label Format” entry type setting. (#18044)
Added the “Allow line breaks in titles” entry type setting. (#18265)
Added the “Change the author of other users’ entries” permission for channel and structure sections. (#18298)
Added the “View user” GraphQL schema option for Craft Solo. (#17863)
Users’ User Groups settings now show a component select input, and support inline group editing/creation on environments that allow administrative changes.
Relational fields now have an “Inline list” view mode. (#17744)
Relational fields and Matrix fields now have a “Card grid” view mode, replacing the “Show cards in a grid” setting. (#17744)
Relational fields’ selectable element conditions can now have “Status” condition rules. (#17945)
Added the “Show ON/OFF labels in cards” setting to Lightswitch fields. (#17743)
Control panel-defined routes now have action menus with “Move up”/“Move down” actions. (#17706)
“Generate image transform” jobs now include the asset’s filename in the job description. (#17753)
“Field” and “Section” condition rules now show field/section handles for users with the “Show field handles in edit forms” preference enabled. (#17909)
Native fields within element edit pages now have “Copy attribute name” actions. (#18114)
“Remove” actions on the Plugins index page now show a confirmation dialog. (#17922)
Composer package constraints in composer.json are now set with caret operators (e.g. ^1.2.3). (#18297)
entrify commands no longer require a category group/tag group/global set handle to be passed.
entrify commands now automatically assign newly-created channel/structure sections to “Categories” or “Tags” pages. (#17779)
The clear-cache command now accepts a space-delimited list of cache IDs that should be cleared.
The up command now warns about any astray license issues before running migrations. (#18297)
Compiled templates are now deleted by the up command rather than from migrate commands.
Added the enableTwigSandbox config setting. (#18208, #18216)
Added the useIdnaNontransitionalToUnicode config setting. (#17946)
The maxCachedCloudImageSize config setting is now set to 0 by default. (#17997)
The disableGraphqlTransformDirective config setting is now deprecated.
System message emails are now rendered using GitHub-flavored Markdown. (#18058)
Drag-and-drop icons are now longer shown for devices that don’t support pointer events. (#18067)
The Caches utility now keeps track of which options were previously selected. (#9447)
Field layouts can now set editability conditions on custom fields, based on the edited element. (#18181)
Element cards and table views can now include fields nested within Content Block fields. (#18206, #18252)
Element table views can now include generated fields. (#18253)
Element indexes can now be sorted by generated fields. (#18253)
Generated fields now normalize true/false/null/integer/float values to the appropriate types. (#18267)
Money fields’ icons now indicate their selected currency, for common currencies.
Development
Reference tags now support fallback values when no attribute is specified. (#17688)
Added support for referencing environment variables anywhere within settings that support them (e.g. foo/$ENV_NAME/bar or foo-${ENV_NAME}-bar). (#17794)
Environmental settings can now reference CRAFT_SITE (the current site’s handle) and CRAFT_SITE_UPPER (the current site’s handle in UPPER_SNAKE_CASE) environment variables, which are defined at runtime. (#17794)
It’s now possible to create unpublished drafts via GraphQL. (#17805)
It’s no longer possible to instantiate objects that don’t extend yii\base\BaseObject via the create() Twig function, which fixes a moderate-severity SSTI issue. (GHSA-94rc-cqvm-m4pw)
The Twig hash filter now supports passing a hashing algorithm, such as 'md5' or 'sha256'. (#17885)
The @parseRefs and @transform GraphQL directives are now optional for each GraphQL schema, which fixes a high-severity IDOR issue. (GHSA-7x43-mpfg-r9wj)
GraphQL API requests can now identify themselves as preview requests by passing an X-Craft-Preview-Token header, set to the x-craft-preview/x-craft-live-preview query param in the preview target URL.
Extensibility
Subnav items within the global control panel navigation can now have icons. (#17879)
It’s now possible to modify the template path via craft\web\View::EVENT_BEFORE_RENDER_TEMPLATE and EVENT_BEFORE_RENDER_PAGE_TEMPLATE. (#18125)
Custom fields’ icons can now be defined at the instance level, via a getIcon() method.
craft\base\Element::EVENT_AFTER_MOVE_IN_STRUCTURE is no longer deprecated.
craft\base\Element::EVENT_BEFORE_MOVE_IN_STRUCTURE is no longer deprecated.
craft\base\ElementInterface::afterMoveInStructure() is no longer deprecated.
craft\base\ElementInterface::beforeMoveInStructure() is no longer deprecated.
craft\base\ElementInterface::cardAttributes() now has a $fieldLayout argument. (#17920)
craft\events\ElementStructureEvent is no longer deprecated.
craft\fieldlayoutelements\CustomField::editable() now has an $element argument.
craft\helpers\ElementHelper::findSource() now has $withDisabled and $page arguments.
craft\helpers\FileHelper::writeToFile() now throws an exception if the file path isn’t writable, or there isn’t sufficient free space on the disk. (#17762)
craft\helpers\UrlHelper now encodes square brackets in generated URLs. (#17840)
craft\models\FieldLayout::getCardBodyElements() now always returns an array of arrays with html keys.
craft\services\ElementSources::getSources() now has a $page argument. (#17779)
craft\services\ElementSources::sourceExists() now has a $page argument. (#17779)
craft\web\Request::accepts() now accepts wildcard characters (*) in the $contentType argument, to check for a range of MIME types (e.g. application/*+json).
craft\web\Request::getAcceptsJson() now returns true for requests with Content-Type headers that match application/*+json, in addition to application/json.
Checkbox selects can now be configured with a storageKey setting.
The _includes/forms/checkbox.twig template now escapes the label variable. A raw HTML label can be passed by wrapping the label value in raw() or craft\helpers\Template::raw().
The _includes/forms/radio.twig template now escapes the label variable. A raw HTML label can be passed by wrapping the label value in raw() or craft\helpers\Template::raw().
Craft.ui.createCheckbox() now escapes the config.label property. A raw HTML label can be passed via the config.labelHtml property.
Craft.ui.createSelect() now escapes options’ label properties. Raw HTML labels can be passed via labelHtml properties.
Fixed a bug where elements with unsaved changes could show outdated attribute/field values within element index tables, chips, and cards throughout the control panel. (#17915)
Fixed a bug where Table fields with the “Static Rows” setting enabled would lose track of which values belonged to which row headings, if the “Default Values” table was reordered. (#17090)
Fixed a bug where requests with invalid tokens would throw an exception before the application was fully initialized, which could lead to other errors. (#18000)
Fixed a bug where titles, slugs, and required custom field values weren’t always getting propagated to other sites when creating a new element. (#17955)
Fixed a bug where it was possible to create more than five users with the Team edition.
Fixed a bug where deadlocks could occur when updating elements’ search indexes. (#18139)
Fixed a bug where element index pages weren’t retaining their search query param if present on the initial request.
Fixed a bug where element search query caches weren’t getting invalidated when elements’ search keywords were indexed. (#18275)
Fixed a bug where Matrix and Addresses fields weren’t loading provisional drafts for GraphQL preview requests.
Fixed a bug where generated field values weren’t always up-to-date if their template referenced nested elements. (#17938)
Fixed a bug where ineditable fields appeared to be editable via the inline editing mode on element indexes. (#18291)
Fixed a bug where Addresses fields weren’t working properly when editing elements for non-primary sites. (#18306)