74233 Commits

Author SHA1 Message Date
Ben Lambert dee4283ccf feat: add pluginId to actions, server name/description config, dot separator for namespaced tools (#33344)
Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-17 08:47:51 +01:00
Charles de Dreuille 5096efc276 Merge pull request #33378 from backstage/fix/table-complete-mode-loading
Fix Table loading skeleton not showing for complete mode with getData
2026-03-17 07:18:44 +00:00
Charles de Dreuille 57726bf1c2 Merge pull request #33363 from shivamtiwari3/fix/table-replace-removed-bui-bg-tint-tokens
Fix: replace removed --bui-bg-tint tokens in Table component (fixes #33292)
2026-03-17 07:16:14 +00:00
Patrik Oldsberg be30fe0e03 Merge pull request #33193 from backstage/rugvip/nfs-icon-sizing
frontend-app-api: align icon sizing in nfs
2026-03-17 00:53:11 +01:00
Patrik Oldsberg 54ac62178e Merge pull request #33382 from backstage/rugvip/fix-app-config-setup
app: move app-specific config into root app-config.yaml
2026-03-16 22:09:38 +01:00
Patrik Oldsberg 55b18a3c2e Merge pull request #33113 from backstage/rugvip/docs-frontend-plugin-installation
docs: default frontend plugin docs to the new frontend system
2026-03-16 22:08:47 +01:00
benjdlambert 42960f1db7 feat: add actions CLI module for distributed actions registry
Adds @backstage/cli-module-actions with commands for listing and executing
actions from the distributed actions registry. Exports auth helpers from
cli-module-auth for cross-module reuse. Relaxes the actions registry auth
check to allow direct user invocations from the CLI.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-16 22:04:16 +01:00
Patrik Oldsberg 4581c003f9 Apply suggestions from code review
Co-authored-by: Patrik Oldsberg <poldsberg@gmail.com>
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-16 21:57:43 +01:00
Patrik Oldsberg 3b67b7ce6d Move app-specific config from packages/app into root app-config.yaml
The example app (packages/app) had a separate app-config.yaml that was
loaded via --config flags in the start script. This moves the NFS
configuration (routes, pluginOverrides, extensions) into the root
app-config.yaml and removes the --config flags so the app uses the
default config resolution.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 21:52:13 +01:00
Patrik Oldsberg db69a54419 Restore the App Visualizer nav item.
Add the App Visualizer navigation item back to the plugin extension list and include the regenerated API report for the restored public surface.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 21:39:40 +01:00
Patrik Oldsberg 80fed0e8f0 Preserve CSS sizing for translated system icons.
Keep the original icon element as the rendered root so legacy MUI-backed icons can still be styled through CSS like other Backstage UI icons.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 21:39:40 +01:00
Patrik Oldsberg c0ab3763e5 Fix tsc errors and add missing changeset
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 21:39:40 +01:00
Patrik Oldsberg 3f36ce1257 Clarify icon sizing rules for NFS icons
Document the IconElement sizing contract, ensure deprecated icon component registrations inherit size correctly, and add changesets for the affected icon migration packages.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 21:39:40 +01:00
Patrik Oldsberg ed8d9ce67c further NFS icon migration and alignment
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-16 21:39:40 +01:00
Patrik Oldsberg 22f101e208 Merge pull request #33368 from backstage/rugvip/add-frontend-dev-utils
frontend-dev-utils: add helper for plugin dev apps
2026-03-16 21:32:15 +01:00
Patrik Oldsberg 0a63d36c65 Merge pull request #33379 from backstage/rugvip/document-table-cell-requirement
ui: document table cell wrapper requirement
2026-03-16 21:18:41 +01:00
Patrik Oldsberg 0ebde15eef Add changeset for table cell documentation
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 20:39:11 +01:00
Patrik Oldsberg 1f25382e56 Move table cell requirement docs to docs-ui
Move the cell wrapper requirement documentation from the package
README to the docs-ui table component page where it belongs.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 20:27:02 +01:00
Patrik Oldsberg 872dc1025e ui: document table cell wrapper requirement
Added TSDoc comments to ColumnConfig.cell, RowRenderFn, CellProps,
CellTextProps, and CellProfileProps making it explicit that cell render
functions must return a cell component (Cell, CellText, or CellProfile)
as the top-level element. Also added a Table Cell Requirement section
to the package README with correct and incorrect usage examples.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 20:16:25 +01:00
Patrik Oldsberg 1decc6f994 Split legacy homepage getting started docs
Move the old frontend system homepage guide to its own companion page and add a banner to the main homepage guide that directs legacy users to the split-out documentation.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 20:04:16 +01:00
Patrik Oldsberg 90a02779fa Address remaining docs review feedback
Clarify the remaining old frontend system sections, tighten the scaffolder follow-up wording, and rename the docs sidebar entry to match the frontend system terminology used elsewhere.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 19:45:41 +01:00
Patrik Oldsberg 3f2788e1ef Merge pull request #33125 from davidfestal/add-bundle-command
feat(cli): add `backstage-cli package bundle` command for plugin dynamic loading
2026-03-16 19:26:01 +01:00
Patrik Oldsberg 1c00e25901 Preserve app loading fallback in createDevApp.
Only suspend the lazy BUI CSS import so the app root keeps its built-in loading UI, and lock that behavior down in the mocked render test.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 19:09:55 +01:00
Jonathan Roebuck 9314ff5162 Fix Table loading skeleton not showing for complete mode with getData
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-16 18:06:19 +00:00
Patrik Oldsberg 846fb1ea57 Fix TS2454 in createDevApp test
Use definite assignment assertions for variables assigned inside
jest.isolateModules callbacks.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 19:03:58 +01:00
Johan Persson 42f8c9b2b8 feat(ui): centralize routing in BUIProvider (#33267)
* feat(ui): centralize routing in BUIProvider

BUIProvider now auto-detects React Router context and provides
client-side navigation for all BUI components. Retired
InternalLinkProvider and added BUIRouterProvider as a public
export for integration use.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(plugin-app): move BUIProvider inside app router

Moved BUIProvider from wrapping AppRouter to being a child inside
it, so it detects the React Router context and provides client-side
routing for all BUI components.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(core-app-api): add BUIRouterProvider to legacy app router

Added BUIRouterProvider inside the legacy AppRouter to provide
React Aria routing for all BUI components.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* docs(ui): update BUIProvider documentation for routing

Updated installation docs to cover BUIProvider's routing role
and the requirement to render it inside a React Router context.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* refactor(ui): move BUIProvider from analytics to provider directory

BUIProvider now handles both analytics and routing, so it no longer
belongs in the analytics directory.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(ui): add BUIProvider to storybook stories with MemoryRouter

Added BUIProvider inside MemoryRouter in all stories that use
routing, so client-side navigation works in Storybook.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(plugin-app): move BUIProvider inside RouterComponent

Moved BUIProvider to wrap all content inside RouterComponent
so that extraElements (like dialogs) also get BUI context.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* refactor: replace BUIRouterProvider with BUIProvider in legacy app

Use BUIProvider directly inside the legacy AppRouter instead of a
separate BUIRouterProvider export. Removes BUIRouterProvider from
the public API of @backstage/ui.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* refactor(ui): inline routing logic into BUIProvider

Removed the routing/ directory and inlined the RouterProvider
setup directly into BUIProvider since it's the only consumer.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

---------

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-16 18:56:24 +01:00
Patrik Oldsberg a67b79bb21 Support React 17 rendering in createDevApp.
Align the dev app render path with the existing dev-utils helper, add a clearer missing-root error, and extend the tests to cover bindRoutes forwarding and env cleanup.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 18:54:04 +01:00
David Festal c19c288541 review(cli): refine the bundle command output expectations
Signed-off-by: David Festal <dfestal@redhat.com>
Assisted-by: Cursor
2026-03-16 18:42:36 +01:00
David Festal 4074a227c2 fix(backend-dynamic-feature-service): improve package resolution for bundled dynamic plugins
Updated `resolvePackagePath` to correctly resolve `package.json` for dynamic plugins that bundle their own copy of `@backstage/backend-plugin-api`. This change ensures that the resolution works for both the host application and bundled dependencies, enhancing compatibility with plugins created using the `backstage-cli package bundle` command.

Signed-off-by: David Festal <dfestal@redhat.com>
Assisted-by: Cursor
2026-03-16 18:42:07 +01:00
David Festal 551d729723 docs(backend-dynamic-feature-service): update README to mention the bundle command.
Signed-off-by: David Festal <dfestal@redhat.com>
Assisted-by: Cursor
Signed-off-by: David Festal <dfestal@redhat.com>
2026-03-16 18:37:00 +01:00
David Festal 62d08492c7 feat(cli): contribute a bundle command for dynamic loading
for both frontend and backend plugins.

Signed-off-by: David Festal <dfestal@redhat.com>
Assisted-by: Cursor
2026-03-16 18:36:46 +01:00
Fredrik Adelöw 1058260dc6 Merge pull request #33376 from backstage/freben/exit
exit pre
2026-03-16 17:22:30 +01:00
Fredrik Adelöw 78e9311f84 Merge pull request #33371 from backstage/dependabot/npm_and_yarn/undici-7.24.4
Bump undici from 5.29.0 to 7.24.4
2026-03-16 17:02:49 +01:00
Fredrik Adelöw a243b65b62 exit pre
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-16 16:52:27 +01:00
Patrik Oldsberg b1033a1fc9 Make createDevApp options explicit
Define createDevApp options directly so the helper only exposes features and a typed bindRoutes property without inheriting from createApp options.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:45:18 +01:00
Patrik Oldsberg ebeb0d4d8b Use frontend-dev-utils in new frontend plugin template
Update the new frontend plugin template to use createDevApp in its dev entry point and teach cli-module-new to resolve frontend-dev-utils versions for generated packages.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:13:02 +01:00
Patrik Oldsberg 989a1dcc9b Restrict createDevApp options
Limit createDevApp to features and bindRoutes so advanced createApp configuration stays out of the dev-app helper API.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg 21ba6588f9 Lazily load BUI CSS in createDevApp
Move the BUI stylesheet into a lazily rendered helper so importing frontend-dev-utils no longer triggers global CSS side effects.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg 1594749d8e Simplify createDevApp options
Accept createApp options at the top level in createDevApp and update the tests, docs, API report, and changeset to match the new shape.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg 2e5c65120a Fix PluginHeader ResizeObserver loop
Defer header height updates to avoid ResizeObserver loop warnings in FullPage layouts and normalize header actions before rendering.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg 8ea3899944 Add BUI CSS to createDevApp
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg db612a84ab Allow frontend-dev-utils in dependency verification exceptions
Add @backstage/frontend-dev-utils to the except list for the rule
that prevents web-library packages from depending on frontend-plugin
packages, since it legitimately wraps @backstage/plugin-app for
development environments.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg 63248c824e Bypass sign-in page in createDevApp
The dev app now automatically disables the sign-in page extension,
so plugins under development don't require authentication.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:28 +01:00
Patrik Oldsberg 0b4ed8550d Document createDevApp pattern for frontend plugin development
Add documentation for the new `@backstage/frontend-dev-utils` package
across three docs pages: the frontend system building plugins guide,
the CLI build system reference, and the project structure overview.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:27 +01:00
Patrik Oldsberg c25532a7a1 Add @backstage/frontend-dev-utils package
Adds a new `@backstage/frontend-dev-utils` package for the new frontend
system. It provides a minimal `createDevApp` helper for wiring up a
development app from a `dev/` entry point.

The app-visualizer plugin is updated to use this new package as the
initial testing ground.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-16 16:10:27 +01:00
Patrik Oldsberg 3775ef5b51 Merge pull request #33364 from backstage/rugvip/auth-provider-icon-element
frontend-plugin-api: accept IconElement in AuthProviderInfo
2026-03-16 16:10:13 +01:00
Patrik Oldsberg 99d80927bd Merge pull request #33367 from backstage/rugvip/reduce-frontend-plugin-api-surface
frontend-plugin-api: reduce top-level API surface clutter
2026-03-16 16:06:54 +01:00
Patrik Oldsberg d7ff199a69 Merge pull request #33366 from backstage/promote-plugin-wrapper-api
frontend-plugin-api: promote PluginWrapper API to stable with useWrapperValue hook
2026-03-16 16:06:35 +01:00
Charles de Dreuille 2f581de6ba Fixed keyboard navigation
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-16 14:51:49 +00:00
Johan Persson d9d2dd6827 feat(ui): add SearchAutocomplete component
Add SearchAutocomplete and SearchAutocompleteItem components for
building accessible search-with-results patterns. Built on React
Aria's Autocomplete with virtual focus for keyboard navigation
and a non-modal popover for results.

Features:
- Controlled input via inputValue/onInputChange
- Configurable popover width and placement
- Rich content support per result item
- Item selection via onAction
- defaultOpen prop for visual testing
- Close on interact outside and input clear

Includes Storybook stories, docs-ui documentation, changeset,
and API report.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-16 15:41:58 +01:00