Skip to main content

Creating Pages

Page Structure

All pages in the Dashboard follow this structure:

src/plugins/example/dashboard/test-page.tsx

Following this structure ensures that:

  • Your pages look consistent with the rest of the Dashboard
  • Your page content is responsive
  • Your page can be further extended using the pageBlocks API
Info

Note that the ListPage and DetailPage components internally use this same structure, so when using those top-level components you don't need to wrap them in Page etc.

Block Columns

The PageLayout arranges its PageBlock children into columns based on each block's column prop:

  • main: the wider main content area
  • side: the narrower sidebar
  • full: spans the full width of the layout, above the main/side columns
src/plugins/example/dashboard/test-page.tsx
Info

Full-width blocks are always rendered above the main/side columns, regardless of their order among the PageLayout children. This makes column="full" well-suited to wide content such as data tables on list pages.

Full-width without a card

A PageBlock wraps its content in a bordered card. If you want a full-width block with no card chrome — for example, a block that supplies its own container such as a DataTable — use the FullWidthPageBlock component instead:

Tsx

Page Routes & Navigation

Once you have defined a page component, you'll need to make it accessible to users with:

  • A route (url) by which it can be accessed
  • Usually a navigation bar entry in the main side navigation of the Dashboard

Both of these are handled using the DashboardRouteDefinition API:

src/plugins/example/dashboard/index.tsx
Info

For a complete guide to the navigation options available, see the Navigation guide

Was this chapter helpful?
Report Issue
Edited Jun 12, 2026·Edit this page