If your project uses the local auth strategy with db-postgres
or db-sqlite
, a migration is required. This is due to a new security feature (enabled by default) that stores a unique auth session identifier in the database.
To opt out and continue using the previous behavior, you can disable the feature by setting auth.useSessions: false
in your users collection config.
For example:
// payload.config.ts
collections: [
{
slug: 'users',
auth: {
useSessions: false,
},
fields: [],
},
],
disableBulkEdit
(#12850) (a5ec55c)draft: true
(#12868) (bc9b501)hasMany: true
select field in a relationship (#12916) (b74969d)database/int.spec.ts
with postgres custom schema (#12922) (cf87871)database
integration tests with postgres (#12919) (886c07e)data
argument in afterChange
hook for collections and globals (#12756) (458a04b)where
by ID (#12804) (9943b35)default
queue by default, adds support for allQueues argument (#12799) (06ad171)mongoose
to 8.15.1
(#12755) (860e0b4)drizzle-kit@0.31.0
and drizzle-orm@0.43.1
(#12256) (7045182)bnBD
and bnIN
translation imports to camelCase (#12736) (08fbcb5)buildPath
property (#12741) (38652d7)in
query with null
(#12661) (c08cdff)plugin-nested-docs
(#12494) (5635ec5)payload migrate:create
(#12596) (12395e4)migrate:reset
executes in a wrong order (#12445) (1b1e36e)'
character (#12590) (6888f13)๐ Folders (#10030) (00667fa)
Folders allow you to organize your documents in a more manageable way. Now you can enable folders on a per-collection basis and from there start adding folders from within the admin panel (or via the API). Once you have folders enabled you can then start organizing. You can create folders and store documents across multiple collection types and then view them either in the collection "By Folder" or in the global "Browse by Folder" view.
https://github.com/user-attachments/assets/da1e0dec-abc7-4e5c-9241-3a733b2bfa0c
withoutEnlargement
on update (#12291) (1235a18)hidden: true
for virtual fields that have reference to a relationship field (#12219) (1f6efe9)limit
from nested querying (#12464) (230128b)localized
value (#12414) (219fd01)@payloadcms/drizzle
(#12428) (38029cd)draft: true
(#12387) (fd67d46)near
sort query properly for point fields (#12240) (58fc2f9)dbName
in arrays regression with long generated drizzle relation names (#12237) (5fce501)filterOptions: { id: { in: [] } }
(#12408) (8ebadd4)nextPage
and prevPage
are non nullable even though they can be null
sometimes (#12201) (3fb81ef)relationTo
as an array (#12289) (c08c707)select
(#12266) (564fdb0)count
crashes when query contains subqueries and doesn't return any rows (#12273) (4a56597)limit: 0
is passed (#12261) (27d644f)beforeDocumentControls
slot to allow custom component injection next to document controls (#12104) (d553069)showSaveDraftButton
option to show draft button with autosave enabled (#12150) (34ea6ec)version
when not selected (#12158) (6dc61ae)near
operator is used (#12185) (9955818)useAsTitle
virtual fields linked with a relationship field (#11805) (1c99f46)createSchemaGenerator
(#12043) (71e3c78)where
querying by join fields (#12075) (466dcd7)relationTo
with overrideAccess: false
(#11999) (b9ffbc6)dbName
is used (#11995) (09782be)file
field is only serialized at top-level for upload-enabled collections (#12074) (112e081)_payload
& field explanation (#12025) (83319be)dev:generate-types
(#11994) (97e2e77)password
field when using disableLocalStrategy: true
(#11893) (8ad22eb)ValidationError
error message when label
is a function (#11904) (dc793d1)doc
input for scheduled publish job if it's enabled only for globals (#11892) (760cfad)deleteOne
fails when the where
query does not resolve to any document (#11632) (4ebd3ce)migrationTableExists
doesn't check in the current transaction (#11910) (f310c90)draft: true
when querying joins (#11869) (e5690fc)clientUploads.routerInputConfig
to the handler (#11962) (8e93ad8)modifiedOnly
default to true
(#11794) (21f7ba7)Query Presets allow you to save and share filters, columns, and sort orders for your collections. This is useful for reusing common or complex filtering patterns and column configurations across your team. Query Presets are defined on the fly by the users of your app, rather than being hard coded into the Payload Config.
https://github.com/user-attachments/assets/1fe1155e-ae78-4f59-9138-af352762a1d5
This release bumps the peer dependency version of Next.js to 15.2.3
to address a security vulnerability. Next.js Blog post here for more detail. (PR #11823).
NOTE: This vulnerability does not affect any of the functionality of Payload, as the framework does not leverage anything affected in the vulnerability. This would only affect you if you've built additional functionality on top of Payload using additional Next.js middleware.
draft: true
when querying docs for the join field (#11763) (1b2b6a1)This release upgrades the lexical dependency from 0.27.1
to 0.28.0
.
If you installed lexical manually, update it to 0.28.0
. 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:
node_modules
pnpm-lock.json
)pnpm install
)forceSelect
collection / global config property (#11627) (5e3d07b)id
to create operation data without custom IDs (#11709) (f442d22)select
& radio
field option labels accept JSX elements (#11658) (3c92fbd)useAsTitle
(#11707) (ef527fe)useDocumentInfo
(#11686) (ff2df62)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.
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:
node_modules
pnpm-lock.json
)pnpm install
)payload-locked-documents
collection (#11624) (8f3d1bd)updateVersion
read result (#11589) (e9afb36)i18n
configuration (#11590) (5d65cb0)payload migrate:create
flags (#11592) (3de1636)disablePayloadAccessControl: true
(#11530) (5cc0e74)clientUploads
is not set (#11527) (e36ab6a)indexes
default value sanitization (#11534) (f0ea918)upload.formatOptions
set file types (#11505) (c417e3a)prefix
configured (#11436) (fc42c40)mongoose-aggregate-paginate-v2
with a custom implementation (#10936) (d4d2bf4)sharp
to be specified in payload config (#11470) (d57a786)create-payload-app@latest
instead of @beta
(#11451) (e055565)strict: true
and noUncheckedIndexedAccess: true
(#11444) (79a7b4a)select
query exists (#11400) (526e535)bin
configuration for custom scripts (#11294) (f779e48)hasNextPage
with polymorphic joins (#11394) (6b6c289)useAsTitle
field is undefined (#11338) (09ca514)DiscardWithoutSaving
modal styles (#11381) (7bb1c9d)configToJSONSchema
(#11342) (a13d4fe)JSON.parse(JSON.stringify)
copying of results (#11293) (1dc748d)rateLimit
option (#11291) (c517e7e)page
query parameter for joins
(#10998) (847d8d8)hideFileInputOnCreate
and hideRemoveFile
to collection upload
config (#11217) (daaaa5f)countDistinct
works correctly and achieve better performance when the query has table joins (#11208) (513ba63)admin.readOnly: true
is set (#11184) (b1734b0)res
parameter in login
and resetPassword
operations (#11268) (38c1c11)payload-types.ts
for all test suites (#11238) (117949b)select
type errors (#11235) (e78500f)locked-documents
type errors (#11223) (ee0ac7f)blockReferences
(#11195) (2ae670e)resource={null}
to Media
component (#11228) (64d0217)handler
does not accept array of functions anymore (#11110) (1f3ccb8)usePayloadAPI
hook to React Hooks documentation (#11079) (d56de79)BlockquoteFeature
name (#11078) (87ba7f7)createdAt
, updatedAt
and globalType
fields (#10938) (57143b3)hasMany: true
with autosave doesn't work properly (#11012) (3ad56cd)pnpm dev
defaults to the _community test suite (#11044) (49d94d5)create
access control is false
(#10954) (136c90c)@ts-ignore
in seed to allow initial build on vercel (#10889) (2043b4a)