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.
Install command
npx @skill-hub/cli install arto-app-arto-add-icon
Repository
Skill path: .claude/skills/add-icon
Add a new Tabler icon to the project. Use when adding icons to the UI.
Open repositoryBest 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
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
```