diff --git a/.changeset/chilly-emus-roll.md b/.changeset/chilly-emus-roll.md
new file mode 100644
index 0000000000..1569820980
--- /dev/null
+++ b/.changeset/chilly-emus-roll.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-home': patch
+---
+
+Add name option to `createCardExtension` to remove deprecation warnings for extensions without name. Name will be required for extensions in a future release of `core-plugin-api` and therefore also in `createCardExtension`.
diff --git a/.changeset/mighty-gifts-visit.md b/.changeset/mighty-gifts-visit.md
new file mode 100644
index 0000000000..8ceab2906e
--- /dev/null
+++ b/.changeset/mighty-gifts-visit.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-bazaar': patch
+---
+
+Name extension to remove deprecation warning
diff --git a/.changeset/quiet-clocks-push.md b/.changeset/quiet-clocks-push.md
new file mode 100644
index 0000000000..3289e1886b
--- /dev/null
+++ b/.changeset/quiet-clocks-push.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-plugin-api': patch
+---
+
+Deprecate use of extensions without name. Adds a warning to the developer console to opt prompt integrators to provide names for extensions.
diff --git a/docs/features/software-catalog/catalog-customization.md b/docs/features/software-catalog/catalog-customization.md
index 8f855776a0..017285719a 100644
--- a/docs/features/software-catalog/catalog-customization.md
+++ b/docs/features/software-catalog/catalog-customization.md
@@ -172,6 +172,7 @@ This page itself can be exported as a routable extension in the plugin:
```ts
export const CustomCatalogIndexPage = myPlugin.provide(
createRoutableExtension({
+ name: 'CustomCatalogPage',
component: () =>
import('./components/CustomCatalogPage').then(m => m.CustomCatalogPage),
mountPoint: catalogRouteRef,
diff --git a/docs/plugins/composability.md b/docs/plugins/composability.md
index 8d22c05a79..33568ac561 100644
--- a/docs/plugins/composability.md
+++ b/docs/plugins/composability.md
@@ -136,6 +136,7 @@ a component:
```ts
export const FooPage = plugin.provide(
createRoutableExtension({
+ name: 'FooPage',
component: () => import('./components/FooPage').then(m => m.FooPage),
mountPoint: fooPageRouteRef,
}),
@@ -417,6 +418,7 @@ export const myPlugin = createPlugin({
export const MyPage = myPlugin.provide(
createRoutableExtension({
+ name: 'MyPage',
component: () => import('./components/MyPage').then(m => m.MyPage),
mountPoint: rootRouteRef,
}),
diff --git a/docs/plugins/plugin-development.md b/docs/plugins/plugin-development.md
index f61fae0968..362ecc5d5a 100644
--- a/docs/plugins/plugin-development.md
+++ b/docs/plugins/plugin-development.md
@@ -65,6 +65,7 @@ export const examplePlugin = createPlugin({
// Each extension should also be exported from your plugin package.
export const ExamplePage = examplePlugin.provide(
createRoutableExtension({
+ name: 'ExamplePage',
// The component needs to be lazy-loaded. It's what will actually be rendered in the end.
component: () =>
import('./components/ExampleComponent').then(m => m.ExampleComponent),
diff --git a/docs/plugins/structure-of-a-plugin.md b/docs/plugins/structure-of-a-plugin.md
index 83fcfbddba..9e8b67710a 100644
--- a/docs/plugins/structure-of-a-plugin.md
+++ b/docs/plugins/structure-of-a-plugin.md
@@ -73,6 +73,7 @@ export const examplePlugin = createPlugin({
export const ExamplePage = examplePlugin.provide(
createRoutableExtension({
+ name: 'ExamplePage',
component: () =>
import('./components/ExampleComponent').then(m => m.ExampleComponent),
mountPoint: rootRouteRef,
diff --git a/packages/core-app-api/src/app/App.test.tsx b/packages/core-app-api/src/app/App.test.tsx
index ab287a3ece..6ed5d45b86 100644
--- a/packages/core-app-api/src/app/App.test.tsx
+++ b/packages/core-app-api/src/app/App.test.tsx
@@ -169,6 +169,7 @@ describe('Integration Test', () => {
const NavigateComponent = plugin1.provide(
createRoutableExtension({
+ name: 'NavigateComponent',
component: () =>
Promise.resolve((_: PropsWithChildren<{ path?: string }>) => {
return