diff --git a/docs/router/framework/react/api/router.md b/docs/router/framework/react/api/router.md
index ad3a58f8512..e760a073788 100644
--- a/docs/router/framework/react/api/router.md
+++ b/docs/router/framework/react/api/router.md
@@ -32,6 +32,7 @@ title: Router API
- [``](../router/linkComponent.md)
- [``](../router/matchRouteComponent.md)
- [``](../router/navigateComponent.md)
+ - [``](../router/notFoundComponentComponent.md)
- [``](../router/outletComponent.md)
- Hooks
- [`useAwaited`](../router/useAwaitedHook.md)
diff --git a/docs/router/framework/react/api/router/notFoundComponentComponent.md b/docs/router/framework/react/api/router/notFoundComponentComponent.md
new file mode 100644
index 00000000000..63b9f93ae05
--- /dev/null
+++ b/docs/router/framework/react/api/router/notFoundComponentComponent.md
@@ -0,0 +1,36 @@
+---
+id: notFoundComponentComponent
+title: NotFoundComponent component
+---
+
+The `NotFoundComponent` component is a component that renders when a not-found error occurs in a route.
+
+## NotFoundComponent props
+
+The `NotFoundComponent` component accepts the following props:
+
+### `props.data` prop
+
+- Type: `unknown`
+- Optional
+- Custom data that is passed to the `notFoundComponent` when the not-found error is handled
+- This data comes from the `data` property of the `NotFoundError` object
+
+### `props.isNotFound` prop
+
+- Type: `boolean`
+- Required
+- A boolean value indicating whether the current state is a not-found error state
+- This value is always `true`
+
+### `props.routeId` prop
+
+- Type: `RouteIds`
+- Required
+- The ID of the route that is attempting to handle the not-found error
+- Must be one of the valid route IDs from the router's route tree
+
+## NotFoundComponent returns
+
+- Returns appropriate UI for not-found error situations
+- Typically includes a "page not found" message along with links to go home or navigate to previous pages
diff --git a/examples/react/kitchen-sink/src/main.tsx b/examples/react/kitchen-sink/src/main.tsx
index e22afc9fc49..ce7687c6669 100644
--- a/examples/react/kitchen-sink/src/main.tsx
+++ b/examples/react/kitchen-sink/src/main.tsx
@@ -11,6 +11,7 @@ import {
createRoute,
createRouter,
lazyRouteComponent,
+ notFound,
redirect,
retainSearchParams,
useNavigate,
@@ -29,6 +30,7 @@ import {
postInvoice,
} from './mockTodos'
import { useMutation } from './useMutation'
+import type { NotFoundRouteProps } from '@tanstack/react-router'
import type { Invoice } from './mockTodos'
import './styles.css'
@@ -36,6 +38,39 @@ import './styles.css'
type UsersViewSortBy = 'name' | 'id' | 'email'
+type MissingUserData = {
+ userId: number
+}
+
+function isMissingUserData(data: unknown): data is MissingUserData {
+ return (
+ typeof data === 'object' &&
+ data !== null &&
+ typeof (data as { userId?: unknown }).userId === 'number'
+ )
+}
+
+function UsersNotFoundComponent({ data, routeId }: NotFoundRouteProps) {
+ const userId = isMissingUserData(data) ? data.userId : undefined
+
+ return (
+
+
User not found
+
+ {typeof userId === 'number'
+ ? `We couldn't find a user with ID ${userId}.`
+ : "We couldn't find the requested user."}
+
+
+ Rendered by the "{routeId}" route.
+
+
+ Pick another user from the list on the left to continue.
+