Back to skills
SkillHub ClubShip Full StackFull StackFrontend

add-icon

Add a new Tabler icon to the project. Use when adding icons to the UI.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
135
Hot score
95
Updated
March 20, 2026
Overall rating
C2.8
Composite score
2.8
Best-practice grade
A92.0

Install command

npx @skill-hub/cli install arto-app-arto-add-icon

Repository

arto-app/Arto

Skill path: .claude/skills/add-icon

Add a new Tabler icon to the project. Use when adding icons to the UI.

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack, Frontend.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: arto-app.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install add-icon into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/arto-app/Arto before adding add-icon to shared team environments
  • Use add-icon for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: add-icon
description: Add a new Tabler icon to the project. Use when adding icons to the UI.
---

# Add Icon Skill

This skill guides you through adding a new icon from Tabler Icons to the project.

## Process

**Icons are managed via `icons.json` and automatically built by Vite plugin.**

### Steps

1. **Choose Icon**
   - Browse available icons: https://tabler.io/icons
   - Note the icon name (e.g., `folder-open`, `info-circle`)

2. **Add to icons.json**
   - Edit `renderer/icons.json`
   - Add the icon name to the JSON array (in alphabetical order)

3. **Build Icon Sprite (Automatic)**
   - Icon sprite is automatically generated when Vite builds
   - Just run `just dev` or `cargo build`

4. **Add Rust Enum Variant**
   - Edit `desktop/src/components/icon.rs`
   - Add variant to `IconName` enum (use PascalCase)
   - Add case to `Display` implementation

### Example

**renderer/icons.json:**
```json
[
  "folder",
  "folder-open",
  "file"
]
```

**desktop/src/components/icon.rs:**
```rust
pub enum IconName {
    Folder,
    FolderOpen,
    File,
}

impl std::fmt::Display for IconName {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        match self {
            IconName::Folder => write!(f, "folder"),
            IconName::FolderOpen => write!(f, "folder-open"),
            IconName::File => write!(f, "file"),
        }
    }
}
```

### File Locations

| File | Purpose | Git Tracked |
|------|---------|-------------|
| `renderer/icons.json` | Icon list configuration | ✅ Yes |
| `renderer/vite.config.ts` | Icon sprite plugin | ✅ Yes |
| `renderer/public/icons/tabler-sprite.svg` | Generated sprite (Vite source) | ❌ No |
| `assets/dist/icons/tabler-sprite.svg` | Build output (Dioxus asset) | ❌ No |

### Important

- **NEVER** edit generated SVG files directly
- The `assets/dist/` directory is `.gitignore`d as build output
- Icon sprite generation is automatic via Vite plugin (`buildStart` hook)
- Rust code references icons via `asset!("/assets/dist/icons/tabler-sprite.svg")`
- Icons come from `@tabler/icons` npm package (outline style only)

### Build Process

```
icons.json
    ↓
Vite plugin (buildStart hook)
    ↓
renderer/public/icons/tabler-sprite.svg
    ↓
Vite build
    ↓
assets/dist/icons/tabler-sprite.svg
    ↓
Rust asset!() macro
```
add-icon | SkillHub