Releases: payloadcms/payload
v3.28.0
v3.28.0 (2025-03-11)
Important
Compilation Performance Improvements
We’ve introduced a new opt-in flag that can cut Payload’s compile times in half during development. To enable it, add the following to your next.config.js:
const nextConfig = {
// ...
}
-export default withPayload(nextConfig)
+export default withPayload(nextConfig, { devBundleServerPackages: false })
In some rare cases, you may see unexpected behavior if your project relies on server-only Payload dependencies being bundled during development. Because of this, we’ve made the feature opt-in for existing projects.
Lexical Version Bump
This release upgrades the lexical dependency from 0.21.0
to 0.27.1
. Alongside table improvements and bug fixes, this version bump lays the groundwork for frequently requested features like color pickers.
If you installed lexical manually, update it to 0.27.1
. Installing lexical manually is not recommended, as it may break between updates, and our re-exported versions should be used. See the yellow banner box for details.
If you still encounter richtext-lexical errors, do the following, in this order:
- Delete
node_modules
- Delete your lockfile (e.g.
pnpm-lock.json
) - Reinstall your dependencies (e.g.
pnpm install
)
🚀 Features
- defaults to noindex nofollow (#11623) (5285518)
- threads path through field validate function (#11591) (3ede7ab)
- allow specification of which JWT extraction methods are supported, and in which order (#10794) (8f6d2e7)
- db-mongodb: strip keys from the data that don't exist in the schema from read results (#11558) (2ad035f)
- next: fully expose Next.js metadata (#11593) (397c1f1)
- richtext-lexical: allow disabling indentation for specific nodes (#11631) (eb09ce9)
- richtext-lexical: upgrade lexical from 0.21.0 to 0.27.1 (#11564) (557ac99)
- richtext-lexical: adds ability to disable auto link creation (#11563) (1e708bd)
- richtext-lexical: new HTML converter (#11370) (36921bd)
- ui: form state queues (#11579) (ac1e3cf)
- ui: adds disable copy to locale option to collection config (#11546) (657ad20)
🐛 Bug Fixes
- ensure only authenticated users can access the
payload-locked-documents
collection (#11624) (8f3d1bd) - upload imageSizes forces original file uploads to be compressed (#11612) (6d0924e)
- add missing auth property to new defaults function (#11561) (3af0468)
- db-mongodb: properly sanitize
updateVersion
read result (#11589) (e9afb36) - graphql: sanitize graphql field names for schema generation (#11556) (029cac3)
- plugin-import-export: plugin breaks
i18n
configuration (#11590) (5d65cb0) - translations: update translation placeholders to not be translated for lithuanian (#11622) (85f88a0)
- ui: adds fallback locale when defaultLocale is unavailable (#11614) (9ac7a3e)
- ui: stale list thumbnails when navigating (#11609) (fc5876a)
- ui: logic for showing copyToLocale button and adds test (#11584) (a53876d)
- ui: upload.displayPreview should affect all previews in the admin panel (#11496) (6f90d62)
- ui: apply consistent styling to custom & default block thumbnails (#11555) (8378654)
- ui: incorrect error states (#11574) (4811531)
⚡ Performance
- 50% faster compilation speed by skipping bundling of server-only packages during dev (#11594) (c7bb694)
🛠 Refactors
📚 Documentation
- fix documentation about custom i18n types (#11386) (38f61e9)
- document
payload migrate:create
flags (#11592) (3de1636)
📝 Templates
- fix issue with populateAuthors hook breaking live-preview on website template (#11608) (72efc84)
- allow displaying dynamic error message on forms created via Form Builder plugin (#11275) (814ced4)
⚙️ CI
- adjust paths filter for workflows, only look at main.yml (#11572) (9f7e8f4)
- add canary nightly cron, adjust lock and stale crons (259ea6a)
- use GITHUB_OUTPUT instead of set-output [skip ci] (1ad1de7)
- canary and internal releases [skip ci] (#11565) (1797782)
🏡 Chores
- set all licenses for internal tooling (30af889)
- db-postgres: enable TypeScript strict (#11560) (c8f01e3)
- deps: bump all eslint packages (#11629) (f2da72b)
- deps: bump next.js from 15.2.0 to 15.2.1 in monorepo (#11576) (b0da85d)
- deps: bumps @payloadcms/admin-bar in templates and examples (#11566) (7cef890)
- ui: code/json field full height should include any padding added (#11607) (051c1fe)
- ui: removes margin when row is empty and passes style from props (#11504) (6699844)
🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Patrik (@PatrikKozak)
- Rokas Puzonas (@RokasPuzonas)
- Jessica Chowdhury (@JessChowdhury)
- Dan Ribbens (@DanRibbens)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Sasha (@r1tsuu)
- Md. Tajmirul Islam Akhand (@Tajmirul)
- Elliot DeNolf (@denolfe)
- James Mikrut (@jmikrut)
v3.27.0
v3.27.0 (2025-03-05)
🚀 Features
- payload admin bar (#3684) (9724067)
- allow hiding the blockName field visible in blocks' headers via admin.disableBlockName (#11301) (143b6e3)
- threads path through field condition functions (#11528) (ba30d76)
- compound indexes (#11512) (bacc0f0)
- allows overriding import map location (#11532) (f01cfbc)
- plugin-import-export initial work (#10795) (4f822a4)
- ui: improves field error toast messages (#11521) (2163b0f)
🐛 Bug Fixes
- safe auth strategy execution (#11515) (312aa63)
- beforeValidate deleting value when access returns false (#11549) (6939a83)
- collection config deep merge during sanitization causing unpredictable behavior (#11524) (5adb764)
- format admin url inside forgot pw email (#11509) (56dec13)
- next: admin panel fails compiling when fullySpecified is set in next config (#11531) (cc05937)
- richtext-lexical: fix bug in $createAutoLinkNode when the link is preceded by a textnode (#11551) (4ebe673)
- storage-*: client uploads with
disablePayloadAccessControl: true
(#11530) (5cc0e74) - storage-gcs: client uploads are enabled even if
clientUploads
is not set (#11527) (e36ab6a) - ui: views rendered in drawers can update step nav (#11548) (04b0468)
- ui: execute client upload handler only when file exists (#11538) (31e2179)
📚 Documentation
🧪 Tests
⚙️ CI
🏡 Chores
- cleanup generated configs (#11536) (8f203bb)
- indexes are not iterable, corrects
indexes
default value sanitization (#11534) (f0ea918) - add plugin-import-export to publishList release tool (#11535) (672dace)
🤝 Contributors
- Sasha (@r1tsuu)
- Jarrod Flesch (@JarrodMFlesch)
- Jacob Fletcher (@jacobsfletch)
- Paul (@paulpopus)
- Germán Jabloñski (@GermanJablo)
- Said Akhrarov (@akhrarovsaid)
- Patrik (@PatrikKozak)
- Dan Ribbens (@DanRibbens)
- Alessio Gravili (@AlessioGr)
- Elliot DeNolf (@denolfe)
v3.26.0
v3.26.0 (2025-03-04)
🚀 Features
- ability to cancel jobs (#11409) (38131ed)
- maintains column state in url (#11387) (3709950)
- db-*: support limit in db.updateMany (#11488) (6a3d58b)
- db-*: add updateMany method to database adapter (#11441) (41c7413)
- richtext-lexical: add htmlToLexical helper (#11479) (cd29978)
- richtext-lexical: add editorConfigFactory helper to streamline getting the editor config (#11467) (e1b3084)
- ui: close the nav when the user navigates away on small screens (#10932) (9bb89b7)
🐛 Bug Fixes
- avif images not converting to
upload.formatOptions
set file types (#11505) (c417e3a) - excludes index files from migration files filtering (#10722) (c828e33)
- response headers from authstrategies are now merged together, even if no user was returned (#10883) (45a7c8b)
- ensures req.origin includes port on localhost (#11454) (a65289c)
- ensure errors returned from tasks are properly logged (#11443) (d53f166)
- incorrect value inside beforeValidate field hooks (#11433) (b3e7a9d)
- examples: ensure working multi-tenant example with pg (#11501) (4ddf965)
- examples: replace depreciated 'mergeHeaders' import in the MultiTenant example (#11306) (48e613b)
- next: incorrect active state for partial matches of collection names in sidebar (#11511) (7d2480a)
- next: active nav item not clickable in edit view (#11457) (83b4548)
- next: properly instantiates req.url on localhost (#11455) (67c4a20)
- next: email verification not working due to incorrect token url parsing (#11439) (f3844ee)
- next: disables active nav item (#11434) (c4bc0ae)
- plugin-multi-tenant: scope access constraint to admin collection (#11430) (9c25e7b)
- richtext-lexical: ensure nested forms do not use form element (#11462) (6d8aca5)
- storage-*: ensure client handler is always added to the import map, even if the plugin is disabled (#11438) (dfddee2)
- storage-s3, storage-azure, storage-gcs: client uploads when a collection has
prefix
configured (#11436) (fc42c40) - storage-uploadthing: files are duplicated to the storage via client uploads (#11518) (f143d25)
- templates: handle enableLink condition safely (#10728) (f7f5651)
- ui: uses query provider as single source of truth for where builder (#11476) (927078c)
- ui: remove stale thumbnails in bulkUpload after partial success (#10651) (e75d38c)
- ui: bulk editing users throws client-side exception (#11461) (6cbda9e)
- ui: scope rah-static and progress-bar styles to payload-default layer (#11442) (bef98c8)
- ui: use full image url for upload previews instead of thumbnail url (#11435) (96d1d90)
- ui: locale selector in versions view should remove filtered locales (#11447) (9e97319)
- ui: copyToLocale should not pass id in data, throws error in postgres (#11402) (428c133)
- ui: duplicate basePath in Logout Button Link (#11432) (f7b1cd9)
- ui: disable publish button if form is autosaving (#11343) (7118b64)
⚡ Performance
- automatically add index on a relationship field when used as target for a join field (#11463) (90d3c65)
- disable returning of db operations that don't need the return value (#11437) (6ce5e8b)
- db-*: add option to disable returning modified documents in db methods (#11393) (c21dac1)
- db-mongodb: faster join field aggregation by replacing
mongoose-aggregate-paginate-v2
with a custom implementation (#10936) (d4d2bf4) - next: reduce initReq calls from 3 to 1 per page load (#11312) (c8c578f)
📚 Documentation
- clarify that image resizing/cropping require
sharp
to be specified in payload config (#11470) (d57a786) - fix documentation "CheckListFeature" (#11480) (b9108b4)
- add few notes about DocumentDB and Azure Cosmos DB (#11336) (25e8799)
- fix method useAllFormFields on admin/hooks.mdx (#10935) (8b5bc3d)
- use local API to upload a local file (#10839) (19b4ec2)
- adds info and example for headersWithCors (#11141) (77395b6)
- custom auth strategy requires the collection slug in return value (#11327) (fcaf591)
- broken ' char entity instead of ' in plugins/build-your-own (#11363) (206b4b9)
- replace HTML entity ' with literal apostrophe (#11321) (8b55e7b)
📝 Templates
v3.25.0
v3.25.0 (2025-02-27)
🚀 Features
- storage-*: large file uploads on Vercel (#11382) (b540da5)
- allow to count related docs for join fields (#11395) (3436fb1)
- add support for not_like operation (#11326) (b014416)
- plugin-multi-tenant: allow customization of selector label (#11418) (958e195)
- plugin-multi-tenant: filter users list and tenants lists (#11417) (45cee23)
- plugin-multi-tenant: export useTenantSelection hook for public usage (#11364) (f477e0e)
- richtext-lexical: allows client features to access components added to the import map by the server feature (#11414) (7e713a4)
- richtext-lexical: support single-quoted jsx property values in mdx converter (#11290) (563c21b)
- ui: threads row data through list drawer onSelect callback (#11339) (d766b19)
- ui: adds support for block groups (#11239) (22f61ad)
🐛 Bug Fixes
- ensure custom IDs are returned to the result when
select
query exists (#11400) (526e535) - ensure generated types for config.blocks are not undefined if no blocks defined (#11377) (820a6ec)
- safely access config.blocks during type generation (#11320) (3ffc268)
- working
bin
configuration for custom scripts (#11294) (f779e48) - db transaction errors caused by checkDocumentLockStatus (#11287) (9728d80)
- db-mongodb:
hasNextPage
with polymorphic joins (#11394) (6b6c289) - deps: ensure Next.js 15.2.0 compatibility, upgrade nextjs and @types/react versions in monorepo (#11419) (2a3682f)
- next: nested relationship filter options (#11375) (0a1af45)
- next: use correct hmr url if assetPrefix is set in next config (#10859) (1725af5)
- next: uses assetPrefix from next config in webpack-hmr URL (#11229) (26163a7)
- plugin-multi-tenant: user access, thread field names through (#11365) (3778180)
- plugin-nested-docs: fallback to empty string if
useAsTitle
field is undefined (#11338) (09ca514) - plugin-nested-docs: corrects data shape of breadcrumbs returned in hooks (#10866) (d92c000)
- richtext-lexical: incorrect UploadData types (#11288) (2612756)
- ui: skip bulk upload thumbnail generation on non-image files (#11378) (81fd42e)
- ui: allow json fields to be updated externally (#11371) (36e152d)
- ui: bulk upload
DiscardWithoutSaving
modal styles (#11381) (7bb1c9d) - ui: object type field labels not displaying in search filter (#11366) (f1b005c)
- ui: custom block labels stale when reordering blocks (#11367) (2477fc6)
- ui: link element triggering clicks twice (#11362) (f9121c1)
- ui: only show bulk select all when count is less than total (#11329) (a8bec9a)
- ui: confirmation modal should build off of drawerDepth, instead … (#11305) (460d50b)
⚡ Performance
- remove deep copy of the entire sanitized entity config in
configToJSONSchema
(#11342) (a13d4fe) - add limit: 1 and pagination: false to various payload queries (#11319) (0058f82)
- ensure fetching and updating preferences doesn't cause transaction errors and is done correctly (#11311) (845c647)
- db-mongodb: remove
JSON.parse(JSON.stringify)
copying of results (#11293) (1dc748d) - drizzle: use faster, direct db query for getting id to update in updateOne (#11391) (e4712a8)
- next: reduce getNavPrefs calls from 3 to 1 per page load (#11318) (c7c5018)
- next: avoid unnecessary upsertPreferences call on page load (#11302) (76bd05c)
🛠 Refactors
- simplify collection, global and auth operations (#11374) (4410a49)
- simplify running field hooks (#11372) (dc9e8fa)
- ui: moves bulk edit controls (#11332) (f31568c)
📚 Documentation
- adds Reserved Field Names section to migration guide (#11308) (bcc6857)
- improve lexical code block documentation (#11416) (67b7a73)
- add lexical docs for configuring jsx converters for internal links and overriding them (#11415) (88a2841)
- add info about changes in localized fields to v2 -> v3 migration guide (#11244) (d326086)
- fix links to react hooks (#11344) (4224c68)
- update outdated docs/rich-text/overview feature names (#11324) (6ff380c)
- fix formatting in field hooks table (#11300) (af92c15)
- removes outdated
rateLimit
option (#11291) (c517e7e) - fix invalid jsx in banner block (#11289) (b1e9aa5)
🧪 ...
v3.24.0
v3.24.0 (2025-02-19)
🚀 Features
- add support for interfaceName on radio and select fields to create reusable top level types (#11277) (acead10)
- join field across many collections (#10919) (6d36a28)
- add
page
query parameter forjoins
(#10998) (847d8d8) - view component types (#11126) (b80010b)
- route transitions (#9275) (3f550bc)
- add siblingFields arg to field hooks (#11117) (155f9f8)
- richtext-lexical: export INSERT_BLOCK_COMMAND and INSERT_INLINE_BLOCK_COMMAND (#11193) (dc36572)
- translations: add support for lithuanian (#11243) (8bbe7bc)
- ui: enable specific css selectors on the localizer per locale (80b33ad)
- ui: confirmation modal (#11271) (bd8ced1)
- ui: adds admin.components.listMenuItems option (#11230) (8a2b712)
- ui: add
hideFileInputOnCreate
andhideRemoveFile
to collectionupload
config (#11217) (daaaa5f) - ui: refines progress bar animation curve (#11167) (16d75a7)
🐛 Bug Fixes
- versions not loading properly (#11256) (0651ae0)
- db transaction errors caused by checkDocumentLockStatus (#11273) (9b8f8d7)
- localized fields within block references were not handled properly if any parent is localized (#11207) (e6fea1d)
- upload and auth endpoints are mounted for all collections (#11231) (749962a)
- populate is ignored for nested relationships (#11227) (938472b)
- ensure leavesFirst option works correctly in traverseFields utility (#11219) (6b9d81a)
- join field does not show validation error (#11170) (dd28959)
- db-mongodb: properly handle document notfound cases for update and delete operations (#11267) (7922d66)
- db-mongodb: remove duplicative indexing of timestamps (#11028) (12f51ba)
- db-postgres: querying other collections via relationships inside blocks (#11255) (88548fc)
- db-postgres: ensure
countDistinct
works correctly and achieve better performance when the query has table joins (#11208) (513ba63) - next: imports toast from @payloadcms/ui (#11279) (cd48904)
- next: document header padding on tablet sized screens (#11192) (70db44f)
- next: pre-flight OPTIONS request errors from the graphql endpoint (#11103) (ececa65)
- plugin-multi-tenant: corrects default value for tenantsArrayTenantFieldName (#11189) (b65ae07)
- plugin-seo: add missing supported languages (#11254) (74ce889)
- richtext-lexical: add container div to table element to allow horizontal scroll in HTML and JSX converters (#11119) (9068bda)
- richtext-lexical: reliably install exact lexical version by removing it from peerDeps (#11122) (2056e9b)
- richtext-lexical: unindent button in toolbar is never active (#11089) (7a400a7)
- ui: minor issues with tabs and publish buttons when in RTL (#11282) (e83318b)
- ui: turbopack with the latest next.js canary [skip lint] (#11280) (009e908)
- ui: disabledLocalStrategy.enableFields missing email/username fields (#11232) (9fc1cd0)
- ui: unsaved changes allows for scheduled publish missing changes (#11001) (618624e)
- ui: timezone issue related to date only fields in Pacific timezones (#11203) (8b0ae90)
- ui: database errors when running autosave and ensure autosave doesn't run unnecessarily (#11270) (1328522)
- ui: do not pass req in handleFormStateLocking (#11269) (7f5aaad)
- ui: issues with prevent leave and autosave when the form is submitted but invalid (#11233) (06debf5)
- ui: allow selectinputs to reset to their initial values if theres no provided value (#11252) (1c4eba4)
- ui: selection status not updating after toggleAll in useSelection hook (#11218) (5817b81)
- ui: properly handle singular and plural bulk edit labels (#11198) (779f511)
- ui: hide edit button on deleted relationship options (#11005) (cba5c7b)
- ui: respect locale in buildTableState (#11147) (077fb3a)
- ui: hide array field "add" button if
admin.readOnly: true
is set (#11184) (b1734b0) - ui: unable to use browser back navigation after visiting list view (#11172) (0a3820a)
- ui: url encode imageCacheTag for media on dashboard (#11164) (d47c980)
- ui: json schema (#11123) (7f124cf)
- ui: prevent omitting fileSize from non-images (#11146) (6901b26)
- ui: adds delay to progress bar for fast networks (#11157) (de68ef4)
- ui: safe call within useEffect tea...
v3.23.0
v3.23.0 (2025-02-11)
🚀 Features
- adds new jobs.shouldAutoRun property (#11092) (5dadcce)
- add timezone support on date fields (#10896) (430ebd4)
- richtext-lexical: expose client config to client features (#11054) (d7a7fbf)
- ui: add timezone support to scheduled publish (#11090) (c18c58e)
🐛 Bug Fixes
- set initialValues alongside values during onSuccess (#10825) (fde526e)
- unhelpful "cannot overwrite model once compiled" errors swallowing actual error (#11057) (6a99677)
- error when passing functions to array or block fields labels property (#11056) (6d48cf9)
- db-mongodb: ensures same level operators are respected (#11087) (d2fe9b0)
- db-postgres: incorrect pagination results when querying hasMany relationships multiple times (#11096) (98fec35)
- next: allows relative live preview urls (#11083) (91a0f90)
- payload-cloud: handle socket closures (#11113) (da77f99)
- richtext-lexical: improve keyboard navigation on DecoratorNodes (#11022) (fa18923)
- richtext-lexical: toggling between internal and custom links does not update fields (#11074) (9fb7160)
- richtext-lexical: fixed the positioning of the button to add columns or rows in tables (#11050) (886bd94)
- storage-s3: sockets not closing (#11015) (95ec575)
- ui: relationship filter renders stale values when changing fields (#11080) (da6511e)
- ui: incorrectly incrementing version counts if maxPerDoc is set to 0 (#11097) (3616818)
📚 Documentation
- update custom endpoints docs,
handler
does not accept array of functions anymore (#11110) (1f3ccb8) - adds options table to payload-wide upload options (#10904) (d6a03ee)
- fixing 3 dead internal links (#11100) (3f80c59)
- adds
usePayloadAPI
hook to React Hooks documentation (#11079) (d56de79) - fix typo in
BlockquoteFeature
name (#11078) (87ba7f7) - typo in jobs queue workflows (#11063) (dc56acb)
- plugin-multi-tenant: update tenantsArrayField config options (#11045) (ac6f4e2)
📝 Templates
🏡 Chores
- updates CODEOWNERS (#11088) (3415ba8)
- ensure jest respects PAYLOAD_DATABASE env variable (#11065) (c6c65ac)
- richtext-lexical: add test converage for internal links (#11075) (b15a7e3)
- richtext-lexical: fix unchecked indexed access (part 4) (#11048) (5a53854)
🤝 Contributors
- Elliot DeNolf (@denolfe)
- Paul (@paulpopus)
- Jacob Fletcher (@jacobsfletch)
- Sasha (@r1tsuu)
- Said Akhrarov (@akhrarovsaid)
- Jonathan Bredo (@Bredo)
- Jarrod Flesch (@JarrodMFlesch)
- James Mikrut (@jmikrut)
- Markus (@Ma-Kas)
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Patrik (@PatrikKozak)
- Nathan Clevenger (@nathanclevenger)
- Boyan Bratvanov (@bratvanov)
v3.22.0
v3.22.0 (2025-02-07)
🚀 Features
- ui: adds filtering config option and implementation for filtering a… (#11007) (a63a3d0)
- ui: improve hasMany TextField UX (#10976) (d8cfdc7)
🐛 Bug Fixes
- db-postgres: ensure globals have
createdAt
,updatedAt
andglobalType
fields (#10938) (57143b3) - db-postgres: select
hasMany: true
with autosave doesn't work properly (#11012) (3ad56cd) - next: viewing modified-only diff view containing localized arrays throws error (#11006) (09721d4)
- plugin-multi-tenant: correctly set doc default value on load (#11018) (f25acb8)
- richtext-lexical: duplicative error paths in validation (#11025) (2b76a04)
- richtext-lexical: ensure sub-fields have access to full document data in form state (#9869) (ae32c55)
- ui: removing final condition closes where builder (#11032) (b820a75)
- ui: clearing value from relationship filter leaves stale query (#11023) (7a73265)
- ui: relationship filter clearing on blur (#11021) (8940726)
- ui: improve useIgnoredEffect hook (#10961) (8ed4104)
- ui: allow schedule publish to be accessed without changes (#10999) (bdbb999)
- ui: apply cacheTags upload config property to other admin panel image components (#10801) (e29ac52)
🛠 Refactors
🧪 Tests
🏡 Chores
pnpm dev
defaults to the _community test suite (#11044) (49d94d5)- find and use an available port in tests (#11043) (feea444)
- fix eslint wasn't running in test dir (#11036) (257cad7)
- fix flaky lexical test (#11035) (04dad9d)
- deflake joins e2e tests (#11034) (098fe10)
- fix lexical tests that are failing on main branch (#11024) (6631869)
- cpa: add ts strict mode (#10914) (824f9a7)
- plugin-multi-tenant: add better defaults for imported components (#11030) (ec593b4)
- richtext-lexical: fix unchecked indexed access (part 3) (#11014) (5f58daf)
- richtext-lexical: fix unchecked indexed acess in lexical blocks feature (#11013) (e413e1d)
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Jacob Fletcher (@jacobsfletch)
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Jessica Chowdhury (@JessChowdhury)
- Jarrod Flesch (@JarrodMFlesch)
- Sasha (@r1tsuu)
- Simon Vreman (@SimonVreman)
- Tobias Odendahl (@tak-amboss)
v3.21.0
v3.21.0 (2025-02-05)
🚀 Features
- exposes helpful args to ts schema gen (#10984) (2118c6c)
- adds auto resize feature to textarea (#10786) (7d429f8)
- plugin-multi-tenant: allow opting out of tenant access control merge (#10888) (be790a9)
🐛 Bug Fixes
- allow public errors to thread through on response (#10419) (ea9abfd)
- db-postgres: select hasMany inside arrays and blocks with versions (#10829) (68a7de2)
- db-postgres: write operations on polymorphic joined collections throw error (#10854) (e1dcb95)
- plugin-multi-tenant: incorrect tenant selection with postgres (#10992) (2a1ddf1)
- plugin-multi-tenant: fixed hardcoded user tenants field (#10782) (9638dbe)
- plugin-search: deleting docs even when there's a published version (#10993) (42da87b)
- plugin-search: generates full docURL with basePath from next config (#10910) (0f85a6e)
- plugin-search: gets api route from useConfig (#10632) (6353cf8)
- richtext-lexical: removes css from jsx converter (#10997) (45913e4)
- richtext-lexical: link drawer has no fields if parent document
create
access control isfalse
(#10954) (136c90c) - ui: client should add back default values for valid and passesCondition form field properties (#10709) (35e5be8)
- ui: revert unrelated code (#10897) (3985893)
- ui: error in version view if document contains localized arrays or blocks (#10893) (85c0842)
- ui: create-first-user crashes when users collection has join field (#10871) (2f66bdc)
📚 Documentation
- fixes dynamic, fully qualified live preview url args (#10985) (a07fd9e)
- correct broken NPM badge images on plugin documentation (#10959) (1a68fa1)
- correct grammar and improve clarity on preventing-abuse.mdx (#10937) (8ace0ca)
- fix typo on overview.mdx (#10877) (8f27f85)
- admin preview and draft preview (#10875) (d7c3b4e)
🧪 Tests
📝 Templates
- set pnpm engines to version 9 (#10979) (b671fd5)
- use typed functions in website template seed endpoint (#10420) (0a1cc6a)
- add
@ts-ignore
in seed to allow initial build on vercel (#10889) (2043b4a) - remove unknown CSS values (#10891) (ebb5173)
📓 Examples
- multi-tenant seed script, readme and other improvements (#10702) (ae0736b)
- added missing sharp dependency to the remix website package (#10931) (58666fb)
⚙️ CI
- increase closed issue lock for inactivity to 7 days (8af8bef)
🏡 Chores
- deps: bump packages used to build payload (#10950) (109de8c)
- deps: bumps @faceless-ui/window-info to v3.0.1 and @faceless-ui/scroll-info to 2.0.0 (#10913) (2f787a9)
- deps: deprecates body-scroll-lock (c7ad46c)
- examples: misc improvements to the draft preview example (#10876) (2b9ee62)
- plugin-search: improves types (#10955) (1771271)
- plugin-search: deprecates apiBasePath from config (#10953) (4a4e90a)
- templates: improves and simplifies draft preview (#10895) (8a79e59)
🤝 Contributors
- Elliot DeNolf (@denolfe)
- James Mikrut (@jmikrut)
- Paul (@paulpopus)
- Jarrod Flesch (@JarrodMFlesch)
- Jacob Fletcher (@jacobsfletch)
- Boyan Bratvanov (@bratvanov)
- Tylan Davis (@tylandavis)
- Said Akhrarov (@akhrarovsaid)
- Jessica Chowdhury (@JessChowdhury)
- Steve Kuznetsov (@stevekuznetsov)
- Alessio Gravili (@AlessioGr)
- Suphon T. (@suphon-t)
- Alexander Cato (@alexander-cato)
- Marwin Hormiz (@marwinhormiz)
- Sasha (@r1tsuu)
- Franco D'Agostino (@francodgstn)
- David Murdoch (@dsm23)
- Pavel B. (@inlinecoder)
- Amelia (@LimChorngUan)
- Robert Clancy (Robbo) (@robclancy)
v3.20.0
v3.20.0 (2025-01-29)
🚀 Features
- allow publish and publish specific locale buttons to be swapped (#9438) (9b49741)
- allows fields to be collapsed in the version view diff (#8054) (828b3b7)
- ui: allows customizing version diff components, render versions ui on the server (#10815) (c562fbf)
- ui: toggle showing only modified fields in version diff view (#10807) (33ac13d)
🐛 Bug Fixes
- checks for localization to prevent publish button breaking (#10844) (9c31a52)
- field paths within hooks (#10638) (0acaf8a)
- next: remove toString coercion inside getDocumentPermissions (#10828) (9f9919d)
- plugin-form-builder: type of MessageField to object (#10792) (92e6beb)
- plugin-form-builder: type of MessageField to SerializedEditorState (#10789) (5603c1c)
- plugin-multi-tenant: issue #10740 - "The following field is invalid: Assigned Tenant" (#10764) (c1c64a0)
- plugin-multi-tenant: remove tenant cookie on logout (#10761) (22633a6)
- plugin-nested-docs: update draft and published child docs on resave (#10454) (7a39870)
- richtext-lexical: preserve selection in Firefox when using LexicalMenu (#10867) (0e5ff24)
- richtext-lexical: afterRead hooks were not awaited (#10747) (9f2bca1)
- translations: adds et to import file (#10823) (ffe8020)
- ui: adds title attribute to Logout button for tooltip (#10851) (989140b)
- ui: correctly reset blocksDrawer search state after close (#10847) (8a6d995)
- ui: adds prev value on form state validat functions (#10832) (a835518)
- ui: hide the restore button's empty submenu in a draft version (#10756) (0d81ff2)
- ui: include check for parent permissions in renderField (#10729) (8289588)
⚡ Performance
- skips field validations until the form is submitted (#10580) (82f1bb9)
- only validate filter options on submit (#10738) (a05240a)
📚 Documentation
- add missing full stop, fix SlateNodeConverter import (#10860) (a47139a)
- fix links and formatting (#10835) (8952662)
- fix typo (#10824) (95e81d8)
- improvements in rich text section (#9954) (6a39279)
- adds limit, page, sort, where, and joins to list of rest query params (#10751) (ec1a441)
📝 Templates
- fix compatibility with pnpm 10 (#10830) (3094c92)
- fix website template not building (#10858) (219a369)
- adds landing page to blank template (#10769) (e65a04a)
- ensure lexical link validation does not break for internal links (#10771) (59545b5)
⚙️ CI
- remove docker login, not functional for external contributors (eca4f47)
- update CODEOWNERS (d6ae07d)
- fix run e2e command (#10779) (344b231)
🏡 Chores
- improves routeError log safety (#10793) (ace7557)
- uncomment collectionSlugs array in fields test suite, for resetDB to work properly (#10778) (72a5c02)
- migrate outdated @payloadcms/next/utilities imports (#10777) (b9d3250)
- disable bun run test buttons if bun extension is installed (#10775) (03f7bdf)
- cpa: re-pin template versions (#10857) (c08f012)
- deps: upgrades react-diff-viewer-continued to v4.0.4 to suppress react 19 warnings and use ESM imports (#10834) (57f7218)
- templates: update missing changes in vercel website template (#10827) (c75c6ce)
- templates: fix eslint errors in vercel templates (#10768) (52f86c7)
- templates: fix: the contact page of the website template throws an error in live preview (#10785) (d6658b5)
- templates: fix eslint errors in plugin template (#10770) (b76401c)
🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Sasha (@r1tsuu)
- Elliot DeNolf (@denolfe)
- Seno (@s-en-o)
- Alessio Gravili (@AlessioGr)
- Tsemach Hadad (@tsemachh)
- Dan Ribbens (@DanRibbens)
- Patrik (@PatrikKozak)
- Said Akhrarov (@akhrarovsaid)
- Jacob Fletcher (@jacobsfletch)
- Jessica Chowdhury (@JessChowdhury)
- Jarrod Flesch (@JarrodMFlesch)
- Tib (@T1l3)
- felismargarita (@felismargarita)
- Wallerand Delevacq (@wallforfry)
- James Mikrut (@jmikrut)
- Francisco Lourenço (@franciscolourenco)
v3.19.0
v3.19.0 (2025-01-23)
🚀 Features
- richtext-lexical: make decoratorNodes and blocks selectable. Centralize selection and deletion logic (#10735) (4aaef5e)
- ui: adds edit many option for bulk uploads (#10646) (be2c482)
🐛 Bug Fixes
- next.js rewrites were not respected for rest api (#10759) (c0ae994)
- browser validation error when visiting account page (#10717) (c1b912d)
- custom blocks field label component missing from config (#10692) (a5695ba)
- apply CORS response headers without
headersWithCors
(#10597) (be98eda) - rest api with
?locale=*
doesn't return full localized data (#10619) (7f8f2f0) - join field with the target relationship inside localized array (#10621) (25a70ab)
- properly handle nullable
minDistance
andmaxDistance
innear
query (#10622) (46c1b37) - db-mongodb: v2-v3 migration versions docs of collections and globals without relationship fields (#10755) (2d8ff72)
- db-mongodb: querying polymorphic relationships with the
all
operator (#10704) (d601300) - db-mongodb: beginTransaction invalid type without replicaset (#10690) (90f88f8)
- next: admin panel UI not rendering custom upload components (#9925) (e4fa171)
- plugin-multi-tenant: selected tenant could become incorrect when navigating out of doc (#10723) (e6d0260)
- plugin-multi-tenant: corrects user type in userHasAccessToAllTenants fn (#10707) (2a98c84)
- plugin-multi-tenant: prevent throwing when no user exists (#10699) (a9c0832)
- plugin-nested-docs: cannot update more than 10 child docs (#10737) (3501d47)
- richtext-lexical: improved regex matchers for absolute and relative URLs to make autolinking more reliable (#10725) (9bb27af)
- richtext-lexical: incorrect table action menu placement (#10627) (9684d31)
- ui: filters out upload specific fields for bulk editing (#10726) (f181f97)
- ui: admin description not being respected on tabs and padding issues with tab descriptions (#10710) (67f7c95)
- ui: issue with thumbnail component crashing the UI if the image didnt exist (#10689) (ddeb29f)
📚 Documentation
- moves collection and globals admin docs to their respective config overviews (#10743) (e5b3da9)
- moves customizing fields doc to fields overview (#10742) (0ca3736)
- adds examples of typed custom field components (#10741) (8b3e2ff)
- adds info on useSelection and useStepNav hooks (#10683) (d8682f2)
- multi-tenant plugin - remove @beta and fix npm url (#10697) (6d43910)
📝 Templates
- update website readmes for additional information on jobs and revalidation (#10758) (61a2a9c)
- fix potential error in the initial form state caused by type mismatch (#10713) (5e4a1d4)
⚙️ CI
🏡 Chores
- temporarily revert 10597 (#10718) (0c5321e)
- adds plugin-multi-tenant scope for pr title (#10706) (3e0baf5)
- examples: change to useClickableCard to use AbortController (#10680) (b55342d)
- plugin-multi-tenant: test suite enhancements (#10732) (9a87699)
- templates: fix eslint errors in website template (#10752) (5689c65)
🤝 Contributors
- Sasha (@r1tsuu)
- Germán Jabloñski (@GermanJablo)
- Paul (@paulpopus)
- Jacob Fletcher (@jacobsfletch)
- Dan Ribbens (@DanRibbens)
- Patrik (@PatrikKozak)
- Alessio Gravili (@AlessioGr)
- Jarrod Flesch (@JarrodMFlesch)
- Elliot DeNolf (@denolfe)
- Said Akhrarov (@akhrarovsaid)
- Boyan Bratvanov (@bratvanov)
- David Murdoch (@dsm23)
- Riley Langbein (@rilrom)