diff --git a/.changeset/metal-candles-tease.md b/.changeset/metal-candles-tease.md
new file mode 100644
index 0000000000..a48df562e4
--- /dev/null
+++ b/.changeset/metal-candles-tease.md
@@ -0,0 +1,5 @@
+---
+'@backstage/dev-utils': patch
+---
+
+Fixed routing when using React Router v6 stable.
diff --git a/packages/dev-utils/src/devApp/render.tsx b/packages/dev-utils/src/devApp/render.tsx
index 5cd77528a4..e04779b4d1 100644
--- a/packages/dev-utils/src/devApp/render.tsx
+++ b/packages/dev-utils/src/devApp/render.tsx
@@ -46,16 +46,23 @@ import { Box } from '@material-ui/core';
import BookmarkIcon from '@material-ui/icons/Bookmark';
import React, { ComponentType, ReactNode } from 'react';
import ReactDOM from 'react-dom';
-import { Route } from 'react-router';
+import { createRoutesFromChildren, Route } from 'react-router';
import { SidebarThemeSwitcher } from './SidebarThemeSwitcher';
-const GatheringRoute: (props: {
+export function isReactRouterBeta(): boolean {
+ const [obj] = createRoutesFromChildren(} />);
+ return !obj.index;
+}
+
+const MaybeGatheringRoute: (props: {
path: string;
element: JSX.Element;
children?: ReactNode;
}) => JSX.Element = ({ element }) => element;
-attachComponentData(GatheringRoute, 'core.gatherMountPoints', true);
+if (isReactRouterBeta()) {
+ attachComponentData(MaybeGatheringRoute, 'core.gatherMountPoints', true);
+}
/** @public */
export type DevAppPageOptions = {
@@ -136,7 +143,7 @@ export class DevAppBuilder {
);
}
this.routes.push(
-