Thank you for your interest in contributing!
AnimateIcons is a collection of animated SVG icons built with React and motion/react, supporting multiple icon libraries such as Lucide and Huge.
We welcome contributions of:
- New icons
- Bug fixes
- Performance improvements
- Documentation updates
Please follow the guidelines below to keep the project consistent and maintainable.
This project uses pnpm for dependency management.
Install pnpm globally if you don’t have it:
npm install -g pnpmPlease avoid using npm or yarn to prevent lockfile conflicts.
- Fork the repository and clone it:
git clone https://github.com/your-username/animateicons.git- Navigate to the project directory:
cd animateicons- Install dependencies:
pnpm install- Start the development server:
pnpm devThis will run the docs playground where you can preview and test icons.
AnimateIcons supports multiple icon libraries. Each library maintains its own icons and ICON_LIST.
icons/
├─ lucide/
│ ├─ index.ts
│ └─ Icon files...
└─ huge/
├─ index.ts
└─ Icon files...
icons/lucide/index.tsexports the LucideICON_LISTicons/huge/index.tsexports the HugeICON_LIST
Always add your icon to the appropriate library.
Add your icon to one of the following folders:
icons/lucide/
icons/huge/
Your icon style must match the selected library.
Example:
icons/lucide/dashboard-icon.tsx
or
icons/huge/dashboard-icon.tsx
Important
Use the existing icon template from the same folder.
Each library already contains icons that follow the correct structure and animation pattern.
Open any existing icon in that folder and copy its implementation as a starting point.
All new icons must follow the exact structure of existing icons in the target folder.
Do not:
- Create a custom component structure
- Change animation architecture
- Use a different animation pattern
- Add new dependencies
Requirements:
- Must be a React component
- Animation implemented using
motion/react - Hover animation support
- Imperative control support (
startAnimation,stopAnimation) - Follow the naming convention:
your-icon-name-icon.tsx
Use the existing icons as a reference template.
We use an automated JSON-based registry. You do not need to manually edit any index.ts files!
Open the corresponding JSON manifest in the data/ directory:
- For Lucide:
data/lucide-icons.json - For Huge:
data/huge-icons.json
Add a new JSON object for your icon to the array:
{
"name": "your-icon-name",
"addedAt": "YYYY-MM-DD",
"category": ["CategoryName"],
"keywords": ["keyword1", "keyword2"]
}Important Naming Rules:
- The
namestring in the JSON must match your filename exactly, minus the-iconsuffix. - The exported React component must exactly match the PascalCase of your filename.
Example
| Item | Format |
|---|---|
| File name | dashboard-icon.tsx |
| Component | DashboardIcon |
| JSON name | "dashboard" |
Run the following command to automatically build the index map so the application can use it:
pnpm run gen:iconsRun the playground:
pnpm devThen:
- Select the correct library (Lucide or Huge)
- Verify hover animation works
- Test programmatic control if applicable
- Check responsiveness and visual consistency
- Match the visual style of the target library
- Keep animations smooth and subtle (0.3s – 0.8s recommended)
- Avoid heavy or distracting motion
- Keep SVG structure clean and minimal
- Reuse existing animation patterns when possible
Create a feature branch:
git checkout -b feat/icon-nameCommit message examples:
feat: add dashboard-iconfix: correct animation in dashboard-iconperf: optimize icon rendering
Push your branch:
git push origin feat/icon-nameThen open a Pull Request to the dev branch.
Maintainers will merge dev → main during release.
Before submitting your PR:
- Icon follows the existing template and structure
- Animation implemented using
motion/react - Icon added to the correct library (lucide or huge)
- Icon added to the correct JSON manifest and
pnpm run gen:iconswas run - Tested locally using
pnpm dev - PR targets the dev branch
- Match the visual style of the target library (Lucide or Huge)
- Use Lucide shapes as a base when contributing to the Lucide library
- Keep animations subtle and consistent with existing icons
- Keep changes focused and minimal
- Small, well-scoped PRs are preferred
- Check existing icons in the target folder for consistency before adding a new one
Your contributions help make AnimateIcons better for everyone.