This is the lookup companion to my guide to building custom Payload CMS admin fields and views. Use the guide when you want the full implementation workflow. Use this page when you already know what you are building and need to find the Payload-native component, field wrapper, admin control, or hook that fits the job.
The reference focuses on reusable pieces from @payloadcms/ui that come up repeatedly in production custom admin work. It is not a substitute for the types installed in your project. Payload's UI package evolves with Payload itself, so when a prop or export matters to production code, verify it against your installed version.
Import Rules for @payloadcms/ui
The most important rule is context.
Inside the Payload Admin Panel, import client UI components and hooks from the package entry point:
Payload also exposes @payloadcms/ui/rsc and @payloadcms/ui/shared for specific server or shared cases. Use those when the component or Payload documentation calls for them.
For frontend code outside the Payload Admin Panel, use deep imports so you do not bundle the entire admin UI package:
Common buttonStyle values include primary, secondary, error, subtle, pill, tab, icon-label, transparent, and none. Use one dominant primary action per local interface where possible.
ReactSelect
Use ReactSelect when you need Payload styling around a searchable or clearable select without adopting the full relationship field behavior.
Card works well for dashboard or summary navigation. Table is useful for compact list-style data. Tooltip adds Payload-native hover or focus help. Drawer and DrawerToggler provide a generic side overlay pattern when you do not need the higher-level document or list drawers.
Payload Field Wrappers
Use field wrappers when you want more than matching visuals. These components carry more of Payload's configured field behavior and form integration.
Use SelectInput for a Payload-managed select field when you already have the relevant field options and want the normal select behavior rather than a standalone ReactSelect.
RelationshipField
Use RelationshipField when the value is a relationship to one or more Payload collections and you want collection-aware behavior rather than manually fetching options.
In custom field work, prefer passing the real client field configuration supplied by Payload rather than reconstructing a partial field config by hand.
DateTimeField
Use DateTimeField when the custom interface should behave like a configured Payload date field. Use DatePickerField when you only need the calendar input primitive.
CheckboxField
Use CheckboxField when you need the complete Payload checkbox field behavior. For a custom compound UI, verify whether the field wrapper or a lighter primitive better matches your state model.
ArrayField
Use ArrayField when the native array experience already solves the problem. If the data entry workflow needs a radically different layout, reuse lower-level pieces such as Collapsible, DraggableSortable, Button, and the field primitives instead of rebuilding every visual detail.
BlocksField
Use BlocksField when you want Payload's standard block stack and chooser. If you are designing the schemas those blocks manage, see Creating Custom Block Types in Payload CMS.
UploadField
Use UploadField when you need the standard Payload upload relationship, preview, and field behavior.
TextareaInput
Use TextareaInput as the lightweight multi-line text primitive inside compound custom interfaces.
Admin and Document Controls
Payload also exposes higher-level controls that are useful when building complete custom views or document experiences.
Use DocumentControls when a custom document view should expose the familiar save, publish, and related document actions provided by Payload. It expects the relevant document context, so it is not a generic standalone toolbar.
StickyToolbar and Gutter
StickyToolbar gives custom views the same sticky header behavior as Payload's edit interfaces. Gutter keeps custom content aligned with the Admin Panel's standard horizontal spacing.
PublishButton, SaveButton, and SaveDraftButton
These are useful when you need individual document actions rather than the complete DocumentControls group. Prefer them over duplicating Payload's save or publish interaction logic.
DeleteDocument and DuplicateDocument
These provide the standard document-level destructive and duplication flows. Use them when your custom document interface still lives inside Payload's document context.
DocumentDrawer and ListDrawer
Use these higher-level drawers when you want Payload's document or collection list experience inside a side panel. Use the generic Drawer when the overlay contains your own custom content instead.
Hooks
useField
useField connects a client custom component to one field in Payload's form state.
Use it when the custom component owns or edits a specific field value.
useFormFields
Use useFormFields when a component needs to subscribe to selected form state outside its own field. A selector keeps the subscription narrow and reduces unnecessary re-renders.
useModal opens and closes modal instances by slug. Pair it with ConfirmationModal or other Payload modal components rather than maintaining a second modal state system.
Primitive or Field Wrapper?
A useful rule is to choose the lowest abstraction that still gives you the Payload behavior you need.
If you need
Prefer
Payload styling inside a compound custom UI
Primitives such as TextInput, ReactSelect, Button
Native configured field behavior
Field wrappers such as RelationshipField, DateTimeField, UploadField
Full document operations
Admin controls such as DocumentControls, SaveButton, PublishButton
Custom form state tied to one field
useField
Read other values in the same form
useFormFields
This avoids two common problems: rebuilding behavior Payload already provides, or importing a heavyweight field wrapper when a small visual primitive would be simpler.
Inspecting the Version Installed in Your Project
When a component is missing from this reference or a prop has changed, inspect your installed package rather than relying on an old blog post.
The generated .d.ts files are particularly useful because they describe the exports and props for the exact version in your lockfile.
Also keep the core Payload packages aligned on matching versions. If admin hooks or components behave as if their context is missing, duplicated or mismatched payload and @payloadcms/* packages are worth checking before debugging the component itself.
Reference Maintenance Notes
This page intentionally stays narrower than the tutorial. New production patterns belong in the custom admin UI guide when they need explanation. New reusable exports belong here when they are useful as lookup entries.
When upgrading Payload:
verify imports against the current Admin Panel guidance
diff relevant @payloadcms/ui type definitions
check whether field wrapper props changed
verify hooks against the installed version
re-test document controls inside real Payload context