v3.79.0 (2026-03-04)
π Features
- richtext-lexical: separate configuration for lexical block icons (#15632) (f0498f2)
- richtext-lexical: upgrade lexical from 0.35.0 to 0.41.0 (#15760) (ba3bd74)
- translations: add i18n translations for modular dashboards (#15004) (cef2838)
Separate Block Icon Configuration (richtext-lexical) β Configure different images for Lexical block icons and block drawer thumbnails independently. Previously, imageURL served both contexts, forcing a compromise between a good 20x20px icon and a good drawer thumbnail. The new images property supports separate icon and thumbnail values with automatic fallback. Fully backwards compatible β imageURL still works but is deprecated. #15632
const QuoteBlock: Block = {
slug: 'quote',
images: {
icon: 'https://example.com/icons/quote-20x20.svg',
thumbnail: { url: 'https://example.com/thumbnails/quote-480x320.jpg', alt: 'Quote block' },
},
fields: [...],
}Lexical Upgrade 0.35.0 β 0.41.0 (richtext-lexical) β Upgrades the Lexical rich text editor dependency from v0.35.0 to v0.41.0. Includes upstream fixes like normalizeMarkdown (facebook/lexical#7812). All Lexical breaking changes are handled internally by Payload β no action required for standard usage. If you installed lexical manually, update it to 0.41.0 (though using the re-exported versions from @payloadcms/richtext-lexical/lexical/* is recommended). #15760
Modular Dashboard Translations (translations) β Adds i18n translation support for the Modular Dashboards feature, covering all dashboard widget buttons and error messages. Previously, dashboard UI elements lacked translation keys, making them inaccessible for non-English users. Also updates the automatic translation script to use GPT-4.1 for improved cost efficiency. #15004
π Bug Fixes
- restoreVersion validation for localized required fields (#15821) (e899182)
- draft doc validation when duplicating docs (#15816) (f470699)
- plugin-ecommerce: pass req to Payload API calls in Stripe adapter (#15839) (74799ea)
- plugin-import-export: automatically inherit locale and limit from URL queries (#15812) (ee083f0)
- plugin-import-export: fix imports with locales in a different column order than exported (#15808) (410912c)
- plugin-import-export: fix exports in other non-latin scripts being broken when opened in excel (#15813) (d931894)
- ui: drag and drop not working for sortable hasMany fields (#15845) (2c7ef3f)
- ui: prevent false positive stale data modal on autosave-enabled documents (#15817) (6aff717)
- ui: typo in CodeEditor export statement (#15795) (c5b2a91)
π Refactors
π Documentation
- add documentation for conditional tabs (#15809) (a1d6733)
- fix table formatting in import-export plugin (#15792) (0dba95a)
π§ͺ Tests
π‘ Chores
- prevent dev server from dirtying tracked files (#15826) (cb6f426)
- plugin-search: clean up .DS_Store file and resulting empty images directory (#14506) (f6f73dd)
β οΈ BREAKING CHANGES
-
rename widget ComponentPath to Component for consistency (#15780) (f7d0d04)
- Renames
Widget.ComponentPathtoWidget.Componentand types it as PayloadComponentinstead ofstring` - This aligns dashboard widgets with every other component reference in (collections, globals, fields, admin components) - none of them path in the property name, and all of them are typed as
PayloadComponent - Enables new typescript plugin to work for widget paths (the plugin uses
PayloadComponentcontextual type detection -string-typed properties were invisible to it)
- Renames
π€ Contributors
- Patrik (@PatrikKozak)
- Jens Becker (@jhb-dev)
- Paul (@paulpopus)
- German Jablonski (@GermanJablo)
- Elliot DeNolf (@denolfe)
- Luiz ClΓ‘udio (@lcnogueira)
- Palamar Roman (@VeiaG)
- Sebastian Blank (@blankse)
- Alessio Gravili (@AlessioGr)
- Mahmoud Hassan (@Mhmod-Hsn)