SVG assets — reference & aliases
Every svg() import takes an asset:svg/<set>/<name>.svg URI (or your own
file path). The bundled catalogue covers 6,404 shapes across four sets,
vendored by scripts/fetch-svg-assets.sh and screened with
manic svgcheck assets/svg. Licences: assets/svg/LICENSES.md.
Reference notation
svg(logo, (cx, cy), "asset:svg/lucide/rocket.svg", 300); // an icon
svg(fin, (cx, cy), "asset:svg/flags/in.svg", 220); // a flag (ISO code)
svg(joy, (cx, cy), "asset:svg/emoji/fire.svg", 140); // an emoji (alias)
svg(joy, (cx, cy), "asset:svg/emoji/1f525.svg", 140); // …same, by codepoint
| Set | Count | Naming | Licence | Imports as |
|---|---|---|---|---|
lucide/ | ~1,756 | icon name (cpu, database, map-pin, …) | ISC | themeable outline (recolour it) |
heroicons/ | ~324 | icon name (bolt, beaker, rocket-launch, …) | MIT | themeable solid glyph |
flags/ | ~271 | ISO 3166-1 alpha-2 (us, in, jp, de, …) | MIT | full colour |
emoji/ | ~4,009 | Unicode codepoint (1f525.svg) or friendly alias | CC-BY 4.0 | full colour |
Themeable vs faithful. Lucide/Heroicons paint with currentColor, so they
take the entity’s colour — recolor(icon, cyan) just works. Flags and emoji keep
their real colours. Concave shapes (stars, emblems) fill correctly, and
stroke-drawn designs (stripes, Nordic crosses) import as filled bands.
Known limitation. A few flags place their stars with SVG
<use>instancing (e.g.cn— China) or<marker>; those instanced glyphs render incorrectly for now (tracked). The flag’s plain fields still show, and all icons/emoji and most flags render cleanly.svgchecka set before you rely on it.
Emoji friendly aliases
Twemoji files are named by Unicode codepoint; these short names resolve to the same file — either works:
| Alias | Codepoint | Alias | Codepoint | Alias | Codepoint | ||
|---|---|---|---|---|---|---|---|
grinning | 1f600 | heart | 2764 | sun | 2600 | ||
smile | 1f604 | fire | 1f525 | moon | 1f319 | ||
joy | 1f602 | rocket | 1f680 | cloud | 2601 | ||
wink | 1f609 | star | 2b50 | zap | 26a1 | ||
thumbsup | 1f44d | trophy | 1f3c6 | rainbow | 1f308 | ||
thumbsdown | 1f44e | party | 1f389 | earth | 1f30d | ||
check | 2705 | brain | 1f9e0 | target | 1f3af | ||
cross | 274c | bulb | 1f4a1 | flag | 1f6a9 | ||
warning | 26a0 | eyes | 1f440 | hourglass | 231b | ||
thinking | 1f914 | clap | 1f44f | chart | 1f4c8 | ||
sob | 1f62d | wave | 1f44b | computer | 1f4bb | ||
muscle | 1f4aa | money | 1f4b0 | phone | 1f4f1 | ||
lock | 1f512 | key | 1f511 | mail | 1f4e7 | ||
bell | 1f514 | door | 1f6aa | car | 1f697 | ||
goat | 1f410 |
Any other emoji works by codepoint — e.g. asset:svg/emoji/1f680.svg (🚀). Add
your own aliases in scripts/fetch-svg-assets.sh.
Discovering the full catalogue
Browse every bundled asset: the SVG asset catalogue lists
all 6,400+ files by set — searchable with ⌘/Ctrl-F, no CLI needed. That page is
generated from the assets themselves by scripts/gen-svg-index.py, so it always
matches what ships.
If you have the CLI, svgcheck also screens a folder — and shows what each file
imports as (paths, points, themeable vs coloured):
$ manic svgcheck assets/svg/lucide
✓ rocket.svg — 4 paths, 199 pts, themeable
✓ map-pin.svg — 2 paths, 147 pts, themeable
…
$ manic svgcheck assets/svg/flags # every country flag
$ manic svgcheck assets/svg/emoji # every Twemoji
scripts/fetch-svg-assets.sh re-vendors or updates every set from its upstream
repo (Lucide · Heroicons · flag-icons · Twemoji). Bring your own:
svg(id, pos, "path/to/any.svg") imports any SVG file — vet it with svgcheck
first. See the import how-to for
positioning, resizing, recolouring, and animating.