This roadmap covers all in-scope plugins in this monorepo (everything except the 🎨 Custom Fields group: color-picker, icon-select). It is the canonical place for community contributors to discover work items and pick something up.
💬 Want to help? Every bullet in this roadmap is mirrored as a public GitHub issue with the
RoadMaplabel. Filter them here:label:RoadMap. Come say hi on the Payload Discord #plugins channel.
| Label | Meaning |
|---|---|
| P0 | Must-have / explicitly requested. Targeted for the next release cycle. |
| P1 | High-value enhancement. Scheduled but not blocking. |
| P2 | Nice-to-have / long-tail polish. Community contributions especially welcome. |
- Quick Filter
- Right Panel
- Custom Version View
- Changes Button
- Comments
- Authorization
- Authors Info
- Reset List View
- Cross-Collection Config
- Field-type Component Override
- Cover Image
- Cross-Cutting Themes
- Delivery Waves
- How to contribute
See packages/quickfilter/README.md.
- Always align with Payload's built-in advanced filter. Filter state must round-trip with Payload's
wherequery so QuickFilter selections show up in Payload's advanced filter panel and vice-versa. Single source of truth = Payload's list controller. - Match Payload's UI styling, drop the per-project Tailwind requirement. Re-skin QuickFilter components with Payload's CSS variables / SCSS modules. If Payload 3.x style internals aren't exportable enough, ship a scoped CSS bundle as interim and target Payload 4.0 for the deep rewrite.
- Alignment with Payload's built-in advanced filter — read & write Payload's
wherequery directly; reuse Payload's operator set and field→operator mapping; honoradmin.disableListFilter,access.read,filterOptions; add a round-trip integration test intest-app/. - Tailwind removal / Payload-native styling — replace Tailwind utilities under
src/filters/components/*with Payload CSS variables + scoped class names; remove thetailwind.config.jssetup step from the README; fall back to Payload 4.0 if Payload 3.x style exports are insufficient. defaultOpenoption — plugin-level + per-collection override incollection.custom.filterList.optionsso the panel opens expanded on first paint.- Relationship filter — dropdown backed by the related collection (REST/GraphQL), async search,
useAsTitlerendering,where/filterOptionspassthrough; emits Payload's{ relationTo, value }shape. - Nested / group / array / blocks fields — extend the dotted-path resolver to walk
group.subField,array.0.subField, and block-typed children using Payload's advanced-filter path notation.
- Saved filter presets — persist named combinations to user
preferences; share-via-URL. - URL-as-source-of-truth — hydrate filter state from query string (
where) on mount; push changes back so deep-links survive refresh. - Number / range filter (slider + min/max) and text contains filter for
text/textarea/email, mapped to Payload'sgreater_than_equal/less_than_equal/like. - Conditional visibility —
showWhen: (state) => boolean. - Clear-all + per-row clear buttons; visual badge with active filter count.
- Mobile / narrow viewport layout — auto-collapse rows to a sheet.
- Public
useQuickFilter()hook for rendering filters outside the default toolbar slot. - Post-Payload-4.0 visual refresh once the new admin design system is GA.
See packages/right-panel/README.md.
- Bottom panel mode —
position: 'right' | 'bottom' | 'left'(collection-level override). Reuse the existing drawer container. - Enable on more views — explicit support for
listViewandversionsView, not only edit view.
- Pinned / resizable / collapsible panel with size persisted to user preferences.
- Multi-tab panel — stack several related collections as tabs in one drawer.
- Custom panel content slot —
admin.custom.rightPanel.componentaccepting a React component (useful for embeddingChanges,Comments, orAuthors Info). - Deep-link — encode the open record id in the URL hash.
- Keyboard shortcuts (
⌘\toggle,Escclose). - Mobile fallback (full-screen sheet).
See packages/custom-version-view/README.md.
- Configurable list columns —
listFields: string[](plugin-level default) +collection.custom.versionListFields(per-collection override). Resolve dotted paths the same way QuickFilter will. - Per-column renderers —
{ name, label, width, Cell }objects so users can drop in custom React cells (status pill, avatar, etc.).
- Filtering & search on the versions list (status, author, date range) — natural pairing with QuickFilter.
- Compare any two versions (currently only "vs published"); restore-with-diff confirmation.
- Group by day / author toggle.
- Pagination + virtualization for collections with thousands of versions.
- Export a single version as JSON.
- Color-coded change indicator (added / removed / changed counts) per row, reusing the
changes-buttondiff pipeline.
See packages/changes-button/README.md.
- AI-generated change summary at the top of the drawer:
- Pluggable
summarizeadapter (openai,anthropic,custom); plugin sends the structured diff + field metadata, receives a markdown summary + bullet list of risky changes. - Server-side via a new Payload endpoint registered by the plugin (API keys stay on the server).
- Cached per
(docId, fromVersion, toVersion). - Toggle per collection via
admin.custom.changesButton.aiSummary.
- Pluggable
- Inline approval workflow — "Request review" button creating a
change-requestrecord (or hooking intoauthorizationroles). - Comment-on-diff — reuse the
commentsplugin's Lexical mark on changed fields. - Filter the diff (only changed / added / removed; by tab/group).
- Copy summary / export diff as Markdown or PDF.
- Once upstream Payload PRs #16498 / #16499 land, drop
src/vendor/diffand the(payload)/layout.tsxedit; update install docs to one-liner. - Granular i18n for AI summaries (locale passed to adapter).
See packages/comments/README.md.
- Mentions (
@user) resolving from the Users collection + Payload notification / email. - Resolve / reopen state on threads (not just delete), with a "Show resolved" filter.
- Document-level comments (not tied to a Lexical mark) for
text/number/selectfields.
- Reactions (👍 ❤️ 👀) on a comment.
- Email / webhook digest of unresolved threads per document.
- Permission integration with the
authorizationplugin (comment-read/comment-write). - Markdown + attachments in comment body.
- Real-time presence indicators ("Alice is viewing") via SSE/WebSocket.
- Export thread to PDF for audit.
See packages/authorization/README.md.
- Deny-list mode for field permissions (today only allow-list). Many teams want "all fields except
internalNotes". - Row-level /
where-based permissions — permission entries carry awhereclause merged into Payload's access functions. - Role inheritance —
extends: ['editor'].
- Per-locale permissions for localized collections.
- Time-boxed permissions (
validFrom/validUntil). - Audit log of role/permission changes — surfaces nicely alongside
authors-info. - Admin UI matrix view — collections × roles × permissions, batch-edit.
- Import/export roles as JSON for environment promotion.
- CLI helper:
pnpm shefing-auth check <user> <collection>.
See packages/authors-info/README.md.
- Activity timeline tab reusing
custom-version-viewdata (created → edited → published → reverted). - Configurable display fields — choose which author attributes show in the tab and list columns.
- Surface in list views — opt-in column adapter for
Updated By/Published Byin any collection list.
- Editor presence ("currently being edited by …") with stale-lock cleanup.
- Email author on publish hook (configurable template).
- CSV / JSON export of activity for compliance.
See packages/reset-list-view/README.md.
- Granular reset menu — split into
Reset columns,Reset filters,Reset sort,Reset page size,Reset all. - Per-user default preset — admin can save a view and force it as the default for everyone.
- Named saved views per user with a quick switcher — pairs with QuickFilter saved presets.
- Auto-reset on logout option for shared workstations.
- Admin button to bulk-reset preferences for all users (e.g., after a schema change).
See packages/cross-collection/README.md.
- Type-safe override keys — TS union for the supported
admin.components.views.*paths. - Conditional overrides — apply only when
(collection, user, locale) => booleanreturns true. - Merge instead of replace mode for nested admin components.
- Override
admin.components.beforeList/afterList/beforeFields/afterFieldsacross many collections. - Per-collection allow-list (inverse of
excludedCollections).
See packages/field-type-components-override/README.md.
- Predicate matcher —
match: (field, ctx) => booleansupporting name/regex/admin.conditionmatching. - Override ordering & merge — deterministic precedence; deep-merge
admin.componentsinstead of replace. - Scope to collections / globals —
includedCollections/excludedCollections.
- Built-in override presets bundle (date pickers, slugify-on-blur, masked inputs) as opt-in helpers.
- Dev-time logger printing which override hit which field on boot.
- Storybook-style playground page (
/admin/_internal/field-overrides) listing every override + live preview.
See packages/cover-image/README.md.
- Cross-platform support — detect ffmpeg from
process.env.FFMPEG_PATHfirst, fall back toffmpeg-static; document macOS/Windows/Docker setup. - Multiple frames / sprite sheet —
frames: number | number[]for hover previews & chapter thumbnails. - Async / background generation via a Payload job/queue.
- Auto-poster + GIF preview outputs.
- Image processing options (target size, quality, blur, watermark overlay).
- Regenerate action available on each video document.
- Pluggable extractor (
extractor: 'ffmpeg' | 'cloudinary' | custom). - Deprecation guide once Payload's native video cover covers all use-cases.
Shared improvements that benefit every plugin:
- Attribute-Based Authorization (ABAC) — pluggable attribute providers (
geo,tenant,clearance, …) that compile to Payloadwhereclauses and merge with the existingauthorizationplugin's RBAC. One small extension point (AttributeProvider), no parallel permission engine. Tracking issue: #203.- v0.2 — Multi-value attribute support (next iteration): extend
tenantAttribute(and the engine) to handle users that belong to multiple values of an attribute simultaneously (e.g.user.tenants = ['tenant-a', 'tenant-b']). ThetoWhereoutput becomes{ tenant: { in: [...ids] } }andmatchchecks array membership. Closes the main gap vs. Payload's officialplugin-multi-tenantwhich supports atenants[]array per user with per-tenant roles. Also covers multi-region, multi-clearance, and any other set-valued attribute.
- v0.2 — Multi-value attribute support (next iteration): extend
- Unified options shape — extend every plugin's
excludedCollections/excludedGlobalswithincludedCollectionsandpredicate: (collection) => booleanfor parity. - Per-collection opt-in via
admin.custom.<pluginKey>documented in one place. - Centralized i18n — lift per-plugin
labels.ts(en/ar/es/fr/he/zh) into a shared@shefing/i18npackage. - Shared design tokens — extract Tailwind/CSS variables used across plugins into a shared
@shefing/uipackage; reduce style drift and remove the per-plugin Tailwind config requirement. - Telemetry / debug flag —
process.env.SHEFING_DEBUG=1toggles structured boot logs in every plugin. - Test harness — only
changes-buttonandcustom-version-viewship tests today; reusetest-app/+vitest.config.mtsto add smoke tests for every plugin. - Docs alignment — every plugin's README exposes the same sections (Install / Setup / Options / Collection Configuration / Roadmap).
- QuickFilter: align with Payload's built-in advanced filter, Tailwind-removal / Payload-styles,
defaultOpen, relationship filter, nested fields. - Right Panel: bottom position, enable on list/versions views.
- Custom Version View: configurable list columns + custom cell renderers.
- Changes Button: AI summary adapter.
- ABAC: multi-value attribute support (
tenants[]array,{ in: [...] }WHERE, arraymatch) — closes gap vs. officialplugin-multi-tenant. - Authorization: deny-list & row-level (
where) permissions, role inheritance. - Comments: mentions, resolve state, document-level comments.
- Reset List View: granular reset menu + admin-saved default view.
- Cross-Collection / Field Override: predicate matching + deterministic ordering.
- Cover Image: cross-platform ffmpeg + async generation.
- QuickFilter saved presets + URL sync; Right Panel multi-tab + custom content slot.
- Authors Info activity timeline; Custom Version View filtering & compare-any-two.
- Shared i18n / UI packages, debug flag, broader test coverage.
- Mobile layouts, keyboard shortcuts, exports (CSV / PDF), Storybook-style playgrounds.
- Drop
changes-buttonvendor diff once upstream Payload PRs #16498 + #16499 ship.
We track every roadmap bullet as a public GitHub issue so anyone can pick one up.
- Browse the open list:
label:RoadMap. Filter further byplugin:<name>orpriority:P0|P1|P2. - Claim an item by commenting on the issue (e.g. "I'd like to work on this"). A maintainer will assign it to you to avoid duplicate work.
- Open a PR referencing the issue (
Closes #<n>). Match the existing code style of the plugin and add/update tests undertest-app/where applicable. - Discuss design questions on the issue or in the Payload Discord #plugins channel before doing large rewrites.
Each RoadMap issue follows a short template:
Problem — what's missing / painful today. Proposed solution — the shape of the API or UI change. Acceptance criteria — how we'll know it's done. How to claim — comment on the issue to be assigned.
Thanks for helping make Payload's plugin ecosystem better! 💜