Skip to main content

Customizing Pages

Existing pages in the Dashboard can be customized in many ways:

Most customizations should be implemented with these extension APIs rather than by copying or replacing a built-in route. Replacing a route is still possible by registering your own route, but it should normally be the last option because it means you take responsibility for keeping that whole page aligned with future Dashboard behavior.

Choose the Right Extension Point

I want to...Use this
Add a button to an existing page headerAction bar items
Add secondary page actions in the three-dot menuAction bar dropdown items
Add a panel to a detail page or replace an existing panelPage blocks
Hide a built-in panel conditionallyPage block shouldRender with order: 'replace'
Change how a table column rendersData table display components
Fetch extra fields for an existing list tableData table extendListDocument
Add bulk actions to a list tableData table bulk actions
Replace a native input on a detail formNative detail-page input overrides
Fetch extra fields for an existing detail pageDetail form extendDetailDocument
Add a custom input for a plugin-defined custom fieldCustom field components
Add a global icon button near alertsToolbar items
Move, remove, or rename navigation entriesNavigation modification
Find the IDs needed by extension APIsExtension targets and Dev Mode

Customization Flow

  1. Turn on Dev Mode and find the relevant IDs.
  2. Prefer the smallest extension point that matches the job, such as a page block, action bar item, data table extension, or detail form extension.
  3. If you need extra data, extend the page's GraphQL document rather than creating a parallel request when the data belongs to the page.
  4. Use components and utilities from @vendure/dashboard so the extension stays aligned with Dashboard styling and dependency versions.
  5. Only create a new route when you are adding a new workflow or intentionally replacing the whole page experience.
Was this chapter helpful?
Report Issue
Edited Jun 24, 2026ยทEdit this page