Skip to main content
A page is your own route inside the owner’s project, at /projects/:projectId/ext/:extensionId/:pageId. With nav: true it also gets an entry in the project navigation, with your vendor tile beside the name.

The manifest entry

The command writes this entry. You can hand-edit tappify.extension.json instead — the $schema line gives your editor completion and validation, and tappify extension doctor checks the result.

The component

TapPageProps carries params, the segments under your own page’s path, keyed by position alongside pageId and the unsplit path.
Sub-paths under your page are yours: tap.nav.push("/explore/funnels/123") navigates inside it and useTapParams() reads the segments back. See Navigate inside your page.

What the host renders

Tappify draws the project chrome — sidebar, header, breadcrumb — and mounts your component in the content area with tap.ui.size set to page. The navigation entry shows your vendor tile so an owner always knows whose page they are on. An organization-scoped extension cannot declare pages, tabs, widgets or series: those are project surfaces. Declare installScope: "project" if you need them.