The reference implementation for interface iconography.
Each icon is a geometric specification processed through optical compensation, weight normalization, and sub-pixel hinting. Six rendering styles derived from a single canonical definition. Zero runtime dependencies. Deterministic output across every platform.
npm install @totakit/iconsView sourceBrowse the collection.
Search, filter, and copy icons as React imports, CDN URLs, or MCP tool invocations.
Computed, not drawn.
Conventional icon libraries are collections of hand-drawn vector files. This system operates differently. Icons are defined as geometric primitives with optical metadata. A rendering engine applies compensation algorithms at build time — the same class of corrections used in professional typeface design.
Optical stroke compensation
Curved strokes are perceived thinner than straight strokes at identical widths. The engine applies a correction coefficient derived from each primitive's curve ratio.
strokeWidth × (1 + k × curveRatio)Weight normalization
Icons carry a weight class from 1 to 5. The renderer adjusts effective size so that a thin arrow and a dense shield occupy equivalent visual mass at the same nominal size.
size × (1 + factor × (3 − weightClass))Sub-pixel hinting
At sizes that are not exact multiples of 24, stroke coordinates fall between pixel boundaries. The renderer snaps to the nearest whole pixel — centers for odd-width strokes, edges for even.
Applied at ≤48px on non-24-multiple sizesMicro simplification
Below 16 pixels, geometric detail degrades into noise. Micro variants apply Douglas-Peucker path simplification, widen counters, and increase stroke weight to preserve legibility.
Separate geometry for 12–16px renderingDeterministic output
Identical input produces identical bytes on every platform — Node.js, Deno, Bun, browser, Cloudflare Worker. All floating-point intermediates are rounded to six decimal places.
round6(n) = Math.round(n × 1e6) / 1e6Zero-dependency engine
The rendering pipeline has no runtime dependencies. Pure functions, no DOM access, no network calls, no global state. Every function is deterministic and side-effect free.
Pure TypeScript · 0 importsSix styles. One definition.
Each icon ships in six rendering styles derived from a single geometric definition. Style selection is a build-time decision — no runtime overhead, no conditional logic, no unused variants in the bundle.
Outline
StandardThe default. Balanced stroke weight for interfaces, navigation, and toolbars. Reads clearly from 20px to 48px.
1.5pxSolid
HeavyMaximum visual weight. Filled geometry for buttons, active states, and high-emphasis contexts.
FilledDuotone
MixedPrimary and secondary layers at different opacities. Adds depth to dashboards, illustrations, and marketing surfaces.
Two-toneThin
LightReduced stroke for elegant, editorial interfaces. Best at 32px and above where the thinner line remains legible.
1.0pxBold
HeavyIncreased stroke for small sizes and low-contrast environments. Maintains clarity on dark backgrounds and dense layouts.
2.0pxMicro
SimplifiedGeometrically simplified for 12–16px rendering. Reduced detail, thicker strokes, wider counters. For tab bars, badges, and favicons.
2.0pxThree surfaces. One canonical source.
Every distribution surface renders from the same computed output. Import as React components for build-time tree-shaking. Reference via CDN for zero-build integration. Connect via MCP for AI agent retrieval by semantic meaning.
Package
npmTree-shakeable ESM components with forwardRef, TypeScript declarations, and full SVG prop passthrough. Each icon is a separate module.
import { ArrowRight } from '@totakit/icons'
<ArrowRight size={24} />CDN
EdgeDirect URL access served from Cloudflare edge with immutable cache headers. No build step. No package manager. No JavaScript required.
https://icons.totakit.com/svg/
arrow-right.svg?style=solid&size=32MCP Server
AI AgentsModel Context Protocol server for AI agent integration. Agents search by semantic meaning and receive production-ready SVG in a single tool invocation.
npx @totakit/icons-mcp-server
icons_search({ query: "danger" })
→ alert-triangle, shield-alert, flameAdopt the standard.
Install the package. Import what you need. Every icon in your interface will hold its weight at every size, on every screen, in every rendering context.