A bicycle nobody had to draw
The example configuration this engine ships carries a bicycle: a tag called kolo, and under it an <svg> written out by hand. It is there because there was nothing else to put there. tag_icons took the name of an icon the engine ships or a drawing of your own, and the ones it shipped were the eight content types — text, image, video, link, audio, quote, document, chat. A tag about cycling could wear the glyph for "audio", or somebody could spend an evening with a coordinate grid.
1.7 puts fifty-five drawings in between, and gives each of them a name.
Fifty-five nouns
Counted in lib/icons.rb: the eight content types, fifty-five more, sixty-three names a tag may ask for. Grouped by what a blog turns out to be about.

- getting about —
bikecartrainplaneboatwalk - places and weather —
mappinmountaintreesuncloudrainsnow - a day —
coffeebeerfoodwineclockcalendarhomeheartstargift - making things —
penbrushcamerafilmmicmusicbooktoolshammer - machines —
laptopphonecodeterminalserverbuglockkey - living things —
pawbirdleafflower - ideas —
bulbflagglobeeyecharttargetrocketmailbriefcasebox
Plain English, and the word somebody reaches for first: bike, not bicycle. A footer link under social: can wear one too, where the network marks have nothing to offer: globe for somebody's other site.
Why they sit beside the eight
The same 24-unit grid, the same two-unit stroke, the same currentColor — the part that lets one drawing follow a light theme and a dark one without a second copy. All fifty-five carry round ends and round joins, because they are pictures of things rather than diagrams and a mitred corner on a two-unit stroke reads as a spike at twenty pixels. doctor holds a hand-written icon_svg to that same grid.
Where it turns up
Two places. The heading of the tag's own /tag/<name>/ listing, and the date badge of every post carrying that tag — where it replaces the content type's icon rather than joining it. A badge is a small tile with a date and one glyph; the only thing that ever adds a second is a pinned post, and a listing stacks ten badges under each other.
A tag is matched by its address rather than its spelling. Sci Fi in site.yml reaches posts tagged sci-fi and posts tagged sci_fi, because those are one page and therefore one tag.
The order in the list is the priority
tag_icons is a list, and the order in it decides. Most posts carry more than one tag, and the tag a post was given first is usually whatever an importer put there rather than a subject — so the first entry in the list that a post has is the one it wears, settled once instead of post by post. A post tagged sci-fi, coffee wears coffee if coffee stands higher, whatever order the post wrote them in.
Written as a mapping — kolo: bike indented underneath, the shape half of site.yml is in — it draws nothing, and it always did: until now with no warning from the build, and doctor calling the file sound. Both name the key now, and doctor counts it a problem and exits 1.
What it refuses to do
It is not a folder to drop drawings into. Everything under assets/ is copied onto the site wholesale, so a folder of fifty would publish fifty files to serve a site that uses two — and an icon is written into the page rather than fetched, so nothing would ever ask for them. The set is a Ruby hash for that reason.
The eight content names cannot grow without a content type behind them. And an icon_svg that is not a drawing at all — a filename, an address, an emoji — is refused rather than printed where the glyph goes; the tag falls back to what it would have had with no entry.
What it costs
A name the engine does not have draws nothing, and the build does not mention it: configure bicycle instead of bike and the site builds, exits zero, and every post that should have carried a bicycle keeps its content type's icon. doctor is what says so: it names the tag, the name it asked for, and prints all sixty-three, eight to a row — then exits zero itself, because a tag without a picture is not a broken site.
And the drawing goes into the page. The middling one is a shade over 250 bytes of markup, written out again for every badge that wears it: no request for it, and no way to have it once. The whole set comes to about fifteen kilobytes, and none of it reaches the site — only the drawings actually used.
Most of the drawings in that file are this project's own. Several are the shape any icon set converges on for an obvious thing — the pen, the spanner, the speech bubble on a chat post — and those are the same paths as Feather Icons, MIT licensed, copyright Cole Bemis. NOTICE says so and carries the licence, which is what a repository owes the people it borrowed from.

Comments