Evetry Icon
Static vector icon REST API powered by Iconify. Zero server runtime, CDN edge delivery.
Loading icons...
Click icon to copy SVG
Static REST API Endpoints
GET /api/collections.json— Catalog of available icon sets, licenses, and icon countsGET /api/{set}.json— Collection manifest (e.g./api/lucide.json)GET /api/{set}/{name}.svg— Standalone 24x24 SVG file (e.g./api/lucide/heart.svg)GET /api/{set}/{name}.json— Detailed icon metadata (viewBox, raw path body)GET /api/search-index.json— Compact search dictionary grouped by collection
Direct HTML Usage
<!-- Embed raw SVG directly from CDN -->
<img src="https://icon.evetry.com/api/lucide/heart.svg" width="24" height="24" alt="Heart" />
NPM Package (@evetry/icon)
A zero-runtime client SDK and SVG processing toolkit for frontend applications.
# Install with Bun
bun add @evetry/icon
# Install with NPM
npm install @evetry/icon
Quick Start (icon)
import { icon, processSvg } from '@evetry/icon';
// 1. Fetch standalone raw SVG directly
const rawSvg = await icon.getSvg('lucide', 'heart');
// 2. Fetch and transform SVG on the fly in the browser
const customSvg = await icon.getSvg('lucide', 'sparkles', {
size: 32, // 32x32 px
stroke: '#2563eb', // Custom stroke color
fill: 'none', // Custom fill color
strokeWidth: 2, // Stroke thickness
rotate: 90, // Rotate degrees
flip: 'horizontal' // Flip horizontal
});
// 3. List all collections
const collections = await icon.listCollections();
// 4. List all icons in a collection
const lucide = await icon.listIcons('lucide');
console.log(lucide.icons); // [{ name: "heart", svg: "https://icon.evetry.com/api/lucide/heart.svg" }]
// 5. Instant search across all collections or specific set
const results = await icon.search('camera', { set: 'lucide', limit: 20 });
Custom Subdomain / Self-Hosted Instance
import { Icon } from '@evetry/icon';
// Override default endpoint if you use a custom domain
const customIcon = new Icon({
baseUrl: 'https://my-custom-icons.domain.com'
});
Client-Side SVG Processing Utilities
Transform any SVG string directly in the browser with zero server round-trips:
import { processSvg, svgToDataUri, svgToPngBlob, downloadSvg } from '@evetry/icon';
// Transform SVG attributes
const svg = processSvg(rawSvg, {
size: 48,
stroke: '#10b981',
strokeWidth: 1.5,
});
// Convert to Data URI for <img src="..." /> or CSS background
const dataUri = svgToDataUri(svg);
// Convert to 512x512 PNG Blob in the browser
const pngBlob = await svgToPngBlob(svg, 512);
// Download SVG in browser
downloadSvg(svg, 'my-custom-icon.svg');
Standalone uFuzzy Search Engine
import { IconSearchEngine } from '@evetry/icon';
const search = new IconSearchEngine();
await search.loadIndex('https://icon.evetry.com/api/search-index.json');
const matches = search.search('heart', 'lucide', 25);
Build Static API CLI Parameters
# Default curated set (Lucide, Heroicons, Tabler, Remix Icon)
bun run build:icons
# Custom collections (see COLLECTIONS.md for all 238 available IDs)
bun scripts/build-icons.ts --sets=lucide,heroicons,ph,simple-icons
# Build all 238 collections (~200,000+ icons)
bun scripts/build-icons.ts --all