Skip to content

19.0.0

Choose a tag to compare

@sneridagh sneridagh released this 19 May 13:13
· 37 commits to main since this release
b7cb04f

19.0.0 (2026-05-19)

(Summary)

Breaking

  • The RichTextWidget wraps its value in a div instead of a p. @nileshgulia1 #7950
  • Changed the 401 Unauthorized behavior. Now, for anonymous users it redirects to the login page. For authenticated users it still shows an Unauthorized message indicating they don't have permission. @sneridagh #8164
  • Updated dependencies: universal-cookie 8.1.2, universal-cookie-express
    8.1.2, react-cookie 8.1.2. @davisagli
  • Upgraded superagent from 3.8.2 to 10.3.0; projects with custom request wrappers or SSR callbacks must handle missing response objects and stricter redirect/error handling.
  • Removed the @plone/client package from the main branch. @sneridagh #8170
  • Replaced the dependencies react-dnd, react-dnd-html5-backend, and react-sortable-hoc with dnd-kit.
    See https://6.docs.plone.org/volto/upgrade-guide/index.html for more information.
    @davisagli
  • Make form autosave opt-in behind config.experimental.saveAsDraft.enabled; enable this flag to preserve the previous save-as-draft behavior. @sneridagh
  • Update @plone/components to 4.0.0-alpha.7 codebase. @sneridagh #8122
  • Update to webpack-dev-server 5. @davisagli
  • Fork razzle-dev-utils into @plone/razzle-dev-utils. @wesleybl #7973
  • Remove support for importing from the Volto root using paths starting with ~. @davisagli
  • Created a new VideoEmbed component for usage in a video block, helping to fix accessibility issues with the Semantic UI one. @jackahl @iRohitSingh #6359
  • Table block is now responsive and can scroll horizontally for non-fixed tables. @sneridagh #7916
  • Add package @plone/razzle. It's a fork of razzle. @wesleybl #7542
  • Fork babel-razzle-preset from Razzle. Update dependencies. @sneridagh #7619
  • Removed Jest from build. @sneridagh #7620
  • Forked Razzle SCSS plugin, pin the version to one that does not flood the log with useless deprecation warnings. @sneridagh #7188
  • AlignWidget and ButtonsWidget are now Semantic UI-free, and they are now based in @plone/components.
    See upgrade guide for more information. @sneridagh #7555
  • Update pnpm to 10.18.3. @wesleybl #7239
  • Drop support of Node.js 20. @wesleybl #7509
  • Now add-ons need to replace <img> tags with the Image component. There is an ESLint rule to check this. @wesleybl #7402
  • @plone/components and @plone/client has been updated with the latest alphas developed for Seven.
    Please see the upgrade guide @sneridagh #7407
  • Enable the showRelatedItems by default. @davisagli #6549
  • The default language and list of available languages are now loaded from the backend API.
    The default language can no longer be set using the SITE_DEFAULT_LANGUAGE environment variable.
    The supportedLanguages setting remains but is only used to limit which locales are included in the build.
    @davisagli #7125
  • Renamed literal "Head title" to "Kicker" in Teaser block. @sneridagh #7191
  • The getVocabulary and getQuerystring actions now fetch vocabularies in
    the context of the current content item, using the vocabulary URLs provided
    by the backend.
    Previously they were always fetched at the Plone site root.
    @davisagli #3216
  • Removed Semantic UI CSS declaration overflow-x: hidden from the body tag. @sneridagh #6513
  • Make the title block non required. @Narcis2005 #6792
  • Removed support for loading config from project. @sneridagh
    Please see the upgrade guide
    for more information. #6842
  • Fixed redirection logic which now checks for edit permission for deciding wether to redirect or render the link view @pnicolli #6843
  • Removed @plone/volto-testing, @plone/volto-guillotina, @plone/generator-volto from the monorepo. @sneridagh #6848

Feature

  • Replace moment.js with native Intl formatting in DateWidget and DatetimeWidget theme display widgets. The formatDate helper now accepts moment-style token strings ('ll', 'lll', 'LLLL', 'L', 'LT') for backward compatibility. @avoinea #6732
  • Use the navroot expander to render the sitemap. @erral #5503
  • Complete fr translation @jimbiscuit #8197
  • Update nl translations. @mauritsvanrees
  • Update pt_BR translations. @ericof
  • Complete translations for es, eu, gl and it @erral @cyphra @yurj @xulioxesus #8169
  • Add ReactAriaRouterProvider to enable client-side navigation support for React Aria Link components. @iFlameing
  • Add Block Types control panel for admins to see where blocks are used. @jnptk #7124
  • Added blocktypes service typings. @sneridagh
  • Update translations from branch 18.x @erral
  • Allow other sources, including Peertube instances, in the Video block via blocks configuration. @ionlizarazu #6870
  • If a delete operation fails, display the error message returned by the API (if any). @cekk #7888
  • Add aboveListingItems slot to allow displaying custom listing disclamers. @danalvrz
  • Enhanced SlotRenderer's GetSlotArgs typings. @sneridagh
  • cross language support for blocks chooser search @Tishasoumya-02 #7657
  • Added support for selecting Path and Depth in the Listing Block’s Location criteria using the ObjectBrowserWidget and NumberWidget. @iFlameing @giuliaghisini #7661
  • ModalForm should handle empty schemas, rendering an empty form with just the submit and cancel buttons. @tedw87 #7677
  • Add feature of drag and drop files in folder contents. @Tishasoumya-02
  • New @plone/components-based widgets: Size, blockWidth, and blockAlignment. All of them are ButtonsWidget-based. @sneridagh #7555
  • Added visually-hidden utility CSS class that integrators and core developers can use. @JeffersonBledsoe @Wagner3UB #6356
  • Enhanced diff reducer to process static behaviors in the result object. @rboixaderg #7546
  • Add Cypress for a subpath. @wesleybl #6976
  • Serve API requests from a subpath. @davisagli #7326
  • Add option to serve a Volto site on a subpath using the RAZZLE_SUBPATH_PREFIX environment variable. @nileshgulia1, @wesleybl, @davisagli
  • Internationalizes help for the Group Name field. @wesleybl #7481
  • Add support to Node.js 24. @wesleybl #7508
  • Convert RenderUsers component from class to functional with hooks. @wesleybl #7313
  • Update Portuguese Brazilian translations @ericof #7362
  • Replace img tags with Image component. @wesleybl #7363
  • Make Jest maxWorkers configurable via MAX_WORKERS env var. @wesleybl #7251
  • Add support for single selection in SelectAutoComplete widget. @iFlameing #7270
  • Complete missing German translations. @ksuess #6005
  • Use translated schema title in Helmet for Add component page. @alexandreIFB #7048
  • Improved the component ContentsDeleteModal by displaying a detailed list of selected items with clickable links for better clarity and usability. @alexandreIFB #7054
  • Show link integrity breaches in contents delete modal. @ksuess #7100
  • Added the .error class to blocks with errors, highlighting them with a red border in edit mode. @alexandreIFB #7138
  • Synchronizes versions of Volto dependencies with other packages in the monorepo. @wesleybl #7184
  • In the contents view, add a pill to indicate working copies.
    This only works with plone.app.iterate >= 6.2.0. @davisagli
  • Add autosave option.
    It will save a copy of content of the block being edited in local storage.
    If the editor cancels their edits or closes the browser window, then returns to the block, they will be presented with the option to restore or delete their autosaved content.
    It also detects whether the autosaved content is older than the server content, and if so, presents the editor with the option to restore or delete their autosaved content.
    Finally, saving the block will delete its local storage data.
    @tiberiuichim @rexalex @stevepiercy @dobri1408 #6864
  • Add isClearable prop to SelectWidget, allowing configuration of whether the select input can be cleared by the user. @alexandreIFB #7083
  • Volto core has migrated from Jest to Vitest as its unit test runner. @Abhishek-17h #6326
  • Refactor the UniversalLink component using typescript.
    Use union types for deciding between href or item.
    Modify tsconfig, include types located in types folder, otherwise d.ts files will noch be recognized in .tsx files, e.g. inside components. I need this for the react-router-hash-link package, that we use in the UniversalLink component. The specific file is /types/react-router-hash-link.d.ts.
    Modify lint-staged.config.js to exclude d.ts files.
    Use newest version of classnames (with types).
    Create tests and negative tests for optimization with React.memo (add render counter for testing this behavior)
    @tomschall #6826
  • ConditionalLink in TypeScript. @sneridagh #6959
  • Allow object_list widget to receive a schemaName prop, mapped to an utility. @sneridagh #7007
  • Added current evaluated querystring as a parameter in expander's querystring key when it's a function. @sneridagh #7012
  • Move MaybeWrap to TypeScript. @sneridagh #7029
  • Rename vitest.config.ts to vitest.config.mjs for allowing it to be loaded from add-ons. @sneridagh #7035
  • Added contained class if isContainer prop is passed (from containers). @sneridagh #7043
  • The Add component can now optionally receive initialFormData from the CreateTranslation component. This makes it possible for a custom CreateTranslation implementation to fully control the initial translation. @Tishasoumya-02 #7073
  • Complete missing german translations. @ksuess #6005
  • Add hidden widget. @robgietema
    Add static text widget. @robgietema
    Add time widget. @robgietema
    Add radio group widget. @robgietema
    Add checkbox group widget. @robgietema
    Add taken slugs to slugify helper. @robgietema
    Add filter choices, additional choices and sort to select widget. @robgietema
    Add max size and accept type checks to file widget. @robgietema
    Fix bug with pressing enter in blocks form that events gets bubbled from modal to blocks area. @robgietema
    Add option to pass custom widget config to field component. @robgietema
    Add optional widgets config to form component. @robgietema
    Add option to override the form component and the buttons in the form component. @robgietema
    Add option to override cancel label in form. @robgietema
    Add option to choose between icon and text buttons in the form component. @robgietema
    Add option to change form data from outside of the form in the modal form. @robgietema
    Move field factory properties per field to a utility so it can be registered from other packages. @robgietema
    Move field factory initial data per field to a utility so it can be registered from other packages. @robgietema
    Add filter factory option to schema widget. @robgietema
    Add additional factory option to schema widget. @robgietema
    Add option to allow editing the id of the fields in the schema widget. @robgietema
    Fix bug when multiple fields were added with the same id in the schema widget. @robgietema
    Add option to select the shortname as initial data for a new field in the schema widget. @robgietema
    Change properties form on the fly in the add field modal when changing the factory. @robgietema
    Fix bug where error messages where not rendered in the form because a string was expected. @robgietema
    Don't show request error multiple times when a form is validated. @robgietema
    Fix a bug where the video block schema was not used for validation. @robgietema #6370
  • Add Russian translation in Volto. @toropok #6874
  • Enhance the ImageInput component to only accept image files. [@jnptk] #6926
  • Fix translations default of ContentsDeleteModal: 'linkintegrity: delete' -> 'delete' if no link to break. @ksuess #6964
  • Use Plone 6.1.1 final. @sneridagh
  • Add validator for default_language in language control panel. @sneridagh #6811
  • Allow setting the default language via a runtime environment variable. @sneridagh #6830
  • Add self link in alternate language links @erral #6602
  • Show the working copy actions (checkin/checkout) based on whether they are enabled in the backend, instead of the hasWorkingCopySupport setting. @wesleybl, @davisagli #5284
  • Expose robots.txt setting in Volto control panel, and render robots.txt based on REST API call. @robgietema #5580
  • Update tests to match the new message in the add-ons loader. @sneridagh #6630
  • Provide language alternate links @erral #6602
  • feat(cypress):Add custom check Accessibility command @Tishasoumya-02 #6606
  • Add component to show related items, which can be enabled using the showRelatedItems setting. @wesleybl #3740
  • Add component to show related items, which can be enabled using the showRelatedItems setting. @wesleybl #3740
  • Added a setting in the config object to set the site's CSS layers, if required. @sneridagh #6539
  • Add disable Teaser block Align handlers for teasers inside containers. @sneridagh #6527
  • Update Dutch translations. @fredvd #6476

Bugfix

  • Fixed a11y in search page. @giuliaghisini #8085
  • Inside the CMS-UI, when using the keyboard the block becomes active when focused - @Wagner3UB #5273
  • Translate block titles displayed in the Order tab of the sidebar. @ericof #7348
  • The toolbar panel {guilabel}Personal tools now manages focus and announces state changes to screen readers to improve accessibility. @Wagner3UB #8019
  • Fixed accessibility issues in ModalForm with focus management, aria-live announcements, and aria-modal support. @Wagner3UB #8058
  • Fixed ObjectBrowserWidget to honor frontendOptions.widgetProps.initialPath when rendered in multiple mode (e.g. RelationList of RelationChoice). @ericof #8156
  • Show Unauthorized page via SSR if an anonymous user accesses the user control panel. @wesleybl #8184
  • Use <button> elements instead of <a> for formtabs menu items to fix accessibility and keyboard navigation. @Wagner3UB #8219
  • Prevent browser default behavior on file drop in folder contents dropzone. @jnptk #8228
  • Announce errors via aria-live and expose required and invalid states on text inputs to improve accessibility of form fields. @Wagner3UB #8033
  • Replace hard-coded color values with Semantic UI theme variables for input field to improve accessibility. @Wagner3UB #8044
  • Force the proper setting of the I18NLANGUAGE cookie for non-multilingual sites too. @sneridagh
  • Respect required and fixed block restrictions in the sidebar Order tab by hiding delete and drag actions when blocked. @avoinea #6481
  • Fix crash in AlternateHrefLangs when content.language is undefined. @avoinea #7309
    • Recreated the linkInvalid variable to correctly identify whether a link is valid and to address accessibility issues. @Wagner3UB #7983
  • Fix Toast component accessibility by adding a visually hidden, translated type label (Success, Error, Warning, Information) for screen readers. Fix date range validator error messages to display human-readable dates instead of raw ISO strings. @Wagner3UB #8105
  • Don't show login link in the Unauthorized component if the user is already authenticated. @wesleybl #8126
  • Fixed the link to the navigation root in the Contents view breadcrumbs. @TimoBroeskamp #8140
  • Completed the missing Romanian translations in the core Volto catalog and aligned a few related UI labels in the touched areas. @avoinea
  • Fixed redirect after logging in when starting from the Unauthorized component on a non-content route, such as control panels. @davisagli
  • Only include the original image in the Image component if the image does not have all the scales present. @sneridagh #7655
  • Forward Cache-Status header for files and images in Express middleware. @wesleybl #7962
  • Added required ARIA attributes to date and time inputs on DatetimeWidget. @Wagner3UB #7980
  • Improved text contrast and accessibility for help messages across the UI by updating global secondary color scales. @Wagner3UB #8052
  • Fixed RegistryImageWidget appending stray } to base64 data @mpalomacki #7900
  • Add file size upload limit validator. @robgietema #7936
  • First focus inside the edit page for assistive technologies @Wagner3UB #7948
  • Fixed blockTypes components with correct typings. @sneridagh #8080
  • Fix null port in virtual hosting path when the devproxy is used on an origin with an implicit port. @davisagli
  • Fixed bug in razzle configuration and webpack-less-plugin that could generate wrong aliases and configurations for building the site. @pnicolli
  • Avoid storing empty blocks clipboard in localstorage until blocks are cut or copied. @davisagli #6697
  • Fix the Moderate Comments control panel to only appear when Discussion support is available from the backend, avoiding incorrect visibility when plone.app.discussion is not installed.
    @Kathrina-dev #7786
  • Fixed unauthorized access to control panels by adding proper authorization checks. @Shyam-Raghuwanshi #7807
  • Fix subordering order tab. @robgietema #7937
  • Fixed searchable types in Object Browser Widget, adding also selectable-types to searchable-types. @giuliaghisini #7942
  • Handle create-user 500 responses where body contains 'message' instead of 'error'. @wesleybl #7946
  • Enhanced accessibility structure for the drag-and-drop of files in the FileWidget component. @Wagner3UB #7956
  • Update the users controlpanel to be compatible with the new response format of the users endpoint introduced in plone/plone.restapi#1971. @jnptk
  • Fix ContentTypeSchema error toast to display only error message instead of stringified JSON object. @Shyam-Raghuwanshi #7692
  • Fix missing i18n and a11y id for facet widget of Search block. @iFlameing
  • Fix a11y error missing aria-label in search block facets widget. @iFlameing
  • Changed the order of the "Save" and "Cancel" buttons on the sharing page to improve accessibility. @Wagner3UB #7835
  • Filter invalid block IDs (null, undefined, 'undefined') in getBlocks() to prevent duplicate elements in DOM and test failures. @aryan7081 #7858
  • BlocksForm: remove invalid block layout items on save by iterating raw blocks_layout (using isValidBlockId) instead of relying on getBlocks(). @aryan7081 #7859
  • Fix href override in UniversalLink component. @iFlameing
  • Language control panel: fix validation of default language. @davisagli #7720
  • Set HTTP 503 status code for ConnectionRefused error page. @Shyam-Raghuwanshi #7754
  • Fix default case selection in ButtonsWidget. @iFlameing
  • Remove '__ac' cookie when authtoken expires @Tishasoumya-02 #7783
  • Adjusted the opacity of the CMS UI toolbar’s expand/collapse button and enhanced its label to clearly convey to screen readers whether the toolbar is open or closed. @Wagner3UB #7500
  • Fixed a bug in Toolbar Types where the "Add Translation…" menu crashed if a language in Plone was not in Volto's language map. Now it shows the language code instead of crashing. @pratyush07-hub #7637
  • Fix rearrangement of files in drag-and-drop of folderish content. @Tishasoumya-02 #7784
  • Hide date and time fields when either "Whole Day" or "Open End" is checked in the Event form. @wesleybl #3243
  • Fixed a bug in the login form where the user could see a spinner instead of an error message after a failed login, when the login form was loaded via server-side rendering. @aryan7081 #7397
  • Fix max filesize upload issue in drag and drop @Tishasoumya-02 #7695
  • Fix multilingual redirect for languages using locale-specific formats. @Shyam-Raghuwanshi #7725
  • Add German translations for the current and parent paths. @iFlameing
  • Add support for typing and pasting URLs in the ObjectBrowserWidget for location selection in the Listing block. @iFlameing
  • Fixed a TypeError in flattenScales that occurred when image.scales was missing. @pratyush07-hub #7568
  • Moved hitorical amendment for the CssMinimizerPlugin to the Razzle fork, removed calc processing. @sneridagh #7667
  • Added prettier as a direct dependency of Volto, since is used by HTML block, to prevent the removal from the production build. @sneridagh
  • Fixed missing deepmerge in prod build and add it as a direct dep in Volto core. @sneridagh
  • Pin the sass dependency to 1.58.0 @sneridagh
  • Replaced {term} with {ref} to link to headings. @pratyush07-hub #fix-glossary-terms
  • Remove container cage on relations control panel. @ksuess #6633
  • Get translationObject from the store instead of directly from the response in CreateTranslation component. @rboixaderg #7543
  • Move '.visually-hidden' class to 'main.less' and remove unused 'utils.less' and references @Wagner3UB #7552
  • Improve some JSDocs for better typing. @sneridagh #7560
  • Fix image upload inside ImageWidget component when used inside a non-folderish object. [@jnptk] #7573
  • Avoid re-rendering a content item view while hydrating server-side rendered components. @reebalazs
  • Fix failing cypress test on updating to Cypress 15 @Tishasoumya-02
  • Fix infinite @users requests caused by anonymous useUser hook. @iFlameing
  • Refactored the fix for #7238: corner case when coming from SSR in edit route, where the teasers where overwriten with bogus URLs after save if INTERNAL_API_PATH is set. @sneridagh #7317
  • The cancel/clear "X" button inside the DatetimeWidget now includes an accessible label when active. @Wagner3UB #7414
  • The delete and drag buttons for blocks in edit mode now have an accessible aria-label for screen readers. @sabrina-bongiovanni #7424
  • Fix api middleware possible empty values error. @robgietema #7433
  • Escape double quotes in POT / PO files @erral #7476
  • Fixed corner case where RAZZLE_INTERNAL_API_PATH is set and id is still undefined on first SSR load. @sneridagh #7478
  • Reset fieldset.invisible class definition in order to prevent clashes with other CSS frameworks that might have invisible as utility. @sneridagh
  • Set type="button" for more widget buttons to prevent them from triggering when Enter is pressed elsewhere in the form. @davisagli
  • Search block: fix 'Clear filters' overriding the base query. @mauritsvanrees #7271
  • Fixes image rerender on page edit from #6839 @calinvladth #7347
  • Update folder content search input to announce result count for screen readers on search or input change. @Wagner3UB #7364
  • Check if we are editing a content type before rendering the Content Type control panel form. @ericof #7396
  • Added guard in API REDUX middleware. @sneridagh #7412
  • Ensure the Refresh Content button correctly loads the preview image when using preview_image_link for Teaser block. @iFlameing
  • Fix ImageWidget to support DX fields and Relation Choice images (preview_image_link). @sneridagh #7099
  • Fix InlineForm to always pass the error prop as an array, preventing prop type errors in widgets that use InlineForm. @alexandreIFB #7267
  • Search block: fix 'Clear filters' overriding the base query. @mauritsvanrees #7271
  • Teaser block: Clarify "Refresh source content" button by changing the default text to "Reset to target". @davisagli #7329
  • Fix German translation of "Order" from "Reihung" to "Reihenfolge" @iRohitSingh #7331
  • Contents view: Label 'None' for deselecting needs to be different from 'None' of a not available value in the table. @ksuess #7233
  • Fixed corner case when coming from SSR in edit route, where the teasers where overwriten with bogus URLs after save if INTERNAL_API_PATH is set. @sneridagh #7238
  • UniversalLink: regression, pass on onClick to Link component. @fredvd #7240
  • Hide the webstats_head_js field in the site control panel form @erral #7244
  • Fix corner case in devproxy when pathname is null. @sneridagh #7276
  • fix(fetchContent): correctly handle undefined blocksType in async fetchContent @nileshgulia1 #7096
  • Make sure the server-side rendered content is still shown if there is an error while hydrating a page that did not have a server-side error. @davisagli #7132
  • Added missing languages in packages/volto/src/helpers/LanguageMap/LanguageMap.js. @JeffersonBledsoe #7146
  • Add default if no filename is supplied in FileView @kittauri #7174
  • Use table sorting icons from pastanaga icons.woff instead of assuming we have Font Awesome icons. @ichim-david #6359
  • The title block should be focused all the subsequent times you edit a content. @ana-oprea #6880
  • Fixed broken tests in add-ons in Volto 18.12.0. @Abhishek-17h #6989
  • Add support for both Vitest and Jest in __mocks__ folders of Volto core. Add-on tests using Jest relies on them. @Abhishek-17h #7000
  • Added missing dependency for sgvo. Fixed svgo library loading in ./vite-plugins/svg.js. @sneridagh #7035
  • Rename ./vite-plugins/svg.js to proper extension vite-plugins/svg.mjs. @sneridagh #7035
  • Fixed stuck states in the Image Upload Widget by resetting uploading after failed size validation and dragging after image deletion or drag events, ensuring proper functionality and user feedback. #7045
  • Improve typings in ConditionalLink component, add TS tests to catch the bad typings. @sneridagh #7057
  • Fixed horizontal drag and drop placeholder. Now it appears behind the next element, and if it is the last element, it highlights the whole draggable area. Vertical placeholder remained untouched. @Narcis2005 #4405
  • Fixed Makefile to use SITE_DEFAULT_LANGUAGE instead of LANGUAGE for backend Docker setup. This aligns with plone/plone-backend#170 changes and resolves conflicts with the OS LANGUAGE environment variable. @boss6825 #6747
  • Improved error handling in the Form component to display the title of the error field in the Toast. This ensures that users see a more descriptive and clear error message when a field is invalid. @alexandreIFB #6833
  • Fix error when saving content with ObjectBrowserNav open. @wesleybl #6845
  • Fix the toolbar icon for the back navigation in the contact form. @kittauri #6852
  • Check if the destination (build public directory) exists before trying to create it in AfterBuildPlugin when consolidating public folders from add-ons. @sneridagh #6853
  • A11y: Add aria-label for search and cancel buttons for the input in the search block. @Wagner3UB #6859
  • Prevent submit form from ImageWidget. @giuliaghisini #6879
  • Fixed merge public folder from addons regression. @reebalazs @sneridagh #6919
  • Fixed regression on brown bag minor version of @storybook/addon-webpack5-compiler-babel. @sneridagh #6930
  • Call initialValue consistently by passing null instead of {} to blocksConfig. @Abhishek-17h #6952
  • Fix validation allowing relative URLs when allowExternals prop is set. @sneridagh #6840
  • For form validation, use the backend validator props passed to fields. @iRohitSingh. #6816
  • The style wrapper buildStyleObjectFromData now accounts for container blocks. @sneridagh #6832
  • Does not show empty class attribute when rendering img tag with Image component. @wesleybl #6788
  • Fixed button types across several components to allow reuse in more complex forms @pnicolli #6791
  • Fixed AlternateHrefLangs component, missing FlattenToAppURL. @sneridagh #6799
  • a11y - Added id attribute to checkbox widget for proper identification and fixes label functionality for screen readers. @Wagner3UB #6802
  • Fix load more comments link. @sneridagh #6759
  • Serve sitemap.xml.gz as an alias for sitemap-index.xml. @reebalazs #6561
  • Move the block chooser beneath the block, instead of covering the block and preventing making a choice, when config.experimental.addBlockButton is enabled. @giuliaghisini #6751
  • Use a text widget for editing the frontend domain setting in the Volto Settings control panel, instead of the URL widget which causes problems by erasing the current domain. @davisagli #4171
  • Update Dutch translations. @mauritsvanrees #6476
  • Fix regression in moving blocks from Grid block. @sneridagh #6642
  • Pass intl object to initialValue function. @wesleybl #6529
  • Update Dutch translations @fredvd #6531
  • Correctly handle when one of the items is null in the Relations control panel. @giuliaghisini #6629
  • Added field.pattern as a parameter to the internationalized message. @ionlizarazu #6631
  • Display the appropriately sized image to eliminate blurring from upsizing smaller images in the srcSet generation. @giuliaghisini #6634
  • Improve the usability of the ObjectBrowser when inputting a manual value, checking it on blur, and adding a local validator. @sneridagh #6576
  • fix(useClipboard): Do not have a pending promise in a boolean state @nileshgulia1 #6585
  • The depth field in the base search query of the search block was ignored, causing search results to include items beyond the specified depth level. Search results now respect the specified depth configuration. @TechSubham #5856
  • No longer add classes from the query string search text in the body tag. @Abhishek-17h #6493
  • Fixed folder contents issues with persistent selection across page changes. @pnicolli #6554
  • Fix robots.txt in devmode @reebalazs #6572
  • The depth field in the base search query of the search block was ignored, causing search results to include items beyond the specified depth level. Search results now respect the specified depth configuration. @TechSubham #5856
  • No longer add classes from the query string search text in the body tag. @Abhishek-17h #6493
  • Fixed folder contents issues with persistent selection across page changes. @pnicolli #6554
  • Fix robots.txt in devmode @reebalazs #6572
  • Fix inline comment in SlotRenderer. @sneridagh #6409
  • Enhanced linkintegrity popup and moved all logic in a separate component ContentsDeleteModal @giuliaghisini #6516
  • Disable initial scroll to top after SSR completion. @Faakhir30 #6523
  • Add missing styleWrapper style builder information in container/Grid. @sneridagh #6527
  • Fixed circular import error in dev with HMR in core Views and Widgets shadow customizations. @sneridagh #6526
  • Fixed circular import error in dev with HMR in core Blocks shadow customizations. @sneridagh #6525
  • Fixes ICS download in non-public event content. @sneridagh #6515
  • Fixed circular import error in dev with HMR in App component when imported in the main default config. @sneridagh #6524
  • Remove not ie 11 from browserslist configuration, because it is now included in not dead. @stevepiercy #6501
  • Fix warnings related to snapshot.managedPaths on startup. @davisagli #6511
  • Do not break toolbar if layout id is not registered in layoutViewsNamesMapping. @cekk #6485
  • Replace all spaces with - in BodyClass classes, instead of with - or `` depending on the content type or section. @giuliaghisini #6487
  • URL Management control panel: Show errors from a failed CSV upload. @davisagli #6473
  • Added missing style Helmet serialization in the HTML component to make it work in SSR. @sneridagh
    Fix deprecation notice for the usage of apple-mobile-web-app-capable. #6480
  • Fixed image generation because of a bug in the docker build with registry typings. @sneridagh #6471
  • Fix ERR_REQUIRE from ESM module requiring CJS module in @plone/registry fix tests. @sneridagh #6458

Internal

  • Refactored the TokenWidget component from a class-based component to a modern functional component using React hooks. @Manik-Khajuria-5 #7683
  • Refactored the Search component from a class-based component to a modern functional component using React hooks. @Manik-Khajuria-5 #7686
  • Remove .nvmrc from Volto's folder. @sneridagh
  • Updated Cypress test for search date sorting to verify newest-first ordering. @aryan7081 #7489
  • Update packages in pnpm-lock.yaml. @wesleybl #8188
  • Excludes badge links from readme-link-check. @wesleybl #8189
  • Fixes an intermittent error in the Cypress tests blocks-slate-backspace.js and blocks-slate-delete.js. @wesleybl #8190
  • Release for updating needed and conflicting typings. @sneridagh
  • Refactored the ContentType and ControlPanel components to be functional components. @Manik-Khajuria-5, @davisagli #7705
  • Refactored the WeekdayOfTheMonthIndexField component by converting it from a class-based component to a modern functional component. @Manik-Khajuria-5 #7811
  • Remove unused devDependency: react-docgen-typescript-plugin. @davisagli
  • Standardized the TypeScript validation script name to check:ts and added package-specific AGENTS.md contributor guidance for @plone/volto.
  • Update devDependency: @vitest/ui 3.2.4. @davisagli
  • DE translation for Search Site. @Tishasoumya-02
  • Add Storybook of View components @Tishasoumya-02 #5086
  • storybook of Sitemap @Tishasoumya #5087
  • Remove tsconfig.json root and remove tsconfig package. @wesleybl #7966
  • Remove references to the apps folder. @wesleybl #8144
  • Remove unused devDependency postcss-overrides. @davisagli
  • Update dependencies: @loadable/component 5.16.7, @loadable/server
    5.16.7, @loadable/babel-plugin 5.16.1, @types/loadable__component
    5.13.10, html-webpack-plugin 5.6.7, mini-css-extract-plugin 2.10.1,
    react-docgen-typescript-plugin 1.0.8, terser-webpack-plugin 5.4.0.
    @davisagli
  • Update dependency: lodash 4.18.1. @davisagli
  • Update dependency: prismjs 1.30.0. @davisagli
  • Update dependency: uuid 14.0.0. @davisagli
  • Update devDependencies: postcss 8.5.10, postcss-load-config 6.0.1,
    postcss-loader 8.2.1, postcss-scss 4.0.9. @davisagli
  • Update devDependency: @testing-library/jest-dom 6.9.1. @davisagli
  • Update devDependency: release-it 20.0.1. @davisagli
  • Update dependency: diff 3.5.1. @davisagli
  • Update dependency: express 4.22.1. @davisagli
  • Update devDependency: cypress 15.13.1. @davisagli
  • Update devDependency: release-it 19.2.4. @davisagli
  • Refactored the Diff component by converting it from a class-based component to a modern functional component using React hooks. @Manik-Khajuria-5 #7714
  • Run volto-slate test suite as part of the Vitest multi-project setup. @Abhishek-17h #7892
  • Add defensive checks for missing languages and locale files. @pratyush07-hub #7955
  • Remove the immutable dependency, since it is not a direct dependency. @wesleybl #7974
  • Ensure unlock wait after saving working copy changes in Cypress tests. @wesleybl #8024
  • Update react-dates to version 21.8.0. @wesleybl #8027
  • Exclude https://tanstack.com/ from README link check. @wesleybl #8040
  • Remove volta configuration. @wesleybl #8068
  • Added CI job for code-analysis workflow for checking if Volto types build cleanly. @sneridagh #8080
  • Make "Block Types" control panel wider. @jnptk
  • Remove unused devDependency: bundlewatch. @davisagli
  • Update dependencies: webpack 5.105.4, resolve-url-loader 5.0.0. @davisagli
  • Update dependency packages: http-proxy-middleware. Remove dependency packages: tmp. @davisagli
  • Update dependency: jsdom 28.1.0. @davisagli
  • Update dependency: lodash 4.17.23. @davisagli
  • Update dependency: serialize-javascript 7.0.5. @davisagli
  • Update devDependencies: wait-on 9.0.4 and start-server-and-test 2.1.5. @davisagli
  • Update devDependency: less 3.13.1. @davisagli
  • Use Plone 6.2.0rc1 for development. @davisagli
  • Refactored the PasswordReset widget by converting it from a class-based component to a modern functional component using React hooks. @Manik-Khajuria-5 #7697
  • Exclude .storybook from ESLint's default hidden directory ignore list via .eslintignore to allow linting of Storybook configuration files. @Shyam-Raghuwanshi #7894
  • Fix in-page drag-and-drop issue with the Listing block to ensure proper content reordering. @Manik-Khajuria-5 #7907
  • Fix razzle.config.js defaultPlugins missing name property to ensure addon SCSS plugin replacement works correctly. @Manik-Khajuria-5 #7908
  • Added Vitest coverage for .well-known public asset handling and corrected a test import path in volto-razzle. @Kathrina-dev #7868
  • Use getSlateEditorAndType in 03-block-slate.js to make the test more robust. @wesleybl #7924
  • Add CI check for volto-razzle changelog. @davisagli
  • Reinstalled all dependencies to latest compatible versions. @wesleybl #7871
  • Continue to prevent editors from automatically reformatting Markdown files by moving this configuration from VSCode to prettier.
    Move the VSCode settings setup from make install to a pnpm post-install hook. @wesleybl #7834
  • Increase wait time between link check retries with Lychee. @wesleybl #7872
  • Update browserlist Feb2026. @sneridagh
  • Upgrade Plone to use 6.2.0a1. @sneridagh
  • Removed apps folder from main branch, and related Plone's modular architecture packages (helpers, blocks, providers, theming, layout).
    These packages are now only in seven branch. @sneridagh #7785
  • Fixed CI test call. Fixed missing tests fixed since then. @sneridagh #7795
  • Prevent VSCode from mangling the html_meta header of documentation files. @stevepiercy #7758
  • Corrected the label of a README link that pointed to the React Router v7 docs. @Manik-Khajuria-5 #7776
  • Refactored the FormFieldWrapper widget by converting it from a class-based component to a modern functional component using React hooks. @Manik-Khajuria-5 #7672
  • Update TypeScript types for Volto. @wesleybl #7703
  • Include other *.md files in the repo root for link checking, fix redirecting links, and remove non-responsive server. @stevepiercy #7712
  • Update actions/checkout to v5 in all GitHub Actions workflows. @wesleybl #7724
  • Update actions/cache from v4 to v5 in GitHub Actions workflow files. @wesleybl #7731
  • Sync react-aria-components to 1.14.0 in catalog.json and nextjs package.json. @wesleybl #7733
  • Add classname for unauthorized page @iRohitSingh
  • Revert #7646 Makefile, removing --prod experiment. @sneridagh
  • Add Cypress test to cover deleting at end of Slate block when next block is empty. @aryan7081 #7263
  • Release with @plone/components 4a3. @sneridagh
  • Add Cypress coverage for Delete-key behavior in text blocks: merge next text block into current and do nothing to non-text (Description) block when pressed at end of a text block. @aryan7081 #7263
  • Use 19 as version for cookieplone CI checks. @sneridagh #7548
  • Introduce pnpm catalog feature in core. @sneridagh #7562
  • Convert UsersControlpanel component from class to functional with hooks. @wesleybl #7450
  • Update to node 24 and cypress to 15 @sneridagh #7538
  • Refactor SidebarPortal to TypeScript. @sneridagh #7560
  • Enable ESlint detection of '.only' in unit and cypress tests. @sneridagh #7567
  • Expires the cache if the root package.json is changed. @wesleybl #7536
  • Move to dependencies some bad categorized dependencies in devDependencies. @sneridagh
  • Run Cookieplone acceptance test with Node 24. @davisagli
  • Modernize and update tsconfig.json settings for core. @sneridagh #7531.1
  • Refactor LanguageSelector into TypeScript. @sneridagh #7531.2
  • Re-enable scripts pnpm build. Remove why. @sneridagh #7532
  • Added Cypress test for backspace behavior in slate blocks. @aryan7081 #7373
  • Update slate libraries in volto package. @sneridagh #7482
  • Makes the Cypress commands getSlateEditorAndType and getSlateEditorSelectorAndType more robust. @wesleybl #7503
  • Enhance Cypress commands to trigger focus before typing in Slate editor. @wesleybl #7506
  • Fix error and rename test to "should save typed content in the Slate editor". @wesleybl #7507
  • Skip link check for URL which blocks traffic from GitHub. @davisagli
  • Use Plone 6.1.3. @sneridagh
  • Update immer to 10.1.3. @wesleybl #7359
  • Add sphinx-reredirects to docs requirements-docs.txt and to sync with seven to avoid missing requirement when building docs locally on both branches. @stevepiercy #7376
  • Replace README.md link checker of awesome_bot with Lychee. @stevepiercy #7378
  • Remove vitest dependencies from root to prevent confusion. @wesleybl #7274
  • Remove MEDICE website entry from Volto in production. @wesleybl #7283
  • Fix random error in Listing Block tests. @wesleybl #7286
  • Fix test storeProtectLoadUtils.test.js > storeProtectLoadUtils > loadProtector store > pass when not counting. @wesleybl #7287
  • Fixed a random failure in Cypress tests when using getSlateEditorAndType or getSlateEditorSelectorAndType. @wesleybl #7290
  • Update package versions in pnpm-lock.yaml. @wesleybl #7291
  • Fix random failure in 'renders a file widget component with value' test of RegistryImageWidget. @wesleybl #7292
  • Fixes random error in Listing Block tests 2. @wesleybl #7293
  • Fixed random failure in Cypress 'Index Text Block' test. @wesleybl #7304
  • 2021.ploneconf.org is no longer a Volto site, but just a redirect to YouTube. Also reverts #6627 and replaces code examples with 2022.ploneconf.org. @stevepiercy #7314
  • Update eslint-config-prettier past malware versions to "^9.1.2". @kittauri #7254
  • Update @testing-library/react to 14.3.1. @wesleybl #7260
  • Test with Plone 6.1.2. @davisagli
  • Remove trailing space character in a script in package.json. @silviubogan #7166
  • Fixed types of #6826 in build:types. @sneridagh
  • Use Image from @plone/volto/components/theme/Image/Image instead of semantic-ui-react. @wesleybl #6754
  • Added a CI action to mark stale issues and PRs. @pnicolli #6875
  • Make the Cypress getSlateEditorAndType and getSlateEditorSelectorAndType commands more robust, avoiding timeouts. @wesleybl #6957
  • Fixes Cypress "Index Text Block" test. @wesleybl #6965
  • Fix Cypress "Test Yearly recurrence" test. @wesleybl #6971
  • Add eslint rule to avoid importing Image from semantic-ui-react. @wesleybl #6974
  • Removes make commands in root of repository whose packages no longer exist. @wesleybl #6975
  • Move Seven to its own branch. @sneridagh #6769
  • Use Plone 6.1.0 final release. @sneridagh #6731
  • Add Film Basque Country website to README. @erral #6741
  • Sync content from Awesome Volto into README. @stevepiercy #6745
  • Fixes intermittent error in cypress "Index Text Block" test. @wesleybl #6755
  • Test(cypress): fix breaking a list by typing Enter refs- #6586 @nileshgulia1 #6570
  • Add the block group name in the block configuration. @erral #6679
  • Test with Plone 6.1.0rc1. @sneridagh #6682
  • Revise the existing issue templates and create a new one for PLIP tasks. @stevepiercy #6683
  • Fix documentation build at Read the Docs. @sneridagh #6684
  • Upgrade jotai to 2.11.3 @ksuess #6685
  • Add Makefile command for testing Cookieplone in CI @sneridagh #6728
  • Fix corepack in CI. @sneridagh
    For more info: nodejs/corepack#612 #6640
  • Update TS version. @sneridagh #6641
  • Add acceptance test for non-manager user editing group memberships. @ksuess #5786
  • Enhance Volto contributing guidelines. @stevepiercy #6613
  • Split Read the Docs pull request preview builds between Volto and @plone/registry. @stevepiercy #6617
  • Updates the first-timer message to use the correct link for feature voting. @stevepiercy #6625
  • Allow 2021.ploneconf.org to fail readme-link-check. @stevepiercy #6627
  • Add Seven convenience Makefile commands. @sneridagh #6599
  • Restore pull request previews on Read the Docs. @stevepiercy #6612
  • Fix lint-staged throwing warnings when a file is checked-in and ignored. @sneridagh #6614
  • Fixed and re-enabled the types declaration extractor from core Volto. @sneridagh #6534
  • Fix extension in files containing JSX. @sneridagh #6520
  • Removed all imports from barrel files for components, actions, helpers, hooks and lodash. @pnicolli #6509
  • Add Accessibility acceptance tests for content types. @ana-oprea @ichim-david #6339
  • Fixed the README.md for Volto core when releasing to npm registry: copy it from the root of the monorepo on release. @sneridagh #6510
  • Update instructions to install pipx in RELEASING.md. @stevepiercy #6496
  • Added React Router 7 experimental PoC. @sneridagh #6472
  • Fix missing export src in @plone/components Also improve packaging in packages. @sneridagh #6470
  • Improve exports in @plone/registry, adapt the Jest test setup. @sneridagh #6461
  • Removed parcel completely from core. @sneridagh #6469

Documentation

  • Add Python 3.14 to Plone 6.2 support for Volto 19. @stevepiercy #8051
  • Add more information about removed drag-and-drop libraries in the upgrade guide. @davisagli
  • Added {versionchanged} directive documenting the removal of the -volto suffix from the visually-hidden-volto CSS class in Volto 19. @Wagner3UB #8155
  • Added missing upgrade step in the docs for 19a28. @sneridagh #8096
  • Remove link to Jobfamilie MEDICE: site is no longer a Volto site (redirects to non-Volto destination). @wesleybl #7929
  • Document known development watcher issues and how to resolve them. @shivaansh0610-LUFFY #7836
  • Updated links to old deprecated third-party theme in the documentation. @pnicolli #7857
  • Removed add-on packages that no longer exist in the main branch from documentation. @wesleybl #7887
  • Update configuration documentation to reflect that {file}src/config.js is deprecated in Volto 18+ in favor of the {file}config/ folder structure. @gummybearansh #7756
  • Added version requirement for Plone 6.2. @stevepiercy #7772
  • Add Volto 19 add-on development documentation. @Shyam-Raghuwanshi #7694
  • Exclude linkedin.com from link checker. @davisagli
  • Document environment variables and link the Razzle documentation. @Manas-Kenge #5319
  • Added missing steps for babel-preset-razzle in the upgrade guide. @sneridagh
  • Added missing upgrade steps for 19 projects. @sneridagh
  • Converted the structure of the "Settings Reference" page from a glossary to headings for easier navigation. @Abhishek-17h #7565
  • Add a note to the upgrade guide about related items being shown by default. @davisagli #7430
  • Fix images path in Volto README. @wesleybl #7446
  • Improved component shadowing documentation. @sneridagh #7357
  • Enhance and complete the block style wrapper docs. @sneridagh #7405
  • Enhance theming documentation. @sneridagh #7406
  • Fix reference for the widget named toggle_widget for boolean fields in a schema. @ksuess #7261
  • Updated "Configuring a new block". @ksuess #3272
  • Create a custom widget @ksuess, @silviubogan #7075
  • Pin plone-sphinx-theme to prepare for PLIP 4097. See plone/Products.CMFPlone#4097. @stevepiercy #7015
  • Corrected Redux-related docs.
    Better word wrapping in Redux-related docs.
    Added link to Redux development add-on for Firefox.
    @silviubogan #7023
  • Updated documentation code example from Jest to Vitest in the "Bundle size optimization" chapter. @Abhishek-17h #7024
  • Add version added admonition to Upgrade Guide for migrating grid blocks, and link from Upgrade Guide to Grid Block documentation. @ionlizarazu #7027
  • Fix typo in Appextras documentation. @fredvd #6083
  • Changed LANGUAGE to SITE_DEFAULT_LANGUAGE in documentation examples to align with plone/plone-backend#170 changes. @boss6825 #6747
  • Add documentation to configure editor settings to not reformat MyST .md files. @stevepiercy. #6893
  • Revert reformatting of MyST. @stevepiercy #6894
  • Move includes from plone/documentation to plone/volto. @stevepiercy #6917
  • Move _hardware-requirements.md from plone/documentation to plone/volto. @stevepiercy #6918
  • Remove duplicate configuration item html_title. @stevepiercy #6933
  • Use Cookieplone for installation everywhere. @stevepiercy #6820
  • Improve the wording on theming docs. @erral #6767
  • Fix MyST warnings about bad references, remove cookiecutter-plone-starter link, and remove rietveldschroderhuis.nl due to repeated failures and no response in collective/awesome-volto#27. @stevepiercy #6812
  • Fix reference to link.svg and include of _inc/_install-browser-reqs-volto.md. @stevepiercy #6760
  • Document Slate heading as anchor links in Volto blocks user manual. @nileshgulia1 #5755
  • Amended version policy documentation. @sneridagh
    Added deprecation notice for Semantic UI theming. #6541
  • Document how to migrate projects to Cookieplone. @stevepiercy @erral #6626
  • Enhancements of the upgrade guide for Volto 18, since we detected some inconsistencies. @sneridagh #6609
  • Fix redirecting links to Mozilla Developer Network's responsive images. @stevepiercy #6552
  • Add Volto block examples in the documentation. @erral #6560
  • Fix redirecting links to Mozilla Developer Network's responsive images. @stevepiercy #6552
  • Add Volto block examples in the documentation. @erral #6560
  • Add monorepo structure to the README. Update the monorepo structure file tree. @stevepiercy #6542
  • Add new Volto trainings to tutorials. @stevepiercy #6499
  • html_use_opensearch value must not have a trailing slash. Clean up comments. @stevepiercy #6502
  • More privacy concerning youtube links and fixing link check warnings for youtube playlist links. @stevepiercy @ksuess #4203
  • Remove conflicting searchtools.js file from documentation to allow default Sphinx search in main Plone documentation. @stevepiercy #6482
  • Add support for sphinxcontrib-youtube. @stevepiercy #6486
  • Refactor documentation includes to align with main documentation pattern. @stevepiercy #6495
  • Overhaul and update of the add-ons section in documentation. @sneridagh #6397
  • Fix display of nvm version when installing it for Contributing to Volto. @stevepiercy #6460