wso2/oxygen-ui/oxygen-migrate

Claude Code and agent skill by wso2/oxygen-ui

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Migrate existing MUI code to Oxygen UI patterns. Use when converting @mui/material imports, replacing MUI components, or updating to Oxygen UI conventions.

Install

npx vskill@latest install wso2/oxygen-ui/oxygen-migrate

SKILL.md

Migrate to Oxygen UI

Instructions

  1. Read .claude/oxygen-ui/migration.md for full guide
  2. Update imports from @mui/* to @wso2/oxygen-ui
  3. Replace lucide-react icons with @wso2/oxygen-ui-icons-react
  4. Add OxygenUIThemeProvider wrapper

Migration Checklist

  • [ ] Replace @mui/material imports with @wso2/oxygen-ui
  • [ ] Replace @mui/icons-material or lucide-react with @wso2/oxygen-ui-icons-react
  • [ ] Update MUI X imports to use namespaced exports
  • [ ] Wrap root with OxygenUIThemeProvider
  • [ ] Replace ThemeProvider with OxygenUIThemeProvider
  • [ ] Update custom theme to use OxygenThemeBase

Import Migration

MUI Components

Before:

tsx
import { Box, Stack, Button } from '@mui/material';
import Typography from '@mui/material/Typography';
import { styled } from '@mui/material/styles';

After:

tsx
import { Box, Stack, Button, Typography, styled } from '@wso2/oxygen-ui';
Icons

Before (MUI Icons):

tsx
import SettingsIcon from '@mui/icons-material/Settings';
import HomeIcon from '@mui/icons-material/Home';
import DeleteIcon from '@mui/icons-material/Delete';

Before (Lucide React):

tsx
import { Settings, Home, Trash2 } from 'lucide-react';

After:

tsx
import { SettingsIcon, HomeIcon, TrashIcon } from '@wso2/oxygen-ui-icons-react';
MUI X Components

Before:

tsx
import { DataGrid } from '@mui/x-data-grid';
import { DatePicker } from '@mui/x-date-pickers';
import { BarChart } from '@mui/x-charts';
import { SimpleTreeView } from '@mui/x-tree-view';

After:

tsx
import { DataGrid, DatePickers, TreeView } from '@wso2/oxygen-ui';
// Use as namespaces
<DataGrid.DataGrid rows={rows} columns={columns} />
<DatePickers.DatePicker value={date} onChange={setDate} />
<TreeView.SimpleTreeView items={items} />
// For Charts, use the separate package
import { BarChart } from '@wso2/oxygen-ui-charts-react';
<BarChart series={series} />

Theme Provider Migration

Before:

tsx
import { ThemeProvider, createTheme } from '@mui/material';
const theme = createTheme({
palette: {
primary: { main: '#1976d2' },
},
});
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>

After:

tsx
import { OxygenUIThemeProvider, OxygenTheme } from '@wso2/oxygen-ui';
// Use default theme
<OxygenUIThemeProvider theme={OxygenTheme}>
<App />
</OxygenUIThemeProvider>
// Or with custom theme
import { extendTheme } from '@mui/material/styles';
import { OxygenThemeBase } from '@wso2/oxygen-ui';
const customTheme = extendTheme({
...OxygenThemeBase,
colorSchemes: {
light: {
palette: { primary: { main: '#1976d2' } },
},
},
});
<OxygenUIThemeProvider theme={customTheme}>
<App />
</OxygenUIThemeProvider>

Layout Migration

Before (Custom Layout):

tsx
import { AppBar, Toolbar, Drawer, Box } from '@mui/material';
<Box sx={{ display: 'flex' }}>
<AppBar position="fixed">
<Toolbar>
<Typography>My App</Typography>
</Toolbar>
</AppBar>
<Drawer variant="permanent">
{/* Menu items */}
</Drawer>
<Box component="main" sx={{ flexGrow: 1, p: 3 }}>
{/* Content */}
</Box>
</Box>

After (Oxygen AppShell):

tsx
import { AppShell, Header, Sidebar, Footer } from '@wso2/oxygen-ui';
<AppShell>
<AppShell.Navbar>
<Header>
<Header.Brand>
<Header.BrandTitle>My App</Header.BrandTitle>
</Header.Brand>
</Header>
</AppShell.Navbar>
<AppShell.Sidebar>
<Sidebar>
<Sidebar.Nav>
{/* Menu items */}
</Sidebar.Nav>
</Sidebar>
</AppShell.Sidebar>
<AppShell.Main>
{/* Content */}
</AppShell.Main>
<AppShell.Footer>
<Footer companyName="WSO2 LLC" />
</AppShell.Footer>
</AppShell>

Table Migration

Before (MUI Table):

tsx
import {
Table,
TableHead,
TableBody,
TableRow,
TableCell,
Paper,
} from '@mui/material';
<Paper>
<Table>
<TableHead>
<TableRow>
<TableCell>Name</TableCell>
<TableCell>Status</TableCell>
</TableRow>
</TableHead>
<TableBody>
{data.map((row) => (
<TableRow key={row.id}>
<TableCell>{row.name}</TableCell>
<TableCell>{row.status}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</Paper>

After (Oxygen ListingTable):

tsx
import { ListingTable } from '@wso2/oxygen-ui';
<ListingTable.Container>
<ListingTable.Toolbar showSearch />
<ListingTable>
<ListingTable.Head>
<ListingTable.Row>
<ListingTable.Cell>Name</ListingTable.Cell>
<ListingTable.Cell>Status</ListingTable.Cell>
</ListingTable.Row>
</ListingTable.Head>
<ListingTable.Body>
{data.map((row) => (
<ListingTable.Row key={row.id}>
<ListingTable.Cell>{row.name}</ListingTable.Cell>
<ListingTable.Cell>{row.status}</ListingTable.Cell>
</ListingTable.Row>
))}
</ListingTable.Body>
<ListingTable.Footer />
</ListingTable>
</ListingTable.Container>

Color Mode Migration

Before:

tsx
import { useColorScheme } from '@mui/material';
const { mode, setMode } = useColorScheme();

After:

tsx
import { ColorSchemeToggle, useTheme } from '@wso2/oxygen-ui';
// Simple toggle component
<ColorSchemeToggle />
// Check current mode
const theme = useTheme();
const isDark = theme.palette.mode === 'dark';

ESLint Plugin Setup

After migration, add the ESLint plugin to prevent regressions:

bash
pnpm add -D @wso2/eslint-plugin-oxygen-ui
js
// eslint.config.js
import oxygenUIPlugin from '@wso2/eslint-plugin-oxygen-ui';
export default [
oxygenUIPlugin.configs.recommended,
// ... other configs
];

This will:

  • Error on direct @mui/material imports
  • Error on direct lucide-react imports
  • Auto-fix imports with eslint --fix

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
50
Repository forks
45
7-day trend score
20

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 29 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/wso2/oxygen-ui/oxygen-migrate/badge)](https://verified-skill.com/skills/wso2/oxygen-ui/oxygen-migrate)

Something wrong with this skill or its page? Tell us.