Skip to content

boost: replace @remixicon/react icons with @mui/icons-material for consistency with the rest of the repo #3736

Description

@mareklibra

Problem

The boost frontend plugin (plugins/boost) uses @remixicon/react as its icon library. Every other frontend plugin in the rhdh-plugins repo — adoption-insights, ai-experience, lightspeed, homepage, orchestrator-form-widgets, quickstart, scorecard, etc. — uses
@mui/icons-material, which is the standard icon library in the Backstage ecosystem.

This creates an inconsistency: a contributor working across plugins has to switch between two icon APIs, and the boost plugin carries an extra dependency that no other production plugin needs.

Current @remixicon/react usage (4 files, 14 icon imports)

File Icons used
plugins/boost/src/utils/categoryMeta.ts RiMagicLine, RiShieldCheckLine, RiServerLine, RiRobotLine, RiBrainLine, RiToolsLine, RiDatabase2Line + RemixiconComponentType type
plugins/boost/src/components/catalog/AiAssetCard.tsx RiUserLine
plugins/boost/src/components/catalog/AiCatalogPage.tsx RiGridLine, RiListUnordered
plugins/boost/src/components/catalog/entity/AdoptionCard.tsx RiCheckLine, RiFileCopyLine

Note: The CategoryMeta.icon field is typed as RemixiconComponentType and populated for all 7 categories + fallback, but the icon component is never rendered anywhere — only CategoryMeta.label and CategoryMeta.color are used in AiAssetCard.tsx. The icon field
exists for potential future use.

Expected behavior

  1. Replace all @remixicon/react icon imports with equivalent @mui/icons-material icons.
  2. Change the CategoryMeta.icon type from RemixiconComponentType to SvgIconComponent from @mui/icons-material.
  3. Remove @remixicon/react from plugins/boost/package.json dependencies.
  4. Add @mui/icons-material to plugins/boost/package.json dependencies (it is already a dependency of the dev app packages/app and every other frontend plugin in the repo).

Scope

  • Workspace: workspaces/boost
  • Package: @red-hat-developer-hub/backstage-plugin-boost (plugins/boost)

Icon mapping

Remixicon MUI equivalent Used in
RiMagicLine AutoFixHighOutlined categoryMeta.ts (skill)
RiShieldCheckLine VerifiedUserOutlined categoryMeta.ts (rule)
RiServerLine DnsOutlined categoryMeta.ts (mcp-server)
RiRobotLine SmartToyOutlined categoryMeta.ts (ai-agent)
RiBrainLine PsychologyOutlined categoryMeta.ts (ai-model + fallback)
RiToolsLine BuildOutlined categoryMeta.ts (ai-tool)
RiDatabase2Line StorageOutlined categoryMeta.ts (vector-store)
RiUserLine PersonOutlined AiAssetCard.tsx
RiGridLine GridViewOutlined AiCatalogPage.tsx
RiListUnordered ViewListOutlined AiCatalogPage.tsx
RiCheckLine CheckOutlined AdoptionCard.tsx
RiFileCopyLine ContentCopyOutlined AdoptionCard.tsx

Use the Outlined variant consistently to match the line-style aesthetic of the current Remixicon usage.

Files to modify

File Change
plugins/boost/package.json Remove @remixicon/react from dependencies. Add @mui/icons-material.
plugins/boost/src/utils/categoryMeta.ts Replace RemixiconComponentType with SvgIconComponent from @mui/icons-material. Replace all 7 Remixicon icon imports with MUI equivalents.
plugins/boost/src/components/catalog/AiAssetCard.tsx Replace RiUserLine import with PersonOutlined from @mui/icons-material. Adjust the JSX — MUI icons use fontSize prop instead of size (e.g. <PersonOutlined fontSize="small" /> instead of `<RiUserLine size={14}
/>`).
plugins/boost/src/components/catalog/AiCatalogPage.tsx Replace RiGridLine and RiListUnordered imports with GridViewOutlined and ViewListOutlined. Adjust sizefontSize in JSX.
plugins/boost/src/components/catalog/entity/AdoptionCard.tsx Replace RiCheckLine and RiFileCopyLine imports with CheckOutlined and ContentCopyOutlined. Adjust sizefontSize in JSX.

API differences to account for

  • Sizing: Remixicon uses size={14} (pixels). MUI icons use fontSize="small" (20px) or sx={{ fontSize: 14 }} for exact pixel control. Use fontSize="small" where the current size is 14-16px; it is close enough and more idiomatic.
  • Type: Remixicon's RemixiconComponentType → MUI's SvgIconComponent (import from @mui/icons-material), or use typeof SvgIcon from @mui/material.
  • Rendering: both are React components rendered inline — <RiCheckLine /><CheckOutlined /> — no structural change needed.

Tests

No new test file needed. Existing tests (AiAssetCard.test.tsx, AiCatalogPage.test.tsx) do not assert on specific icon components. Verify that existing tests still pass after the swap.

Run yarn workspace @red-hat-developer-hub/backstage-plugin-boost test and yarn workspace @red-hat-developer-hub/backstage-plugin-boost tsc to confirm.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions