Simplify your stack and build anything. Or everything.
Build tomorrow’s web with a modern solution you truly own.
Code-based nature means you can build on top of it to power anything.
It’s time to take back your content infrastructure.

Collection Configs

A Collection is a group of records, called Documents, that all share a common schema. You can define as many Collections as your application needs. Each Document in a Collection is stored in the Database based on the Fields that you define, and automatically generates a Local API, REST API, and GraphQL API used to manage your Documents.

Collections are also used to achieve Authentication in Payload. By defining a Collection with auth options, that Collection receives additional operations to support user authentication.

Collections are the primary way to structure recurring data in your application, such as users, products, pages, posts, and other types of content that you might want to manage. Each Collection can have its own unique Access Control, Hooks, Admin Options, and more.

To define a Collection Config, use the collection property in your Payload Config:

1
import { buildConfig } from 'payload'
2
3
export default buildConfig({
4
// ...
5
collections: [
6
// Your Collections go here
7
],
8
})

Config Options

It's often best practice to write your Collections in separate files and then import them into the main Payload Config.

Here is what a simple Collection Config might look like:

1
import type { CollectionConfig } from 'payload'
2
3
export const Posts: CollectionConfig = {
4
slug: 'posts',
5
fields: [
6
{
7
name: 'title',
8
type: 'text',
9
}
10
]
11
}

The following options are available:

Option

Description

admin

The configuration options for the Admin Panel. More details.

access

Provide Access Control functions to define exactly who should be able to do what with Documents in this Collection. More details.

auth

Specify options if you would like this Collection to feature authentication. More details.

custom

Extension point for adding custom data (e.g. for plugins)

disableDuplicate

When true, do not show the "Duplicate" button while editing documents within this Collection and prevent duplicate from all APIs.

defaultSort

Pass a top-level field to sort by default in the Collection List View. Prefix the name of the field with a minus symbol ("-") to sort in descending order. Multiple fields can be specified by using a string array.

dbName

Custom table or Collection name depending on the Database Adapter. Auto-generated from slug if not defined.

endpoints

Add custom routes to the REST API. Set to false to disable routes. More details.

fields *

Array of field types that will determine the structure and functionality of the data stored within this Collection. More details.

graphQL

Manage GraphQL-related properties for this collection. More

hooks

Entry point for Hooks. More details.

labels

Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined.

lockDocuments

Enables or disables document locking. By default, document locking is enabled. Set to an object to configure, or set to false to disable locking. More details.

slug *

Unique, URL-friendly string that will act as an identifier for this Collection.

timestamps

Set to false to disable documents' automatically generated createdAt and updatedAt timestamps.

typescript

An object with property interface as the text used in schema generation. Auto-generated from slug if not defined.

upload

Specify options if you would like this Collection to support file uploads. For more, consult the Uploads documentation.

versions

Set to true to enable default options, or configure with object properties. More details.

defaultPopulate

Specify which fields to select when this Collection is populated from another document. More Details.

* An asterisk denotes that a property is required.

Fields

Fields define the schema of the Documents within a Collection. To learn more, go to the Fields documentation.

Access Control

Collection Access Control determines what a user can and cannot do with any given Document within a Collection. To learn more, go to the Access Control documentation.

Hooks

Collection Hooks allow you to tie into the lifecycle of your Documents so you can execute your own logic during specific events. To learn more, go to the Hooks documentation.

Admin Options

The behavior of Collections within the Admin Panel can be fully customized to fit the needs of your application. This includes grouping or hiding their navigation links, adding Custom Components, selecting which fields to display in the List View, and more.

To configure Admin Options for Collections, use the admin property in your Collection Config:

1
import type { CollectionConfig } from 'payload'
2
3
export const MyCollection: CollectionConfig = {
4
// ...
5
admin: {
6
// ...
7
},
8
}

The following options are available:

Option

Description

group

Text or localization object used to group Collection and Global links in the admin navigation. Set to false to hide the link from the navigation while keeping its routes accessible.

hidden

Set to true or a function, called with the current user, returning true to exclude this Collection from navigation and admin routing.

hooks

Admin-specific hooks for this Collection. More details.

useAsTitle

Specify a top-level field to use for a document title throughout the Admin Panel. If no field is defined, the ID of the document is used as the title. A field with virtual: true cannot be used as the title.

description

Text to display below the Collection label in the List View to give editors more information. Alternatively, you can use the admin.components.Description to render a React component. More details.

defaultColumns

Array of field names that correspond to which columns to show by default in this Collection's List View.

hideAPIURL

Hides the "API URL" meta field while editing documents within this Collection.

enableRichTextLink

The Rich Text field features a Link element which allows for users to automatically reference related documents within their rich text. Set to true by default.

enableRichTextRelationship

The Rich Text field features a Relationship element which allows for users to automatically reference related documents within their rich text. Set to true by default.

meta

Page metadata overrides to apply to this Collection within the Admin Panel. More details.

preview

Function to generate preview URLs within the Admin Panel that can point to your app. More details.

livePreview

Enable real-time editing for instant visual feedback of your front-end application. More details.

components

Swap in your own React components to be used within this Collection. More details.

listSearchableFields

Specify which fields should be searched in the List search view. More details.

pagination

Set pagination-specific options for this Collection. More details.

baseListFilter

You can define a default base filter for this collection's List view, which will be merged into any filters that the user performs.

Custom Components

Collections can set their own Custom Components which only apply to Collection-specific UI within the Admin Panel. This includes elements such as the Save Button, or entire layouts such as the Edit View.

To override Collection Components, use the admin.components property in your Collection Config:

1
import type { CollectionConfig } from 'payload'
2
3
export const MyCollection: CollectionConfig = {
4
// ...
5
admin: {
6
components: {
7
// ...
8
},
9
},
10
}

The following options are available:

Option

Description

afterList

An array of components to inject after the built-in List View. More details.

afterListTable

An array of components to inject after the built-in List View's table. More details.

beforeList

An array of components to inject before the built-in List View. More details.

beforeListTable

An array of components to inject before the built-in List View's table. More details.

listMenuItems

An array of components to render within a menu next to the List Controls (after the Columns and Filters options)

Description

A component to render below the Collection label in the List View. An alternative to the admin.description property. More details.

edit

Override specific components within the Edit View. More details.

views

Override or create new views within the Admin Panel. More details.

Edit View Options

1
import type { CollectionCOnfig } from 'payload'
2
3
export const MyCollection: CollectionCOnfig = {
4
// ...
5
admin: {
6
components: {
7
edit: {
8
// ...
9
},
10
},
11
},
12
}

The following options are available:

Option

Description

SaveButton

Replace the default Save Button within the Edit View. Drafts must be disabled. More details.

SaveDraftButton

Replace the default Save Draft Button within the Edit View. Drafts must be enabled and autosave must be disabled. More details.

PublishButton

Replace the default Publish Button within the Edit View. Drafts must be enabled. More details.

PreviewButton

Replace the default Preview Button within the Edit View. Preview must be enabled. More details.

Upload

Replace the default Upload component within the Edit View. Upload must be enabled. More details.

All Collections receive their own List View which displays a paginated list of documents that can be sorted and filtered. The pagination behavior of the List View can be customized on a per-Collection basis, and uses the same Pagination API that Payload provides.

To configure pagination options, use the admin.pagination property in your Collection Config:

1
import type { CollectionConfig } from 'payload'
2
3
export const Posts: CollectionConfig = {
4
// ...
5
admin: {
6
pagination: {
7
defaultLimit: 10,
8
limits: [10, 20, 50],
9
},
10
},
11
}

The following options are available:

Option

Description

defaultLimit

Integer that specifies the default per-page limit that should be used. Defaults to 10.

limits

Provide an array of integers to use as per-page options for admins to choose from in the List View.

List Searchable Fields

In the List View, there is a "search" box that allows you to quickly find a document through a simple text search. By default, it searches on the ID field. If defined, the admin.useAsTitle field is used. Or, you can explicitly define which fields to search based on the needs of your application.

To define which fields should be searched, use the admin.listSearchableFields property in your Collection Config:

1
import type { CollectionConfig } from 'payload'
2
3
export const Posts: CollectionConfig = {
4
// ...
5
admin: {
6
listSearchableFields: ['title', 'slug'],
7
},
8
}

GraphQL

You can completely disable GraphQL for this collection by passing graphQL: false to your collection config. This will completely disable all queries, mutations, and types from appearing in your GraphQL schema.

You can also pass an object to the collection's graphQL property, which allows you to define the following properties:

Option

Description

singularName

Override the "singular" name that will be used in GraphQL schema generation.

pluralName

Override the "plural" name that will be used in GraphQL schema generation.

disableQueries

Disable all GraphQL queries that correspond to this collection by passing true.

disableMutations

Disable all GraphQL mutations that correspond to this collection by passing true.

TypeScript

You can import types from Payload to help make writing your Collection configs easier and type-safe. There are two main types that represent the Collection Config, CollectionConfig and SanitizeCollectionConfig.

The CollectionConfig type represents a raw Collection Config in its full form, where only the bare minimum properties are marked as required. The SanitizedCollectionConfig type represents a Collection Config after it has been fully sanitized. Generally, this is only used internally by Payload.

1
import type { CollectionConfig, SanitizedCollectionConfig } from 'payload'
Next

Global Configs