docs/releases/7.3.md
February 3, 2026
---
local:
depth: 1
---
The editor now automatically saves pages and snippets as you make changes to the content. Conflicting changes made in other editing sessions are detected using the existing concurrent editing notifications system. In the case of conflicts, validation errors, or other issues, autosave is paused and the user is notified. Autosave resumes once the issue has been resolved.
The autosave feature is enabled by default for all pages and snippets that use the RevisionMixin. The autosave interval can be configured or disabled via the WAGTAIL_AUTOSAVE_INTERVAL setting.
This feature was developed by Matt Westcott and Sage Abdullah, with review and support from Thibaud Colas and the Wagtail UI team, as well as designs by Ben Enright. We would like to thank Wharton Research Data Services for their sponsorship of this feature.
The StructBlock.Meta class now supports a form_layout attribute that allows you to customize the order and grouping of child blocks in the editing interface. You can provide a list of block names to specify the order, or use the new BlockGroup class to create collapsible groups of blocks, including a special "settings" group that is hidden by default. Refer to for more details.
This feature was developed by Sage Abdullah, with support from the Wagtail UI team and reference to previous work by Andy Babic.
The developer documentation and the Wagtail user guide now publish their contents in the llms.txt format. Those files can be used to provide context to Large Language Models on Wagtail projects. For both sites, this includes llms.txt files with an index of the site contents, large llms-full.txt files with full documentation contents, and Markdown variants of every page (with full docstrings contents):
.md at the end of any documentation page URL to view the Markdown output of that page. Examples: 7.3 release notes in Markdown{.external}, StreamField block reference in Markdown{.external}This feature was developed by Thibaud Colas.
Wagtail’s default image quality settings are now optimized for the needs of a wider number of sites, and consistent between image formats. The default settings are now lower for JPEG and AVIF. This will reduce image file sizes, loading times, and energy use of loading images.
Those changes in default settings won’t affect existing images, but it is possible to re-generate them if desired. View our image quality documentation for more information, and recommended quality settings for common use cases.
This feature was developed by Thibaud Colas.
The built-in accessibility checker now supports custom content checks. Those checks can provide live feedback to CMS users when content doesn’t meet accessibility best practices. They also support opinionated rules about other aspects of content quality - for example SEO, readability, tone of voice, page weight.
This feature was developed by Thibaud Colas.
New before_edit_setting and after_edit_setting hooks provide extension points for customizing the settings editing workflow. These hooks allow developers to extend settings management with custom validation, logging, notifications, or other actions. This matches capabilities available for pages and snippets.
This feature was developed by Baptiste Mispelon.
This release addresses a permission vulnerability in the Wagtail admin interface. Due to a missing permission check on the preview endpoints, a user with access to the Wagtail admin and knowledge of a model's fields can craft a form submission to obtain a preview rendering of any page, snippet or site setting object for which previews are enabled, consisting of any data of the user's choosing. The existing data of the object itself is not exposed, but depending on the nature of the template being rendered, this may expose other database contents that would otherwise only be accessible to users with edit access over the model. The vulnerability is not exploitable by an ordinary site visitor without access to the Wagtail admin.
Page and Collection models (Samya Aggarwal)ModelViewSet.pk_path_converter with defaults for IntegerField and UUIDField primary keys (Seb Corbin)StreamBlock in comparison view (Taras Panasiuk)register_icons hook (Joey Jurjens, Sage Abdullah)TypedTableBlock are counted in the reference index (Aman Bora)request.is_preview and request.preview_mode are set for password-required responses (Ishtpreet Singh)StructBlocks with blocks named content (Sage Abdullah, Serkan Korkusuz)purge_embeds after an embed provider changes policies (Paul Souders)WAGTAILIMAGES_FORMAT_CONVERSIONS in the settings docs (David Buxton)before_delete_page and similar hooks only trigger on the individual page view, not bulk actions (Shivam Kumar)PageQuerySet.prefetch_related performance note (Lasse Schmieding)search.html in tutorial (Lee Hart)RoutablePageMixin (Tibor Leupold)_WAGTAILSEARCH_FORCE_AUTO_UPDATE in search tests (Matt Westcott)SubmitController error handling (LB (Ben) Johnston)latest.whl nightly build for ease of use with package managers (Sage Abdullah)raise ... from err within an except clause) (Vivek Subramani, Matt Westcott)no-jquery ESLint plugin to start final deprecation of jQuery (LB (Ben) Johnston)mode value to w-teleport to allow different DOM update strategies (Sage Abdullah)LocalePreviously, when loading fixtures of Page models or other models extending TranslatableMixin, missing locale_id values would be automatically filled with the default Locale. This could break the setup of TransactionTestCase, and so this functionality has now been removed. Fixtures must now specify an explicit locale_id value.
Image quality settings for JPEG and AVIF now use lower default values, set to provide consistent perceptual quality between formats. This will take effect for newly-generated images only.
WAGTAILIMAGES_JPEG_QUALITY changed from 85 to 76.WAGTAILIMAGES_AVIF_QUALITY changed from 80 to 61.The new values match the default (unchanged) WAGTAILIMAGES_WEBP_QUALITY of 80. For sites considering custom values for those settings, refer to our recommended image quality table to make sure perceptual quality is consistent between different formats.
The items in the Wagtail userbar have been refactored to Template components. This changes the internal API for custom userbar items, with a render_html(parent_context) method. The pre-existing render(request) method has been deprecated and will be removed in a future release.
As part of refactoring userbar items to Template components, the following undocumented internals have changed:
BaseItem and its subclasses now inherit from Component.template attribute has been renamed to template_name.get_context_data method now receives a parent_context parameter, instead of a request parameter.The URL wagtailimages:generate_url and its associated view class GenerateURLView have been replaced. The new dynamic image URL generator UI uses Stimulus, with the URL wagtailimages:url_generator_output and the same URLGeneratorView as the page itself with async requests now returning HTML partials. Any overrides to those views or their template wagtailimages/url_generator.html will need to be adapted.
CreateView and EditViewThe form validation logic in wagtail.admin.views.generic.models.CreateView (aliased as wagtail.admin.views.generic.CreateView, and also subclassed as wagtail.snippets.views.snippets.CreateView) and wagtail.admin.views.generic.models.EditView (aliased as wagtail.admin.views.generic.EditView, and also subclassed as wagtail.snippets.views.snippets.EditView) has been refactored to better support validation conditions not handled by the form object (such as formsets displayed alongside the form, or a 'locked' status on the model). Any user code that overrides the post, form_valid, form_invalid and/or get_error_message methods to implement additional validation will need to be updated. These views now implement a new method is_valid(form), which by default delegates to form.is_valid(). To signal a validation error, this method should set the attribute self.produced_error_message to the desired error message string, and return False. For a generic validation error, this error message string can be obtained from self.get_error_message().