- Introduction
- Pitch
- Hogwarts
- Live Demo
- MVP
- Roadmap
- Launch Sprint
- PRD
- Get Started
- Localhost
- Architecture
- Structure
- Pattern
- Page
- Layout
- Content
- Types
- Config
- Actions
- Queries
- Authorization
- Validation
- Form
- Table
- Detail
- Card
- Util
- Hooks
- List Params
- Views
- README.md
- ISSUE.md
- Technology Stack
- Database
- File
- CDN Assets
- Entry Points
- Dashboard
- Authentication
- Credentials
- OAuth
- Flow Diagrams
- Multi-Tenancy
- Offline
- Onboarding
- Onboarding Videos
- Add Values
- Admission
- Application
- Attendance
- Compliance
- Profile
- Exams
- Exam Wizard
- Timetable
- Classrooms
- Notifications
- Conference
- LMS (Lumos)
Finance
- Finance
- Fee Management
- Invoice
- Wallet
- Salary
- Payroll
- Timesheet
- Expenses
- Budget
- Receipt
- Accounts
- Banking
- Reports
- Dashboard
- Permissions
- Messages
- Integration Flow
- Provision
- AI Document Processing
- Document Intelligence
- Internationalization
- Translation
- Translation Guide
- Icons
- Docs Factory
- Inspiration
- Listings
- Teachers
- Students
- Catalog
- Library
- Contributing
- Code of conduct
- GitHub Workflow
- Database Seeds
- Database Safety
- Test Accounts
- Playwright
- Prettier
- Block Rebound
Sales & GTM
A single namespace exposes all icons via Icons.name. Icons use currentColor and inherit from parent text color. The Anthropic design system ships ~100 illustrative icons; the rest are stroke-based shadcn-style components.
Status
| Metric | Value |
|---|---|
| Total icons | 180+ |
| Categories | 14 |
| Theme-aware | Light/dark via currentColor |
| Type-safe | IconName union |
| Registry | Full metadata for all icons |
| Migration | In progress off lucide-react — run /icon-audit for the live count |
Quick start
import { Icons } from "@/components/icons"
<Icons.github className="size-5" />
<Icons.check className="size-5 text-green-500" />
<Icons.alertCircle className="size-5 text-destructive" />
<Icons.spinner className="size-5 animate-spin" />Import patterns
| Pattern | When |
|---|---|
import { Icons } from "@/components/icons" then Icons.github | Default — most readable |
import { GitHubIcon } from "@/components/icons" | Tree-shaking sensitive code |
import { Icon } from "@/components/icons" then <Icon name="github" /> | Dynamic name from data |
Sizing and color
Use size-* not w-* h-*. Icons inherit text color by default; override via Tailwind text utilities or semantic icon classes.
<Icons.github className="size-4" /> // 16px
<Icons.github className="size-5" /> // 20px
<div className="text-primary"><Icons.github /></div>
<Icons.alertCircle className="text-destructive" />
<Icons.check className="icon-success" />
<Icons.trash className="icon-destructive" />Categories
| Category | Use for |
|---|---|
SYSTEM | Core UI — alert, check, x, plus, minus, search, settings, edit, copy, trash, upload, download, eye, lock, user |
INTEGRATIONS | Brand logos — nextjs, react, typescript, tailwindcss, shadcnui, prisma, zod, github, git, figma, discord, framer, claude, patreon |
CONTENT | Documents — docs, report, pdf, logbook, proposal, fileText |
APPLICATIONS | App-specific |
PRODUCTIVITY | Workflow |
DEVELOPMENT | Dev tools — mcp, cursor, extensions |
PROGRAMMING | Languages — python, rust, r |
ACADEMIC | Education |
FINANCE | invoice, salary, subscription |
COMMUNICATION | mail, notification |
RATINGS | excellent, good, average, poor |
SHAPES | Geometric |
ILLUSTRATIONS | Anthropic illustrations |
BRANDING | Brand identity |
Anthropic showcase
112 icons found
Logos
Claude
MCP
Navigation
UI
Development
Social
Content
Pictograms
Anthropic
Anthropic UI icons
anthropicAsparkleterminalcodeWindowchatlightninghandsBuildchecklistAnthropic illustrations
import Image from "next/image"
import { ANTHROPIC_ILLUSTRATIONS } from "@/components/icons"
;<Image
src={ANTHROPIC_ILLUSTRATIONS.handsBuild}
alt=""
width={200}
height={200}
/>Available: handsBuild, handsStack, objectsPuzzle, category01 through category14.
Migration off lucide-react
// Before
import { AlertCircle, RefreshCw, MoonIcon, SunIcon } from "lucide-react"
<AlertCircle className="h-4 w-4" />
<RefreshCw className="h-5 w-5 animate-spin" />
// After
import { Icons } from "@/components/icons"
<Icons.alertCircle className="size-4" />
<Icons.refresh className="size-5 animate-spin" />| lucide-react | Unified |
|---|---|
AlertCircle | Icons.alertCircle |
RefreshCw | Icons.refresh |
MoonIcon / SunIcon | Icons.moon / Icons.sun |
ArrowLeft/Right | Icons.arrowLeft/Right |
ChevronUp/Down/Left/Right | Icons.chevronUp/Down/Left/Right |
Check / X / Plus / Minus | Icons.check / Icons.x / Icons.plus / Icons.minus |
Loader2 | Icons.spinner |
MoreHorizontal / MoreVertical | Icons.moreHorizontal / Icons.moreVertical |
Settings, User, Users, Mail | Icons.settings, Icons.user, Icons.users, Icons.mail |
Eye / EyeOff / Lock | Icons.eye / Icons.eyeOff / Icons.lock |
Edit / Copy / Trash | Icons.edit / Icons.copy / Icons.trash |
Upload / Download / Search | Icons.upload / Icons.download / Icons.search |
Calendar / FileText | Icons.calendar / Icons.fileText |
Automation commands
| Command | Purpose |
|---|---|
/icon-add <name> | Add a new icon |
/icon-migrate <file|batch|all|report> | Migrate lucide imports |
/icon-audit | Adoption percentage, files needing migration |
/icon-registry <sync|add|validate|export> | Manage registry |
/icon-validate | Validate against design system rules |
/icon-fetch <anthropic|education|school|all> | Fetch from external sources |
Adding a new icon
// 1. categories/system.tsx
export const NewIcon = (props: IconProps) => (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
{...props}
>
<path d="…" />
</svg>
)
// 2. index.tsx
export const Icons = {
// …
newIcon: SystemIcons.NewIcon,
} as const
// 3. registry.ts
{
id: "new-icon",
name: "New Icon",
component: SystemIcons.NewIcon,
category: IconCategory.SYSTEM,
tags: ["new", "icon"],
viewBox: "0 0 24 24",
customizable: true,
}Guidelines: use currentColor, spread {...props} last, include xmlns, prefer viewBox="0 0 24 24", stroke-based for lucide consistency.
Registry
interface IconMetadata {
id: string
name: string
component: IconComponent
category: IconCategory
tags: string[]
description?: string
viewBox: string
customizable: boolean
}import {
getIconsByCategory,
IconCategory,
searchIcons,
} from "@/components/icons"
const arrows = searchIcons("arrow")
const systemIcons = getIconsByCategory(IconCategory.SYSTEM)Helpers
import {
getAllIconNames,
getIconCount,
getIconForLanguage,
} from "@/components/icons"
import type { IconName } from "@/components/icons"
const TS = getIconForLanguage("ts") // TypeScriptIcon
const names = getAllIconNames()
const count = getIconCount() // 180+
function IconButton({ icon }: { icon: IconName }) {
const I = Icons[icon]
return <I className="size-4" />
}Directory layout
src/components/icons/
├── index.tsx # Icons namespace, exports
├── types.ts # IconCategory enum, types
├── constants.ts # Category metadata, style guide
├── utils.ts # search, filter
├── registry.ts # 180+ entries
├── anthropic.tsx # Anthropic icons
├── anthropic-showcase.tsx
├── components/icon-wrapper.tsx
└── categories/
├── system.tsx, integrations.tsx, content.tsx,
├── apps.tsx, productivity.tsx, development.tsx,
├── programming.tsx, ratings.tsx, shapes.tsx