@hallaxius/ui-master
v1.0.1
Published
MCP server with 27 tools for 50+ UI component registries (shadcn/ui, Magic UI, Aceternity UI, MUI, Ant Design, and 45+ more), 286k+ icons, dependency resolution, dry-run install, comparison, and project analysis.
Maintainers
Readme
Table of Contents
- Overview
- Features
- Installation
- Environment Variables
- Tools (27)
- Prompts (4)
- Resources (4)
- Providers (50+)
- Examples
- Development
- License
Overview
ui-master is a Model Context Protocol (MCP) server that aggregates 50+ UI component registries and 286k+ icons into a single unified interface.
Why use ui-master?
- Unified Search — Search across all 50+ registries with a single query. No need to know which provider has the component you need.
- Dependency Resolution — Automatically resolves transitive
registryDependenciesand npm packages. - Dry-Run Install Plans — Preview exactly what files will be written, where they go, and what npm packages are needed before committing.
- Batch Install — Install multiple components at once with deduplication.
- Component Comparison — Compare alternatives from different providers side-by-side.
- Figma Integration — Extract design tokens from Figma URLs and convert to CSS/Tailwind.
- Storybook Generation — Auto-generate CSF3 stories with props and variants.
- Compliance Checking — Verify components against accessibility, theming, and coding standards.
- Project Analysis — Scan your project and get smart component recommendations.
- 286k+ Icons — Search the full shadcn.io icon catalog across 200+ icon libraries.
Features
| Feature | Description | |---------|-------------| | 50+ Registries | shadcn/ui, Magic UI, Aceternity UI, React Bits, OriginUI, and 45+ more | | 286k+ Icons | shadcn.io, Iconify, Lucide, Heroicons, Tabler, and 200+ libraries | | 27 MCP Tools | Component search, install, comparison, themes, compliance, and more | | 4 MCP Prompts | Guided workflows for finding, installing, and comparing components | | 4 MCP Resources | Programmatic access to libraries, components, and icon metadata | | Fuzzy Search | Deterministic scoring with BM25 ranking and structural boosting | | Dependency Resolution | Recursive resolution with cycle detection and topological ordering | | Dry-Run Plans | Preview file writes, npm installs, and CSS changes before execution | | Batch Operations | Install multiple components with automatic deduplication | | Project Analysis | Smart recommendations based on your existing stack |
Installation
OpenCode
{
"mcpServers": {
"ui-master": {
"command": "bunx",
"args": ["-y", "@hallaxius/ui-master"]
}
}
}Claude Desktop
{
"mcpServers": {
"ui-master": {
"command": "bunx",
"args": ["-y", "@hallaxius/ui-master"]
}
}
}Cursor
{
"mcpServers": {
"ui-master": {
"command": "bunx",
"args": ["-y", "@hallaxius/ui-master"]
}
}
}Windsurf
{
"mcpServers": {
"ui-master": {
"command": "bunx",
"args": ["-y", "@hallaxius/ui-master"]
}
}
}Direct Install
bun add @hallaxius/ui-master
# or
bunx @hallaxius/ui-masterEnvironment Variables
| Variable | Description | Required |
|----------|-------------|----------|
| SHADCNIO_TOKEN | shadcn.io API token for icon search and download | No (but recommended) |
| FIGMA_API_TOKEN | Figma API token for design token extraction | No |
| UI_MASTER_CACHE_DIR | Set to memory to disable disk caching | No |
Tools (27)
Component Discovery
search_components
Search across all 50+ registries with fuzzy matching and BM25 scoring.
// Search across ALL registries (recommended)
search_components({ query: "button" })
// Search within a specific library
search_components({ query: "marquee", library: "magicui" })
// Search with framework filter
search_components({ query: "date picker", framework: "react" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| query | string | required | Search text (name, title, description) |
| library | string | all | Optional library filter |
| type | string | none | Filter by unified type |
| kind | string | "component" | "component" or "icon" |
| framework | string | none | Framework compatibility filter |
| namespace | string | none | Namespace filter |
| limit | number | 20 | Max results (1-100) |
Output:
{
"results": [
{
"providerId": "shadcn",
"id": "button",
"type": "ui",
"title": "Button",
"description": "Displays a button or a component that looks like a button.",
"score": 0.95
}
]
}list_components
List all components from a specific registry with pagination.
list_components({ library: "shadcn", type: "ui", limit: 50 })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| library | string | all | Filter by library |
| type | enum | none | Filter by type: component, ui, block, hook, lib, style, theme, page, icon, item |
| framework | string | none | Framework filter |
| namespace | string | none | Namespace filter |
| limit | number | 50 | Max results (1-200) |
| offset | number | 0 | Pagination offset |
get_component
Get full component details including source code, dependencies, and metadata.
// Detailed mode (default) — includes file contents
get_component({ component: "shadcn/button" })
// Compact mode — metadata only
get_component({ component: "magicui/magic-card", mode: "compact" })
// With accessibility audit
get_component({ component: "shadcn/dialog", a11y: true })
// With framework compatibility check
get_component({ component: "shadcn/button", framework: "react" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| component | string | required | "library/name" ref |
| framework | string | none | Framework compatibility check |
| a11y | boolean | false | Include accessibility summary |
| mode | enum | "detailed" | "compact" or "detailed" |
resolve_component
Recursively resolve a component and all its transitive dependencies.
resolve_component({ component: "shadcn/dialog" })Returns the full dependency tree in topological order, npm packages, file-to-target paths, CSS variables, and any warnings.
Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| component | string | required | "library/name" ref |
| mode | enum | "detailed" | "compact" or "detailed" |
Component Installation
add_component
Generate a complete install plan or write files to disk.
// Dry-run (default) — plan only
add_component({ ref: "shadcn/button", dryRun: true })
// Write to disk
add_component({ ref: "shadcn/button", projectPath: "/path/to/project", dryRun: false })
// With overwrite
add_component({ ref: "shadcn/button", projectPath: "/path/to/project", dryRun: false, overwrite: true })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| ref | string | required | "library/name" ref |
| projectPath | string | none | Target project root |
| targetPath | string | none | Alternative write base |
| dryRun | boolean | true | Plan only (no file writes) |
| overwrite | boolean | false | Overwrite existing files |
| mode | enum | "detailed" | "compact" or "detailed" |
Output (dry-run):
{
"ref": "shadcn/button",
"items": [...],
"files": [
{
"source": "registry/styles/radix-nova/button.json",
"target": "src/components/ui/button.tsx",
"type": "registry:ui",
"status": "new",
"exists": false
}
],
"npmDeps": ["class-variance-authority", "clsx", "tailwind-merge"],
"css": "...",
"cssVars": {...},
"writeOrder": ["src/components/ui/button.tsx"],
"warnings": [],
"dryRun": true
}batch_install
Install multiple components at once with deduplication.
batch_install({
refs: ["shadcn/button", "shadcn/card", "shadcn/dialog"],
dryRun: true
})Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| refs | string[] | required | Array of "library/name" refs (1-20) |
| projectPath | string | none | Target project root |
| targetPath | string | none | Alternative write base |
| dryRun | boolean | true | Plan only |
| overwrite | boolean | false | Overwrite existing files |
diff_component
Compare local installed files against the latest registry version.
diff_component({ ref: "shadcn/button", projectPath: "/path/to/project" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| ref | string | required | "library/name" ref |
| projectPath | string | none | Target project root |
| targetPath | string | none | Alternative read base |
| context | number | 5 | Diff context lines (0-20) |
| mode | enum | "detailed" | "compact" or "detailed" |
Output:
{
"ref": "shadcn/button",
"files": [
{ "source": "...", "target": "...", "status": "changed", "diff": "..." },
{ "source": "...", "target": "...", "status": "unchanged" },
{ "source": "...", "target": "...", "status": "added" }
],
"summary": { "added": 1, "changed": 1, "unchanged": 1 }
}Icon Tools
search_icons
Search 286k+ icons across all libraries.
// Search across ALL icon libraries
search_icons({ query: "arrow" })
// Search within a specific library
search_icons({ query: "check", library: "lucide" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| query | string | required | Icon search text |
| library | string | all | Optional library filter |
| limit | number | 20 | Max results (1-100) |
Note: Requires SHADCNIO_TOKEN for search. Without it, returns 0 hits with setup instructions.
get_icon
Get a specific icon with React component and install command.
get_icon({ library: "lucide", name: "ArrowRight", withFiles: true })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| library | string | required | Icon library id |
| name | string | required | Icon name |
| withFiles | boolean | false | Include raw SVG/component source |
list_icon_libraries
List all available icon libraries from shadcn.io.
list_icon_libraries({ limit: 50 })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| query | string | none | Filter by library id/name |
| limit | number | 222 | Max results (1-300) |
install_icon
Generate an install plan for a shadcn.io icon.
install_icon({ library: "lucide", name: "ArrowRight", dryRun: true })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| library | string | required | Icon library id |
| name | string | required | Icon name |
| projectPath | string | none | Target project root |
| dryRun | boolean | true | Always dry-run for now |
Design System
generate_theme
Generate CSS variables and Tailwind config for shadcn/ui compatible projects.
// Generate with default slate palette
generate_theme({ baseColor: "slate" })
// Custom primary color
generate_theme({
baseColor: "zinc",
primaryColor: "#3b82f6",
accentColor: "#8b5cf6",
radius: 0.5
})
// Compact mode — CSS only
generate_theme({ baseColor: "slate", mode: "compact" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| baseColor | enum | "slate" | Base palette: slate, gray, zinc, neutral, stone |
| style | enum | "default" | Style variant: default or new-york |
| primaryColor | string | palette default | Primary color hex override |
| accentColor | string | palette default | Accent color hex override |
| radius | number | 0.5 | Border radius in rem (0-2) |
| mode | enum | "detailed" | "compact" or "detailed" |
check_compliance
Verify a component follows design system rules.
check_compliance({ component: "shadcn/button" })
// Check specific rules
check_compliance({ component: "shadcn/button", rules: ["hardcoded-colors", "missing-css-variables"] })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| component | string | required | "library/name" ref |
| rules | string[] | all | Rule IDs to check |
Output:
{
"score": 85,
"passed": false,
"violations": [
{
"ruleId": "hardcoded-colors",
"ruleName": "Hardcoded Colors",
"severity": "warning",
"category": "theming",
"message": "Found hardcoded color values",
"suggestion": "Use CSS variables instead"
}
]
}Advanced Features
run_pipeline
Execute a sequence of tool calls as a pipeline.
// Custom pipeline
run_pipeline({
steps: [
{ tool: "search_components", params: { query: "modal" } },
{ tool: "compare_components", params: { query: "modal" } },
{ tool: "add_component", params: { ref: "shadcn/dialog", dryRun: true } }
]
})
// Predefined workflow
run_pipeline({ workflow: "search → resolve → install" })Available Workflows:
search → resolve → install— Search for a component, resolve dependencies, and preview installget → audit → compliance— Get component details, run audit, and check compliancesearch → preview → storybook— Search, preview, and generate Storybook storiesget → diff → install— Get component, diff against local, and preview install
Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| steps | array | required | Array of { tool, params } steps |
| continueOnError | boolean | false | Continue after failures |
| workflow | string | none | Predefined workflow name |
generate_storybook
Generate CSF3 Storybook stories for a component.
generate_storybook({ component: "shadcn/button" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| component | string | required | "library/name" ref |
| storyPath | string | auto | Custom story file path |
extract_figma_tokens
Extract design tokens from a Figma URL.
extract_figma_tokens({
figmaUrl: "https://www.figma.com/file/abc123/MyDesign",
designTokens: "primary: #3b82f6\nsecondary: #8b5cf6"
})Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| figmaUrl | string | required | Figma file/design URL |
| designTokens | string | none | Optional design token descriptions |
figma_to_css
Convert Figma design data to CSS custom properties.
figma_to_css({
figmaUrl: "https://www.figma.com/file/abc123/MyDesign",
prefix: "--figma"
})figma_to_tailwind
Convert Figma design data to Tailwind CSS configuration.
figma_to_tailwind({
figmaUrl: "https://www.figma.com/file/abc123/MyDesign"
})preview_component
Get a text-based component preview with props, variants, and usage.
preview_component({ component: "shadcn/button" })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| component | string | required | "library/name" ref |
Project Management
get_project_state
Analyze your project configuration (read-only).
get_project_state({ projectPath: "/path/to/project" })Returns: framework, shadcn style/base, Tailwind version, installed dependencies, path aliases, and any parsing errors.
analyze_project
Get smart component recommendations based on your project.
analyze_project({ projectPath: "/path/to/project", limit: 20 })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| projectPath | string | required | Project root |
| framework | string | none | Framework filter |
| limit | number | 20 | Max recommendations (1-100) |
init_project
Initialize a new shadcn-compatible project.
init_project({
projectPath: "/path/to/project",
style: "radix-nova",
framework: "next",
typescript: true
})Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| projectPath | string | required | Root directory |
| style | enum | "radix-nova" | shadcn style: default, new-york, radix-nova |
| framework | enum | "next" | Framework: next, vite, remix, astro, laravel, manual |
| typescript | boolean | true | Use TypeScript |
| tailwindCss | string | "src/index.css" | Global CSS file path |
| iconLibrary | string | "lucide" | Icon library |
Utilities
get_audit_checklist
Run a post-install audit on a component.
get_audit_checklist({ ref: "shadcn/button" })
// Run specific checks
get_audit_checklist({ ref: "shadcn/button", checks: ["a11y", "responsive"] })Available Checks: imports, deps, config, a11y, responsive, all
get_item_examples
Get usage examples and demos for a component.
get_item_examples({ ref: "shadcn/button", maxExamples: 3 })compare_components
Compare similar components across all registries.
compare_components({ query: "dialog", limit: 5 })Parameters:
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| query | string | required | Component name or description |
| limit | number | 5 | Max comparisons (1-10) |
Output:
{
"query": "dialog",
"comparisons": [
{
"providerId": "shadcn",
"id": "dialog",
"name": "dialog",
"type": "ui",
"fileCount": 3,
"totalSize": 4500,
"npmDepsCount": 2,
"hasCssVars": true,
"score": 0.98
}
],
"recommendation": {
"bestMatch": "shadcn/dialog",
"reason": "Highest score (0.98) with 3 files and 2 npm deps."
}
}list_libraries
List all available registries.
list_libraries({ limit: 100 })server_info
Get server metadata including version and all configured providers.
server_info({})Prompts (4)
find_component
Guided prompt to find the right component for your needs.
/ask find_component "I need a date picker with range selection"add_component_to_project
Guided prompt to add a component to your project.
/ask add_component_to_project "Add shadcn/dialog to my project"compare_component_libraries
Guided prompt to compare similar components across libraries.
/ask compare_component_libraries "modal dialogs"pipeline
Guided prompt to execute a workflow pipeline.
/ask pipeline "Search for card components, compare them, and install the best one"Resources (4)
| Resource | URI | Description |
|----------|-----|-------------|
| Libraries | ui-master://libraries | List of all registries |
| Library | ui-master://library/{id} | Components in a specific registry |
| Component | ui-master://component/{library}/{name} | Full component details |
| Icons | icons://shadcnio/library/{name} | Icon library metadata |
Providers (50+)
UI Component Registries (30)
| Provider | ID | Homepage |
|----------|-----|----------|
| shadcn/ui | shadcn | https://ui.shadcn.com |
| Magic UI | magicui | https://magicui.design |
| Aceternity UI | aceternity | https://ui.aceternity.com |
| React Bits | reactbits | https://reactbits.dev |
| OriginUI | originui | https://originui.com |
| Cult UI | cultui | https://cult-ui.com |
| SmoothUI | smoothui | https://smoothui.dev |
| AI Elements | ai-elements | https://ai-sdk.dev |
| Kibo UI | kibo | https://kibo-ui.com |
| Kokonut UI | kokonutui | https://kokonutui.com |
| useLayouts | uselayouts | https://uselayouts.com |
| Animate UI | animate-ui | https://animate-ui.com |
| Blocks | blocks | https://blocks.so |
| Intent UI | intentui | https://intentui.com |
| Fancy Components | fancy | https://fancycomponents.dev |
| SVGl | svgl | https://svgl.app |
| 21st.dev | 21st | https://21st.dev |
| Tremor | tremor | https://tremor.so |
| DaisyUI | daisyui | https://daisyui.com |
| NextUI | nextui | https://nextui.org |
| Mantine | mantine | https://mantine.dev |
| Carbon Design | carbon | https://carbondesignsystem.com |
| Shopify Polaris | polaris | https://polaris.shopify.com |
| GitHub Primer | primer | https://primer.style |
| Ant Design | antdesign | https://ant.design |
| MUI Material | mui | https://mui.com |
| Chakra UI | chakra | https://chakra-ui.com |
| Radix Themes | radix | https://www.radix-ui.com/themes |
| Park UI | parkui | https://park-ui.com |
| shadcn-vue | shadcnvue | https://www.shadcn-vue.com |
Enterprise Design Systems (4)
| Provider | ID | Homepage |
|----------|-----|----------|
| Arco Design | arco | https://arco.design |
| Atlassian Design | atlassian | https://atlassian.design |
| Adobe Spectrum | spectrum | https://spectrum.adobe.com |
| Microsoft Fluent | fluentui | https://fluent2.microsoft.design |
Headless Libraries (8)
| Provider | ID | Homepage |
|----------|-----|----------|
| React Aria | reactaria | https://react-spectrum.adobe.com/react-aria |
| Headless UI | headless | https://headlessui.com |
| Ark UI | arkui | https://ark-ui.com |
| Zag.js | zag | https://zagjs.com |
| Kobalte | kobalte | https://kobalte.dev |
| Melt UI | meltui | https://melt-ui.com |
| Bits UI | bitsui | https://bits-ui.com |
| shadcn-slots | shadcnslots | https://slotsui.com |
Icon Libraries (14)
| Provider | ID | Homepage |
|----------|-----|----------|
| shadcn.io | shadcnio | https://www.shadcn.io/icons |
| Lucide | lucide | https://lucide.dev |
| Heroicons | heroicons | https://heroicons.com |
| Tabler Icons | tabler | https://tabler.io/icons |
| Phosphor Icons | phosphor | https://phosphoricons.com |
| Remix Icons | remix | https://remixicon.com |
| BoxIcons | boxicons | https://boxicons.com |
| Font Awesome | fontawesome | https://fontawesome.com |
| Material Icons | materialicons | https://fonts.google.com/icons |
| Ionicons | ionicons | https://ionic.io/ionicons |
| Eva Icons | evaicons | https://akveo.github.io/eva-icons |
| Iconoir | iconoir | https://iconoir.com |
| Carbon Icons | carbonicons | https://carbondesignsystem.com/guidelines/icons |
| React Icons | reacticons | https://react-icons.github.io/react-icons |
| Mingcute Icons | mingcute | https://www.mingcute.com |
| Radix Icons | radixicons | https://www.radix-ui.com/icons |
Examples
Find and Install a Button
// 1. Search for buttons across all registries
search_components({ query: "button" })
// 2. Get full component details
get_component({ component: "shadcn/button" })
// 3. Preview installation (dry-run)
add_component({ ref: "shadcn/button", dryRun: true })
// 4. Install to your project
add_component({
ref: "shadcn/button",
projectPath: "/path/to/project",
dryRun: false
})Generate a Theme
// Generate CSS variables for a blue theme
generate_theme({
baseColor: "slate",
primaryColor: "#3b82f6",
style: "new-york"
})Compare Dialog Components
// Find and compare dialog implementations across all registries
compare_components({ query: "dialog" })Batch Install Multiple Components
// Install button, card, and dialog at once
batch_install({
refs: ["shadcn/button", "shadcn/card", "shadcn/dialog"],
dryRun: true
})Run a Pipeline
// Search, compare, and preview install of the best option
run_pipeline({
steps: [
{ tool: "search_components", params: { query: "modal" } },
{ tool: "compare_components", params: { query: "modal" } },
{ tool: "add_component", params: { ref: "shadcn/dialog", dryRun: true } }
]
})Extract Figma Tokens
// Extract design tokens from Figma
extract_figma_tokens({
figmaUrl: "https://www.figma.com/file/abc123/MyDesign",
designTokens: "primary: #3b82f6\nsecondary: #8b5cf6"
})
// Convert to CSS
figma_to_css({ figmaUrl: "https://www.figma.com/file/abc123/MyDesign" })
// Convert to Tailwind config
figma_to_tailwind({ figmaUrl: "https://www.figma.com/file/abc123/MyDesign" })Generate Storybook Stories
// Generate CSF3 stories for a component
generate_storybook({ component: "shadcn/button" })Check Component Compliance
// Check accessibility and theming compliance
check_compliance({ component: "shadcn/button" })Initialize a Project
// Set up a new shadcn project
init_project({
projectPath: "/path/to/new-project",
style: "radix-nova",
framework: "next",
typescript: true
})Development
Prerequisites
- Bun >= 1.2.0
Setup
git clone https://github.com/hallaxius/ui-master.git
cd ui-master
bun installCommands
bun dev # Start development server with hot reload
bun test # Run tests
bun run bundle # Build for distribution
bun run inspect # Open MCP InspectorProject Structure
src/
index.ts # Entry point
server.ts # Server builder
config.ts # Provider configurations
types.ts # Core types
version.ts # Version info
tools/ # MCP tools (27)
components.ts # Component search/list/get/resolve
icons.ts # Icon search/get/install
install.ts # Component install/diff
batch.ts # Batch install
compare.ts # Component comparison
theme.ts # Theme generation
compliance.ts # Compliance checking
preview.ts # Component preview
figma.ts # Figma integration
storybook.ts # Storybook generation
pipeline.ts # Workflow pipeline
init.ts # Project initialization
audit.ts # Audit checklist
examples.ts # Usage examples
project.ts # Project analysis
meta.ts # Server info
libs.ts # Library listing
providers/ # Registry adapters (50+)
index.ts # Provider registry
shadcn.ts # shadcn/ui adapter
magicui.ts # Magic UI adapter
aceternity.ts # Aceternity UI adapter
shadcn-registry.ts # Generic shadcn registry adapter
shadcnio.ts # shadcn.io icons adapter
iconify.ts # Iconify adapter
http.ts # HTTP fetcher
registry/ # Dependency resolution
resolve.ts # Component resolution
installPlan.ts # Install plan builder
diff.ts # Diff generation
prompts/ # Prompt templates (4)
find-component.ts
add-to-project.ts
compare-libs.ts
pipeline.ts
resources/ # MCP resources (4)
libraries.ts
library.ts
component.ts
icons.ts
analyze/ # Analysis helpers
project.ts # Project scanner
a11y.ts # Accessibility checker
framework.ts # Framework detection
rank.ts # Recommendation ranking
cache/ # Caching layer
index.ts # Cache interface
memory.ts # In-memory cache
disk.ts # Disk cache
composite.ts # Composite cache
compliance/ # Compliance rules
rules.ts
theme/ # Theme generation
palettes.ts
util.ts # Shared utilitiesLicense
MIT © 2026 @hallaxius
Contributing
Contributions are welcome! Please open an issue or submit a pull request at https://github.com/hallaxius/ui-master.
Support
- GitHub Issues: https://github.com/hallaxius/ui-master/issues
- Documentation: https://github.com/hallaxius/ui-master
