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
- fix vercel website template importmap error caused by missing import (#11500) (562acb7)
- bump payload versions, upgrade next.js to 15.2.0, fix eslint errors (#11486) (f03d450)
- improve naming of richtext component import, add 'payload-richtext' classname (#11485) (398d48a)
⚙️ CI
- change custom github actions target back to es5 (fd1a4f6)
- clarify version reporting in issue templates (#11498) (a15c38f)
- repro guide to use
create-payload-app@latest
instead of@beta
(#11451) (e055565)
🏡 Chores
- add docker volume directories to gitignore (#10902) (fa8a2f8)
- temporarily disables flaky "should execute a custom script" test (#11487) (1929644)
- db-mongodb: tsconfig uses
strict: true
andnoUncheckedIndexedAccess: true
(#11444) (79a7b4a) - deps: bumps payload-admin-bar to v1.0.7 to suppress react 19 warnings (#11499) (bf4fa59)
- eslint: speed up no-imports-from-self rule by ensuring cache is used (#11483) (3774544)
- examples: update multi-tenant example (#11459) (81e8a9d)
- plugin-search: enable TypeScript strict mode (#11508) (efce154)
- richtext-lexical: export LexicalFieldAdminProps (#11464) (dda17f0)
- richtext-lexical: improve UploadData jsdocs (#11292) (4a1b749)
- translations: enable TypeScript strict mode (#11494) (a3fe607)
🤝 Contributors
- Sasha (@r1tsuu)
- Patrik (@PatrikKozak)
- Germán Jabloñski (@GermanJablo)
- Ondřej Nývlt (@onvlt)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Jacob Fletcher (@jacobsfletch)
- Elliot DeNolf (@denolfe)
- Vincent Vu (@rubixvi)
- Alessio Gravili (@AlessioGr)
- Dmitrii Kuzmin (@ApplY3D)
- Said Akhrarov (@akhrarovsaid)
- Michael Bykovski (@bykof)
- Mike Newberry (@MikeNewXYZ)
- nomad-dev (@n0mad-d3v)
- Liège Arthur (@Thisisjuke)
- Violet Rosenzweig (@6TELOIV)
- Adrian Maj (@AdrianMaj)
- Jessica Chowdhury (@JessChowdhury)
- Martijn Luyckx (@martijnckx)
- Roy Barber (@roybarber)
- Philipp Meyer (@Quppi)