Roc Icons (@marcus/roc)
Handcrafted SVG icon library with 416 icons across 4 styles. Use this skill when adding, replacing, or configuring icons in any project.
Browse all icons: https://roc.haplab.com
Install
npm install @marcus/roc
Requires Node.js 22+.
Styles
| Style |
Import path |
Description |
Use when |
| outline |
*/outline |
Rounded strokes, 1.5px |
Default for most UI |
| solid |
*/solid |
Filled shapes |
Active/selected states, nav bars |
| duotone |
*/duotone |
Tinted bg + outline strokes |
Feature highlights, dashboards |
| sharp |
*/sharp |
Angular, miter joins, butt caps |
Technical/developer UIs |
Pick one style per context. Don't mix outline and solid in the same toolbar.
React
import { Home, Bell, Search } from '@marcus/roc/react/outline';
<Home size={20} className="text-gray-500" />
<Bell size={20} />
<Search size={16} /> {/* stroke auto-adjusts to 1.75 at <=16px */}
Import patterns
// Single style barrel import
import { Home, Bell } from '@marcus/roc/react/outline';
import { Home, Bell } from '@marcus/roc/react/solid';
import { Home, Bell } from '@marcus/roc/react/duotone';
import { Home, Bell } from '@marcus/roc/react/sharp';
Props
| Prop |
Type |
Default |
Notes |
size |
number |
24 |
Width and height in px |
strokeWidth |
number |
auto |
1.75 at <=16px, 1.5 at 20px+. Only on stroked styles (outline, duotone, sharp). |
className |
string |
— |
CSS class |
...rest |
SVGProps |
— |
All standard SVG attributes passed through |
Svelte
<script>
import Home from '@marcus/roc/svelte/outline/Home.svelte';
import Bell from '@marcus/roc/svelte/solid/Bell.svelte';
</script>
<Home size={24} class="icon" />
<Bell size={20} />
Import patterns
// Individual component (recommended for Svelte)
import Home from '@marcus/roc/svelte/outline/Home.svelte';
// Barrel import (works but larger bundle)
import { Home, Bell } from '@marcus/roc/svelte/outline';
Component names are PascalCase: arrow-left.svg becomes ArrowLeft.svelte.
HTML Sprite
Copy dist/sprite.svg to your public directory, then:
<svg width="24" height="24" class="text-gray-700">
<use href="/sprite.svg#home-outline" />
</svg>
Symbol IDs: {name}-{style} (e.g., bell-solid, search-duotone, home-sharp).
Duotone Setup
Duotone icons require a CSS custom property. Add once globally:
:root {
--color-duotone-fill: rgba(94, 106, 210, 0.15);
}
Adjust the color/opacity to match your design system. Common values:
/* Blue tint (default) */
--color-duotone-fill: rgba(94, 106, 210, 0.15);
/* Brand-colored */
--color-duotone-fill: rgba(var(--brand-rgb), 0.12);
/* Neutral */
--color-duotone-fill: rgba(0, 0, 0, 0.08);
Metadata
import metadata from '@marcus/roc/metadata';
// { icons: [...], categories: [...], total: 416 }
Use for building icon pickers, search, or documentation.
Available Icons
416 icons across 18 categories. See references/icon-catalog.md for the full list.
Categories: Navigation, Data, Communication, People, System, Brand, Actions, Files, Media, Weather, Transport, Commerce, Development, Devices, Objects, Food, Gaming, Nature
Common icons by use case:
| Use case |
Icons |
| Navigation |
home, arrow-*, chevron-*, caret-*, compass, map, globe |
| Forms & input |
search, check, x, plus, minus, eye, eye-off, pencil |
| CRUD actions |
plus, pencil, trash, copy, download, upload, share |
| Auth & security |
lock, unlock, key, shield, shield-check, fingerprint, sign-out |
| Notifications |
bell, mail, inbox, send, message-circle, chat |
| Media controls |
play, pause, stop, skip-forward, skip-back, volume, volume-off |
| Status & feedback |
check-circle, x-circle, alert-triangle, alert-circle, info, help-circle |
| Data viz |
chart, pie-chart, line-chart, bar-chart, trending-up, trending-down, activity |
| E-commerce |
shopping-cart, shopping-bag, credit-card, dollar, euro, tag, receipt |
| Social/Brand |
github, twitter-logo, discord-logo, slack-logo, linkedin-logo + 30 more |
Migration from Other Libraries
From Lucide / Heroicons / Phosphor
- Replace the import source:
// Before (Lucide)
import { Home, Bell } from 'lucide-react';
// After (Roc)
import { Home, Bell } from '@marcus/roc/react/outline';
Props map directly: size, strokeWidth, className all work the same.
Name differences: most icon names match Lucide conventions. Check the icon catalog for exact names. Key differences:
- Kebab-case filenames:
arrow-left not arrowLeft
- PascalCase components:
ArrowLeft (same as Lucide)
- Brand icons use
-logo suffix: github (icon), twitter-logo, discord-logo
From Font Awesome
Replace <i> tags with components:
// Before
<i className="fa-solid fa-house" />
// After
import { Home } from '@marcus/roc/react/solid';
<Home size={20} />
Svelte migration
<!-- Before (any icon lib) -->
<Icon name="home" />
<!-- After (Roc) -->
<script>
import Home from '@marcus/roc/svelte/outline/Home.svelte';
</script>
<Home size={24} />
Checklist for Migration
1---2name: roc-icons3description: Use Roc icon library (@marcus/roc) in projects. Covers React, Svelte, and HTML sprite usage, all 4 styles, and migration from other icon sets.4---56# Roc Icons (@marcus/roc)78Handcrafted SVG icon library with 416 icons across 4 styles. Use this skill when adding, replacing, or configuring icons in any project.910**Browse all icons**: https://roc.haplab.com1112## Install1314```bash15npm install @marcus/roc16```1718Requires Node.js 22+.1920## Styles2122| Style | Import path | Description | Use when |23|-------|------------|-------------|----------|24| **outline** | `*/outline` | Rounded strokes, 1.5px | Default for most UI |25| **solid** | `*/solid` | Filled shapes | Active/selected states, nav bars |26| **duotone** | `*/duotone` | Tinted bg + outline strokes | Feature highlights, dashboards |27| **sharp** | `*/sharp` | Angular, miter joins, butt caps | Technical/developer UIs |2829Pick one style per context. Don't mix outline and solid in the same toolbar.3031## React3233```jsx34import { Home, Bell, Search } from '@marcus/roc/react/outline';3536<Home size={20} className="text-gray-500" />37<Bell size={20} />38<Search size={16} /> {/* stroke auto-adjusts to 1.75 at <=16px */}39```4041### Import patterns4243```jsx44// Single style barrel import45import { Home, Bell } from '@marcus/roc/react/outline';46import { Home, Bell } from '@marcus/roc/react/solid';47import { Home, Bell } from '@marcus/roc/react/duotone';48import { Home, Bell } from '@marcus/roc/react/sharp';49```5051### Props5253| Prop | Type | Default | Notes |54|------|------|---------|-------|55| `size` | number | 24 | Width and height in px |56| `strokeWidth` | number | auto | 1.75 at <=16px, 1.5 at 20px+. Only on stroked styles (outline, duotone, sharp). |57| `className` | string | — | CSS class |58| `...rest` | SVGProps | — | All standard SVG attributes passed through |5960## Svelte6162```svelte63<script>64 import Home from '@marcus/roc/svelte/outline/Home.svelte';65 import Bell from '@marcus/roc/svelte/solid/Bell.svelte';66</script>6768<Home size={24} class="icon" />69<Bell size={20} />70```7172### Import patterns7374```js75// Individual component (recommended for Svelte)76import Home from '@marcus/roc/svelte/outline/Home.svelte';7778// Barrel import (works but larger bundle)79import { Home, Bell } from '@marcus/roc/svelte/outline';80```8182Component names are PascalCase: `arrow-left.svg` becomes `ArrowLeft.svelte`.8384## HTML Sprite8586Copy `dist/sprite.svg` to your public directory, then:8788```html89<svg width="24" height="24" class="text-gray-700">90 <use href="/sprite.svg#home-outline" />91</svg>92```9394Symbol IDs: `{name}-{style}` (e.g., `bell-solid`, `search-duotone`, `home-sharp`).9596## Duotone Setup9798Duotone icons require a CSS custom property. Add once globally:99100```css101:root {102 --color-duotone-fill: rgba(94, 106, 210, 0.15);103}104```105106Adjust the color/opacity to match your design system. Common values:107108```css109/* Blue tint (default) */110--color-duotone-fill: rgba(94, 106, 210, 0.15);111112/* Brand-colored */113--color-duotone-fill: rgba(var(--brand-rgb), 0.12);114115/* Neutral */116--color-duotone-fill: rgba(0, 0, 0, 0.08);117```118119## Metadata120121```js122import metadata from '@marcus/roc/metadata';123// { icons: [...], categories: [...], total: 416 }124```125126Use for building icon pickers, search, or documentation.127128## Available Icons129130416 icons across 18 categories. See [references/icon-catalog.md](references/icon-catalog.md) for the full list.131132**Categories**: Navigation, Data, Communication, People, System, Brand, Actions, Files, Media, Weather, Transport, Commerce, Development, Devices, Objects, Food, Gaming, Nature133134**Common icons by use case**:135136| Use case | Icons |137|----------|-------|138| Navigation | `home`, `arrow-*`, `chevron-*`, `caret-*`, `compass`, `map`, `globe` |139| Forms & input | `search`, `check`, `x`, `plus`, `minus`, `eye`, `eye-off`, `pencil` |140| CRUD actions | `plus`, `pencil`, `trash`, `copy`, `download`, `upload`, `share` |141| Auth & security | `lock`, `unlock`, `key`, `shield`, `shield-check`, `fingerprint`, `sign-out` |142| Notifications | `bell`, `mail`, `inbox`, `send`, `message-circle`, `chat` |143| Media controls | `play`, `pause`, `stop`, `skip-forward`, `skip-back`, `volume`, `volume-off` |144| Status & feedback | `check-circle`, `x-circle`, `alert-triangle`, `alert-circle`, `info`, `help-circle` |145| Data viz | `chart`, `pie-chart`, `line-chart`, `bar-chart`, `trending-up`, `trending-down`, `activity` |146| E-commerce | `shopping-cart`, `shopping-bag`, `credit-card`, `dollar`, `euro`, `tag`, `receipt` |147| Social/Brand | `github`, `twitter-logo`, `discord-logo`, `slack-logo`, `linkedin-logo` + 30 more |148149## Migration from Other Libraries150151### From Lucide / Heroicons / Phosphor1521531. Replace the import source:154155```jsx156// Before (Lucide)157import { Home, Bell } from 'lucide-react';158159// After (Roc)160import { Home, Bell } from '@marcus/roc/react/outline';161```1621632. Props map directly: `size`, `strokeWidth`, `className` all work the same.1641653. Name differences: most icon names match Lucide conventions. Check the [icon catalog](references/icon-catalog.md) for exact names. Key differences:166 - Kebab-case filenames: `arrow-left` not `arrowLeft`167 - PascalCase components: `ArrowLeft` (same as Lucide)168 - Brand icons use `-logo` suffix: `github` (icon), `twitter-logo`, `discord-logo`169170### From Font Awesome171172Replace `<i>` tags with components:173174```jsx175// Before176<i className="fa-solid fa-house" />177178// After179import { Home } from '@marcus/roc/react/solid';180<Home size={20} />181```182183### Svelte migration184185```svelte186<!-- Before (any icon lib) -->187<Icon name="home" />188189<!-- After (Roc) -->190<script>191 import Home from '@marcus/roc/svelte/outline/Home.svelte';192</script>193<Home size={24} />194```195196## Checklist for Migration197198- [ ] Install `@marcus/roc`199- [ ] Remove old icon package from dependencies200- [ ] Find-and-replace imports (match old names to Roc names via catalog)201- [ ] Add duotone CSS variable if using duotone style202- [ ] Verify icon rendering at target sizes (16, 20, 24)203- [ ] Check that `currentColor` inheritance works with your color system