# HubSpot App Pages
## Overview
App pages are React-based multi-page experiences for your app in HubSpot. Built with a client-side router, they support multiple routes, in-app navigation, breadcrumbs, and header actions — all using HubSpot's UI extension components.
App pages are stored in the `src/app/pages/` directory of your HubSpot project.
## File Structure
```
src/app/pages/
├── Pages.tsx # Router entry point and layout
├── HomePage.tsx # Home (index) route
├── DocsPage.tsx # Documentation route
├── pages-hsmeta.json # Extension configuration
├── package.json # Dependencies
└── HUBSPOT_PAGES.md # This file
```
## Router Setup
The router is created with `createPageRouter` and `PageRoutes` from `@hubspot/ui-extensions/pages`:
```tsx
import { createPageRouter, PageRoutes } from '@hubspot/ui-extensions/pages';
const PageRouter = createPageRouter(
<PageRoutes layoutComponent={PageLayout}>
<PageRoutes.IndexRoute component={HomePage} />
<PageRoutes.Route path="/docs" component={DocsPage} />
</PageRoutes>,
);
hubspot.extend<'pages'>(() => <PageRouter />);
```
- `PageRoutes.IndexRoute` renders at the root path
- `PageRoutes.Route` renders at the specified `path`
- `layoutComponent` wraps all routes with shared UI (like the header)
## Layout and PageHeader
The `PageHeader` component adds action buttons to the app's header area. It supports a primary action and multiple secondary actions:
```tsx
import { PageHeader } from '@hubspot/ui-extensions/pages';
<PageHeader>
<PageHeader.PrimaryAction>
<PageHeader.Link href="https://example.com">External Link</PageHeader.Link>
</PageHeader.PrimaryAction>
<PageHeader.SecondaryActions>
<PageHeader.Link onClick={() => console.log('clicked')}>
Action
</PageHeader.Link>
</PageHeader.SecondaryActions>
</PageHeader>;
```
## In-App Navigation with PageLink
Use `PageLink` to navigate between routes within your app:
```tsx
import { PageLink } from '@hubspot/ui-extensions/pages';
<PageLink to="/docs">Go to Documentation</PageLink>;
```
## Breadcrumbs
`PageBreadcrumbs` provides navigation context. Use `PageBreadcrumbs.PageLink` for clickable breadcrumb links and `PageBreadcrumbs.Current` for the active page:
```tsx
import { PageBreadcrumbs } from '@hubspot/ui-extensions/pages';
<PageBreadcrumbs>
<PageBreadcrumbs.PageLink to="/">Home</PageBreadcrumbs.PageLink>
<PageBreadcrumbs.Current>Documentation</PageBreadcrumbs.Current>
</PageBreadcrumbs>;
```
## Page Titles
Use `PageTitle` to set the heading for each page:
```tsx
import { PageTitle } from '@hubspot/ui-extensions/pages';
<PageTitle>Documentation</PageTitle>;
```
## Resources
- [App Pages Overview](https://developers.hubspot.com/docs/apps/developer-platform/add-features/ui-extensions/extension-points/app-pages/overview): Guide to creating app pages
- [UI Extension Components](https://developers.hubspot.com/docs/platform/ui-components): Library of available UI components
- [UI Extensions SDK](https://developers.hubspot.com/docs/apps/developer-platform/add-features/ui-extensibility/ui-extensions-sdk): Available utilities and methods