import { Suspense } from "react"; import { ArrowRight, ArrowUpRight, Bot, Blocks, Code, Code2, Github, Package, Palette, Sparkles, Terminal, Zap, } from "lucide-react"; import Link from "next/link"; import type { Metadata } from "next"; import { getCategoryCounts, getFormattedIconCount } from "@/lib/icons"; import { SidebarShell } from "@/components/layout/sidebar-shell"; export const metadata: Metadata = { title: "Extensions & Integrations - Figma, VS Code, React, CLI", description: "Use 6,030+ free SVG icons in Figma, VS Code, Raycast, React, Vue, CLI, and more. Official Figma plugin, npm packages, MCP server, and CDN.", keywords: [ "Figma brand icons plugin", "SVG icon Figma plugin", "SVG icon VS Code extension", "brand icon npm package", "SVG icon React component", "SVG icon CLI", "SVG icon CDN", "MCP server icons", "Raycast SVG icons", "AI agent skill icons", ], openGraph: { title: "Extensions & Integrations | theSVG", description: "Official Figma plugin, VS Code extension, React/Vue/Svelte components, CLI, MCP server, and CDN.", siteName: "theSVG", }, alternates: { canonical: "https://thesvg.org/extensions" }, }; type Status = "available" | "coming-soon" | "community"; interface Integration { name: string; description: string; status: Status; cta: string; href: string; iconSlug?: string; iconFallback?: React.ReactNode; } interface Category { id: string; label: string; description: string; icon: React.ReactNode; items: Integration[]; } const iconCount = getFormattedIconCount(); const CATEGORIES: Category[] = [ { id: "npm", label: "Libraries & SDKs", description: "Install and import brand icons in your project", icon: , items: [ { name: "thesvg", description: `The official npm package. All ${iconCount}+ icons, tree-shakeable, typed.`, status: "available", cta: "npm", href: "https://www.npmjs.com/package/thesvg", iconSlug: "npm", }, { name: "@thesvg/icons", description: "Core icon data. Tree-shakeable, dual ESM/CJS, per-icon imports.", status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/icons", iconSlug: "npm", }, { name: "@thesvg/react", description: `${iconCount}+ typed React components. forwardRef, tree-shakeable, dark mode aware.`, status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/react", iconSlug: "react", }, { name: "@thesvg/vue", description: `${iconCount}+ typed Vue 3 components. Render-function based, tree-shakeable, no SFC compiler needed.`, status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/vue", iconSlug: "vuedotjs", }, { name: "@thesvg/svelte", description: `${iconCount}+ Svelte components with typed props. Works with Svelte 4 and 5, SvelteKit ready.`, status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/svelte", iconSlug: "svelte", }, { name: "Python", description: "Community Python wrapper for the theSVG API and CDN.", status: "community", cta: "Build this", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "python", }, ], }, { id: "editors", label: "Editor Extensions", description: "Search and insert icons without leaving your editor", icon: , items: [ { name: "VS Code", description: `Search ${iconCount} icons from the command palette. Copy SVG, JSX, CDN link, or insert at cursor.`, status: "available", cta: "Install", href: "https://marketplace.visualstudio.com/items?itemName=glincker.thesvg", iconSlug: "visual-studio-code", }, { name: "JetBrains", description: "IntelliJ, WebStorm, PyCharm. Browse from the IDE tool window.", status: "community", cta: "Build this", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "jetbrains", }, { name: "Neovim", description: "Lua plugin with Telescope picker. Insert SVG URL or inline content at cursor.", status: "available", cta: "Install", href: "https://github.com/glincker/thesvg/tree/main/extensions/neovim", iconSlug: "neovim", }, ], }, { id: "design", label: "Design Tools", description: "Drag and drop brand icons into your designs", icon: , items: [ { name: "Figma Plugin", description: `Browse ${iconCount}+ brand SVGs, variant picker, recents row, keyboard shortcuts. Insert as editable vectors.`, status: "available", cta: "Install", href: "https://www.figma.com/community/plugin/1612997159050367763", iconSlug: "figma", }, { name: "Sketch Plugin", description: "Insert brand SVGs directly into Sketch artboards.", status: "community", cta: "Build this", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "sketch", }, { name: "Framer", description: "Use CDN URLs directly. Zero config, always up to date.", status: "available", cta: "Docs", href: "https://www.jsdelivr.com/package/gh/glincker/thesvg", iconSlug: "framer", }, ], }, { id: "developer", label: "Developer Tools", description: "CLI, CDN, and API for programmatic access", icon: , items: [ { name: "@thesvg/cli", description: "shadcn-style installer. npx @thesvg/cli add github copies the SVG.", status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/cli", iconFallback: , }, { name: "CDN via jsDelivr", description: "Serve any icon via global CDN. Use directly in HTML, CSS, or markdown.", status: "available", cta: "Docs", href: "https://www.jsdelivr.com/package/gh/glincker/thesvg", iconSlug: "jsdelivr", }, { name: "Homebrew", description: "Install the thesvg CLI via Homebrew. brew tap glincker/thesvg && brew install thesvg.", status: "available", cta: "brew tap", href: "https://github.com/glincker/homebrew-thesvg", iconSlug: "homebrew", }, { name: "REST API", description: "Paid API coming soon at api.thesvg.org. Search, fetch metadata, retrieve SVGs programmatically.", status: "coming-soon", cta: "Coming Soon", href: "https://github.com/GLINCKER/thesvg", iconFallback: , }, ], }, { id: "ai", label: "AI & Automation", description: "Let AI agents and launchers access brand icons", icon: , items: [ { name: "MCP Server", description: "Works with Claude, Cursor, Windsurf. Fetch icons via tool calls.", status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/mcp-server", iconSlug: "claude", }, { name: "Agent Skill", description: "Drop-in skill for Claude Code, Cursor, and other AI agents. Install via skills.sh: npx skills add glincker/thesvg", status: "available", cta: "View on skills.sh", href: "https://skills.sh/glincker/thesvg", iconFallback: , }, { name: "Raycast Extension", description: `Search ${iconCount} icons, copy SVG or CDN URL in one keystroke. Filter by category, preview variants.`, status: "available", cta: "Install", href: "https://www.raycast.com/thegdsks/thesvg", iconSlug: "raycast", }, { name: "Alfred Workflow", description: "macOS quick access. Search anywhere, copy SVG, CDN URL, or markdown.", status: "available", cta: "Install", href: "https://github.com/glincker/thesvg/tree/main/extensions/alfred", iconSlug: "alfred", }, ], }, { id: "integrations", label: "Integrations", description: "Use theSVG in no-code and creative tools", icon: , items: [ { name: "Browser Extension", description: "Chrome, Firefox, Edge popup. Search 6,030+ brand SVGs, copy SVG, CDN URL, or markdown. MV3, no telemetry.", status: "coming-soon", cta: "View source", href: "https://github.com/glincker/thesvg/tree/main/extensions/browser", iconSlug: "google-chrome", }, { name: "Webflow", description: "Embed icons via CDN URLs using the custom embed component.", status: "coming-soon", cta: "GitHub", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "webflow", }, { name: "Notion", description: "Embed brand SVGs in pages using the CDN URL as an image block.", status: "coming-soon", cta: "GitHub", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "notion", }, { name: "Blender", description: "Import SVGs as curves. Great for 3D logo mockups.", status: "community", cta: "Build this", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "blender", }, ], }, { id: "frameworks", label: "Framework Components", description: "Native components for your framework of choice", icon: , items: [ { name: "@thesvg/vue", description: `${iconCount}+ typed Vue 3 components. Render-function based, tree-shakeable, no SFC compiler needed.`, status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/vue", iconSlug: "vuedotjs", }, { name: "@thesvg/svelte", description: `${iconCount}+ Svelte components with typed props. Works with Svelte 4 and 5, SvelteKit ready.`, status: "available", cta: "npm", href: "https://www.npmjs.com/package/@thesvg/svelte", iconSlug: "svelte", }, { name: "Angular", description: "NgModule and standalone component support.", status: "community", cta: "Build this", href: "https://github.com/GLINCKER/thesvg/issues", iconSlug: "angular", }, ], }, ]; const STATUS_CONFIG: Record = { available: { dot: "bg-green-500", label: "Published" }, "coming-soon": { dot: "bg-orange-500", label: "Planned" }, community: { dot: "bg-blue-500", label: "Open" }, }; function BrandIcon({ slug, fallback }: { slug?: string; fallback?: React.ReactNode }) { if (slug) { return ( ); } return <>{fallback}; } function ExtLink({ href, children, className, }: { href: string; children: React.ReactNode; className?: string; }) { const isExternal = href.startsWith("http"); if (isExternal) { return ( {children} ); } return ( {children} ); } function IntegrationCard({ item }: { item: Integration }) { const status = STATUS_CONFIG[item.status]; return (
{/* Header row: icon + status */}
{status.label}
{/* Name */}

{item.name}

{/* Description */}

{item.description}

{/* CTA link */} {item.cta}
); } function CategorySection({ category }: { category: Category }) { return (
{category.icon}

{category.label}

{category.description}

{category.items.map((item) => ( ))}
); } export default function ExtensionsPage() { const categoryCounts = getCategoryCounts(); return (
{/* Header */}

Extensions & Integrations

Use theSVG icons everywhere you build, design, and ship.

{/* Categories */}
{CATEGORIES.map((category) => ( ))}
{/* Build Your Own CTA */}

Build your own

The API and CDN are fully open with no auth required. Build a plugin, extension, or workflow, then open a PR to list it here.

{/* CDN endpoints */}
GET cdn.jsdelivr.net/gh/glincker/thesvg@main/public/icons/{"{slug}"}/default.svg
GET cdn.jsdelivr.net/gh/glincker/thesvg@main/public/icons/{"{slug}"}/{"{variant}"}.svg
GET cdn.jsdelivr.net/gh/glincker/thesvg@main/data/icons.json
{/* Action buttons */}
); }