Widget fields with configuration UI — v3.78
Building on the dashboard widget system, Payload now supports widgets with their own editable settings. Editors can configure widget behavior directly from the admin panel without any code changes. This makes dashboards genuinely dynamic — not just developer-configured at build time.
2export default buildConfig({
7 slug: "recent-activity",
8 Component: "@/components/widgets/RecentActivityWidget",
9 label: "Recent Activity",
16 label: "Number of items to show",
21 options: ["posts", "orders", "users"],
22 label: "Collection to watch",
11export default function RecentActivityWidget({ data }: Props) {
15 Recent {data.collection} (last {data.limit})
Client components as custom collection views — v3.84
You can now use client-side React components as fully custom views for any collection. This unlocks rich, interactive admin experiences — custom tables, drag-and-drop interfaces, data dashboards — all within the Payload admin. It's one of the biggest steps forward for teams who need the admin to feel like a purpose-built tool rather than a generic CMS.
2export const Products: CollectionConfig = {
9 Component: "@/components/admin/ProductGridView",
14 Component: "@/components/admin/ProductAnalyticsView",
4import { useListQuery } from "@payloadcms/ui";
6export default function ProductGridView() {
7 const { data } = useListQuery();
13 gridTemplateColumns: "repeat(3, 1fr)",
17 {data?.docs.map((product) => (
18 <div key={product.id}>
19 <img src={product.image?.url} alt={product.title} />
20 <h3>{product.title}</h3>
Expanded plugin API — v3.83
The plugin system received a significant upgrade: plugins can now declare execution order, discover other registered plugins by slug, and assign priority values. This makes it possible to build plugins that coordinate intelligently with each other without relying on fragile load-order assumptions.
1import { definePlugin } from "payload";
3export const myPlugin = definePlugin({
4 slug: "my-analytics-plugin",
7 plugin: (incomingConfig) => {
10 collections: [...(incomingConfig.collections || []), AnalyticsCollection],
16export const myDashboardPlugin = definePlugin({
17 slug: "my-dashboard-plugin",
19 plugin: (incomingConfig) => {
21 const analyticsPlugin = incomingConfig.plugins?.find(
22 (p) => (p as any).slug === "my-analytics-plugin",
Editable query presets — v3.78
Query presets let teams save and reuse filter configurations as named views on collection list pages. In v3.78, these became editable directly from the document form view — meaning editors can create and manage their saved filters without navigating back to the list. If your team works with complex filter combinations regularly, this removes a lot of repetitive setup.