Icons
Fluent SVGs, embedded in the binary — builds never need the network.
Icons are SVGs fetched once by the CLI (normalized at fetch time) and committed. A build-failing test asserts every icon rasterizes. There is exactly one icon path — never add a second.
Your own icons — the whole Iconify universe
Any icon on icon-sets.iconify.design (200,000+ across every major set) is one command away: paste its ref and the CLI appends it to your manifest and fetches the SVG. You embed the result and register it — after that it renders through the same cached pipeline as the built-ins, and your app carries exactly the icons it uses. The network runs at development time only; builds and runtime never touch it.
# 1. Browse icon-sets.iconify.design, copy a ref, fetch it —
# SVGs are normalized and typed constants generated in one step:
go run github.com/ikaito-com/lotusui/cmd/lotusui icons \
-manifest icons/manifest.txt -out icons \
-gen icons_gen.go -genpkg main tabler:rocket
# 2. Embed and register (once), and wire go:generate so the
# workflow is one standard command from then on:
# //go:embed icons/*.svg
# var appIcons embed.FS
# func init() { lotusui.RegisterIconFS(appIcons, "icons") }
# 3. Use them, compile-checked:
# lotusui.SVGIcon(IconRocket, 24, th.Palette.FgSubtle)