πΊοΈ Payload Tools
May 13, 2026 Β· View on GitHub
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.
Legend
| 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. |
Table of Contents
- 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
Quick Filter
See packages/quickfilter/README.md.
Guiding principles
- 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.
P0
- 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.
P1
- 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.
P2
- 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.
Right Panel
See packages/right-panel/README.md.
P0
- 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.
P1
- 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.
P2
- Keyboard shortcuts (
β\toggle,Escclose). - Mobile fallback (full-screen sheet).
Custom Version View
See packages/custom-version-view/README.md.
P0
- 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.).
P1
- 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.
P2
- Export a single version as JSON.
- Color-coded change indicator (added / removed / changed counts) per row, reusing the
changes-buttondiff pipeline.
Changes Button
See packages/changes-button/README.md.
P0
- 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
P1
- 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.
P2
- 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).
Comments
See packages/comments/README.md.
P0
- 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.
P1
- 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.
P2
- Real-time presence indicators ("Alice is viewing") via SSE/WebSocket.
- Export thread to PDF for audit.
Authorization
See packages/authorization/README.md.
P0
- 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'].
P1
- 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.
P2
- Import/export roles as JSON for environment promotion.
- CLI helper:
pnpm shefing-auth check <user> <collection>.
Authors Info
See packages/authors-info/README.md.
P0
- 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.
P1
- Editor presence ("currently being edited by β¦") with stale-lock cleanup.
- Email author on publish hook (configurable template).
P2
- CSV / JSON export of activity for compliance.
Reset List View
See packages/reset-list-view/README.md.
P0
- 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.
P1
- Named saved views per user with a quick switcher β pairs with QuickFilter saved presets.
- Auto-reset on logout option for shared workstations.
P2
- Admin button to bulk-reset preferences for all users (e.g., after a schema change).
Cross-Collection Config
See packages/cross-collection/README.md.
P0
- 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.
P1
- Override
admin.components.beforeList/afterList/beforeFields/afterFieldsacross many collections. - Per-collection allow-list (inverse of
excludedCollections).
Field-type Component Override
See packages/field-type-components-override/README.md.
P0
- 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.
P1
- 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.
P2
- Storybook-style playground page (
/admin/_internal/field-overrides) listing every override + live preview.
Cover Image
See packages/cover-image/README.md.
P0
- 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.
P1
- Auto-poster + GIF preview outputs.
- Image processing options (target size, quality, blur, watermark overlay).
- Regenerate action available on each video document.
P2
- Pluggable extractor (
extractor: 'ffmpeg' | 'cloudinary' | custom). - Deprecation guide once Payload's native video cover covers all use-cases.
Cross-Cutting Themes
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).
Delivery Waves
Wave 1 β User-requested P0
- 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.
Wave 2 β High-value P0
- 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.
Wave 3 β P1 enhancements
- 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.
Wave 4 β P2 / nice-to-have
- Mobile layouts, keyboard shortcuts, exports (CSV / PDF), Storybook-style playgrounds.
- Drop
changes-buttonvendor diff once upstream Payload PRs #16498 + #16499 ship.
How to contribute
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! π