# harmonyos-ui-icons
[简体中文](README.md) | **English**
> **DeepSeek Harness skill bundle + HarmonyOS icon toolkit**
> Once installed, the agent in DSH automatically brings this icon capability to HarmonyOS / ArkTS UI work: **assets + tinting + animation + verified pitfalls**, all validated on a real device emulator.
---
## ⚠️ Do this first: initialize (no icons without it)
**This package ships zero SVG files.** Iconsax's Free License lets you embed the icons in
your app, but it forbids **redistributing the artwork itself** (including modified versions).
So the public repo carries the tooling only — never the icons.
**The first thing after installing** is to run the bootstrap:
```bash
# is the bundled skill directory, typically:
# /profiles//node_modules/harmonyos-ui-icons/skills/harmonyos-ui-icons
node /scripts/bootstrap.mjs
```
`bootstrap.mjs` will:
1. Pull **181 curated icons × 6 styles = 1083 SVGs** from the official CDN (`https://cdn.iconsax.io`) and decrypt them in place
2. Derive **3249 SMIL-animated variants** from those static SVGs
3. Regenerate `templates/IconsaxCatalog.ets` so the catalog always matches the files on disk
> Needs network access. Takes about a minute. **Idempotent** — an already-initialized set is skipped.
The skill knows this too: its `SKILL.md` makes "Step 0: initialize" a hard prerequisite, and
when it finds `assets/iconsax/` empty it runs `bootstrap.mjs` before touching any icon.
| `assets/iconsax/` state | What to do |
| --- | --- |
| Missing / empty | **Stop and run `scripts/bootstrap.mjs`** |
| Present but missing the icon you need | `node scripts/fetch-icons.mjs --names --out assets/iconsax` |
| Ready | Go ahead and use it |
---
## Install as a DSH skill bundle
This is a standard **DSH bundle**: `package.json` declares `dsh.bundle.patch`, and
`cordis.patch.yml` **adds exactly one row** that mounts DSH's own
`@deepseek-ai/dsh-skill-filesystem`, registering the `skills/` directory this package
carries as a skill root.
```yaml
# cordis.patch.yml — purely additive; no existing entry id is renamed or replaced
- insert:
- id: harmonyos-ui-icons-skill-filesystem
name: '@deepseek-ai/dsh-skill-filesystem'
config:
providerName: harmonyos-ui-icons
includeDefaultRoots: false
bundledSkillDir: !!js ... # resolved from the installed package identity, to this package's skills/
```
Pick any install path:
**A. Through the DSH plugin manager** (recommended — `plugin_manager` `install_bundle`)
**B. Manually into a profile**
```bash
# inside the profile directory (/profiles/)
pnpm add harmonyos-ui-icons # or "harmonyos-ui-icons": "git+https://github.com/Andy-scy/harmonyos-ui-icons.git"
# then add "harmonyos-ui-icons" to that profile package.json's dsh.profile.bundles
```
**C. Skill only** (skip the bundle)
Copy `skills/harmonyos-ui-icons/` into any skill search path, e.g.
`/skills/harmonyos-ui-icons/` or a project's `.dsh/skills/harmonyos-ui-icons/`.
> All three paths still require running `scripts/bootstrap.mjs` once.
Once installed, just mention ArkTS / ArkUI / a HarmonyOS page / a component / a TabBar /
"add an icon" / "build me a HarmonyOS screen" and the skill loads automatically, bringing this
icon set and docs with it.
---
## What this is
Four things that remove the icon friction from HarmonyOS UI work:
| | |
| --- | --- |
| 🎨 **Icon assets** | 181 common UI icons × 6 styles = **1083 SVGs** (fetched locally and decrypted by the bootstrap), ready to drop into `rawfile/` |
| ✨ **Animated icons** | **3249 SMIL-embedded variants** (float / pulse / wiggle) that ArkUI's `Image` component **plays natively** — zero dependencies |
| 🧩 **ArkTS templates** | `IconsaxIcon` / `Tint` / `IconsaxCatalog` — **compile-verified and device-verified** |
| 📚 **Pitfall docs** | ArkUI's SVG capability boundaries, the two tinting paths, license red lines, 12 field-tested pitfalls |
Icons come from [Iconsax](https://iconsax.io)'s **free tier** (181 commonly used picks out of 7,140 free icons).
The package also ships the **complete index of all 7,140 free icons** plus a fetch script, so you can
pull any obscure icon with a single command.
---
## How to use it, in three lines
1. **Copy icons**: `assets/iconsax/