backstage / backstage/community-plugins

MUI to BUI migration tracker

Open
#7,023 0 comments 0 reactions 0 assignees View on GitHub
automated do-not-stale
Dominant language
TypeScript
Stars
422
Forks
697
Avg merge
2d 6h
Merged PRs (30d)
286

Description

## πŸš€ Migration Status Overview

This issue tracks the progress of migrating from Material-UI to `@backstage/ui` components across all workspace plugins in the Community Plugins repository.

```
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 16.4% Complete
```

| Status | Workspaces | Percentage |
|--------|------------|------------|
| βœ… Fully Migrated | 12 | 12.6% |
| πŸ”„ Mixed (Partial) | 14 | 14.7% |
| ❌ Not Started | 69 | 72.6% |

## πŸ“¦ Per-Workspace Status

| Workspace | Total Files | MUI Files | BUI Files | Status | Progress |
|-----------|-------------|-----------|-----------|--------|----------|
| `kiali` | 373 | 105 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `cost-insights` | 217 | 69 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `apiiro` | 193 | 57 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `git-release-manager` | 134 | 34 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `ilert` | 72 | 29 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `mcp-chat` | 97 | 25 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `bazaar` | 78 | 22 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `mend` | 88 | 22 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `tech-radar` | 67 | 12 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `mta` | 42 | 11 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `report-portal` | 57 | 11 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `cicd-statistics` | 63 | 10 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `splunk` | 37 | 10 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `acs` | 26 | 9 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `servicenow` | 90 | 9 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `agent-forge` | 29 | 8 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `codescene` | 28 | 8 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `feedback` | 68 | 8 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `lighthouse` | 45 | 8 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `newrelic` | 42 | 8 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `microsoft-calendar` | 22 | 7 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `n8n` | 39 | 7 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `sonarqube` | 61 | 7 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `apache-airflow` | 32 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `entity-validation` | 24 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `gcalendar` | 30 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `gitops-profiles` | 24 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `jenkins` | 86 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `shortcuts` | 23 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `wheel-of-names` | 19 | 6 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `bitrise` | 31 | 5 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `ocm` | 56 | 5 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `bitbucket-pull-requests` | 20 | 4 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `code-coverage` | 43 | 4 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `entity-feedback` | 57 | 4 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `linkerd` | 30 | 4 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `npm` | 41 | 4 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `puppetdb` | 28 | 4 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `airbrake` | 39 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `akeyless` | 39 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `blackduck` | 41 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `checkmarx` | 40 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `fossa` | 22 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `gcp-projects` | 20 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `gocd` | 22 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `graphiql` | 22 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `healert` | 20 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `octopus-deploy` | 25 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `sentry` | 35 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `stack-overflow` | 26 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `stackstorm` | 27 | 3 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `adr` | 38 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `code-climate` | 19 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `dynatrace` | 34 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `firehydrant` | 21 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `grafana` | 34 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `jaeger` | 25 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `opencost` | 27 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `vault` | 40 | 2 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `azure-sites` | 31 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `azure-storage-explorer` | 26 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `badges` | 30 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `confluence` | 30 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `graphql-voyager` | 16 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `growthbook-flags` | 24 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `kafka` | 37 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `nomad` | 21 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `rollbar` | 38 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `todo` | 34 | 1 | 0 | ❌ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 0% |
| `rbac` | 264 | 43 | 4 | πŸ”„ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 9% |
| `argocd` | 186 | 34 | 3 | πŸ”„ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 8% |
| `tekton` | 166 | 33 | 4 | πŸ”„ | β–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 11% |
| `multi-source-security-viewer` | 87 | 29 | 2 | πŸ”„ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 6% |
| `tech-insights` | 182 | 23 | 1 | πŸ”„ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 4% |
| `playlist` | 86 | 18 | 1 | πŸ”„ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 5% |
| `manage` | 235 | 17 | 23 | πŸ”„ | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 57% |
| `copilot` | 135 | 16 | 3 | πŸ”„ | β–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 16% |
| `xcmetrics` | 66 | 15 | 1 | πŸ”„ | β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 6% |
| `azure-devops` | 165 | 11 | 6 | πŸ”„ | β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘ 35% |
| `fairwinds-insights` | 26 | 8 | 1 | πŸ”„ | β–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 11% |
| `announcements` | 164 | 6 | 26 | πŸ”„ | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 81% |
| `bookmarks` | 50 | 6 | 2 | πŸ”„ | β–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25% |
| `github` | 167 | 4 | 23 | πŸ”„ | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 85% |
| `acr` | 39 | 0 | 2 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `analytics` | 48 | 0 | 1 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `apollo-explorer` | 12 | 0 | 1 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `argo-workflows` | 83 | 0 | 15 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `cloudbuild` | 30 | 0 | 4 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `explore` | 87 | 0 | 9 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `flux` | 70 | 0 | 16 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `jfrog-artifactory` | 36 | 0 | 4 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `linguist` | 47 | 0 | 2 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `nexus-repository-manager` | 75 | 0 | 2 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `quay` | 81 | 0 | 8 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |
| `topology` | 250 | 0 | 13 | βœ… | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 100% |

## 🎯 Priority Workspaces

These workspaces should be prioritized for migration (sorted by number of MUI files):

1. **kiali** - 105 files with MUI imports
2. **cost-insights** - 69 files with MUI imports
3. **apiiro** - 57 files with MUI imports
4. **git-release-manager** - 34 files with MUI imports
5. **ilert** - 29 files with MUI imports
6. **mcp-chat** - 25 files with MUI imports
7. **bazaar** - 22 files with MUI imports
8. **mend** - 22 files with MUI imports
9. **tech-radar** - 12 files with MUI imports
10. **mta** - 11 files with MUI imports
11. **report-portal** - 11 files with MUI imports
12. **cicd-statistics** - 10 files with MUI imports
13. **splunk** - 10 files with MUI imports
14. **acs** - 9 files with MUI imports
15. **servicenow** - 9 files with MUI imports
16. **agent-forge** - 8 files with MUI imports
17. **codescene** - 8 files with MUI imports
18. **feedback** - 8 files with MUI imports
19. **lighthouse** - 8 files with MUI imports
20. **newrelic** - 8 files with MUI imports

## πŸ”§ Top 20 MUI Components (Need Migration)

| Rank | Component | Usage Count | Workspaces |
|------|-----------|-------------|------------|
| 1 | `Typography (MUI)` | 874 | 75 |
| 2 | `Box (MUI)` | 692 | 53 |
| 3 | `Grid (MUI)` | 552 | 58 |
| 4 | `TableCell (MUI)` | 196 | 17 |
| 5 | `Tooltip (MUI)` | 172 | 44 |
| 6 | `Button (MUI)` | 167 | 48 |
| 7 | `IconButton (MUI)` | 152 | 42 |
| 8 | `Chip (MUI)` | 118 | 37 |
| 9 | `Alert (MUI)` | 109 | 35 |
| 10 | `MenuItem (MUI)` | 100 | 29 |
| 11 | `TableRow (MUI)` | 69 | 16 |
| 12 | `TextField (MUI)` | 67 | 27 |
| 13 | `Card (MUI)` | 67 | 24 |
| 14 | `ListItemText (MUI)` | 65 | 26 |
| 15 | `CardContent (MUI)` | 64 | 24 |
| 16 | `Divider (MUI)` | 61 | 25 |
| 17 | `ListItem (MUI)` | 59 | 21 |
| 18 | `FormControl (MUI)` | 49 | 24 |
| 19 | `Select (MUI)` | 45 | 24 |
| 20 | `CircularProgress (MUI)` | 44 | 21 |

## βœ… Top 20 Backstage UI Components (Migrated)

| Rank | Component | Usage Count | Workspaces |
|------|-----------|-------------|------------|
| 1 | `Text (BUI)` | 207 | 13 |
| 2 | `Flex (BUI)` | 152 | 14 |
| 3 | `Box (BUI)` | 58 | 12 |
| 4 | `Card (BUI)` | 38 | 8 |
| 5 | `CardBody (BUI)` | 38 | 8 |
| 6 | `Cell (BUI)` | 38 | 8 |
| 7 | `CellText (BUI)` | 38 | 7 |
| 8 | `Skeleton (BUI)` | 33 | 7 |
| 9 | `CardHeader (BUI)` | 32 | 8 |
| 10 | `Tooltip (BUI)` | 28 | 8 |
| 11 | `TooltipTrigger (BUI)` | 28 | 8 |
| 12 | `Button (BUI)` | 25 | 7 |
| 13 | `ButtonIcon (BUI)` | 24 | 6 |
| 14 | `Tag (BUI)` | 21 | 10 |
| 15 | `TagGroup (BUI)` | 19 | 10 |
| 16 | `Link (BUI)` | 18 | 4 |
| 17 | `Alert (BUI)` | 17 | 9 |
| 18 | `Table (BUI)` | 14 | 8 |
| 19 | `Container (BUI)` | 10 | 5 |
| 20 | `Select (BUI)` | 7 | 4 |

## πŸ’‘ Recommendations

### πŸ”΄ High Priority

- 70 workspaces still use MUI v4 (@material-ui). These should be prioritized for migration.
- Affected workspaces: acs, adr, airbrake, akeyless, announcements, apache-airflow, azure-devops, azure-sites, azure-storage-explorer, badges, and 60 more

### 🟑 Medium Priority

- 14 workspaces have mixed imports. Focus on completing these migrations first for quick wins.

## πŸ“š Library Usage Breakdown

| Library | Import Count | Files |
|---------|--------------|-------|
| `@material-ui/core` | 1465 | 546 |
| `@mui/material` | 956 | 306 |
| `@material-ui/icons` | 310 | 146 |
| `@mui/icons-material` | 250 | 118 |
| `@backstage/ui` | 179 | 177 |
| `@material-ui/lab` | 94 | 84 |
| `@mui/styles` | 13 | 13 |
| `@material-ui/pickers` | 8 | 4 |

## πŸ“Š Detailed Statistics

| Metric | Count |
|--------|-------|
| Total Workspaces Analyzed | 109 |
| Total Files Analyzed | 6577 |
| Files with MUI Imports | 900 |
| Files with Backstage UI Imports | 177 |
| Unique Components Found | 417 |

---

_This report is automatically generated by the [Community Plugins MUI to BUI Migration Analytics Script](../../scripts/mui-to-bui.js)_

**Last Updated:** 2026-09-14

Contributor guide

Open the contributing guide

Research direction

Start with scripts/mui-to-bui.js, the analytics script named in the report, and review its generated workspace and component statistics. The issue does not define a bounded workspace or implementation entry point; completion would require selecting migration scope and reducing the reported MUI usage.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.