Unicon the unicorn: a cheerful pink pony with huge sparkling eyes, blushing cheeks and a pastel mane, whose horn has been sliced off flat halfway up, leaving a neat round cut she is delighted with.

Unicon

One concept, three icon names.

She is a unicorn with the r taken out, which is why her horn stops halfway up in a clean flat slice. She thinks it suits her.

An app names the idea, each client draws it

A house is house in Bootstrap Icons, house in SF Symbols and home in Material Symbols. Say the concept once and hand each client the key it needs.

Unicon.fetch :house
=> { bootstrap: 'house', ios: 'house', android: 'home' }

Unicon[:contact]
=> { bootstrap: 'person-rolodex', ios: 'person.crop.circle', android: 'contacts' }

Unicon[] and Unicon.fetch are the same method. Every concept carries exactly three keys, and a concept is only listed when all three design systems have a sensible icon for it.

  • 132distinct icons
  • 140model names that borrow one
  • 43actions a toolbar draws
  • 315names a lookup answers to

Anything unknown draws a circle

Unicon.fetch :nonsense
=> { bootstrap: 'circle', ios: 'circle', android: 'circle' }

No nil, no blank cell, no check before rendering. A table that draws an icon for every row gets an icon for every row, and a string works as well as a symbol, so Unicon[model.name.underscore] is a whole integration.

Three lists, and which one you want

Unicon.icons
=> [:account, :airplane, :alarm, :archive, :award, :badge, ...]

Unicon.names
=> [:account, :add, :add_member, :address, :agent, ...]

Unicon.actions
=> [:add, :add_member, :close, :confirm, ...]
Unicon.icons
One name per distinct picture — 132 of them. No two entries draw the same thing, which is what makes this the list to show somebody choosing an icon.
Unicon.names
The union of all three groups — the icons, the actions and the model synonyms — and so every name that resolves. Ask for it to find out whether a name draws something; ask for icons when somebody is choosing one.
Unicon.actions
The doing words: close, edit, every move. A toolbar needs them and Unicon[:close] answers, but nobody has a Close model, so they are never offered as a choice.

All of them

Every icon the gem holds, all three systems drawn side by side — the same set the README tables. Hover an icon for the name that system calls it by; the small print under a card is the model names that borrow it, and typing one of those finds the card. A dashed circle is a symbol the Mac that drew this page could not put an outline to: newer than the SF Symbols 5 set it knows, or one it draws but the tracer would name no glyph for. It resolves in an app all the same.

Showing every concept.

  • :account author · avatar · profile
  • :airplane
  • :alarm deadline
  • :archive
  • :award specialty
  • :badge agent · employee · role
  • :bag
  • :bank
  • :bar_chart vertical
  • :barcode
  • :battery
  • :bell notification · reminder
  • :bicycle
  • :bolt boost
  • :book
  • :bookmark
  • :bookmarked
  • :box inventory · item · package · product
  • :brand
  • :briefcase provider
  • :brush
  • :building business · city · company · office · organization
  • :bus
  • :calendar event · plan · schedule
  • :calendar_check appointment · booking
  • :camera
  • :car ride · vehicle
  • :cart order · purchase
  • :cash cost
  • :chat comment · conversation · message
  • :check_circle
  • :checklist pick
  • :circle
  • :clipboard assessment · survey
  • :clock history · session · shift
  • :close_circle
  • :cloud backup
  • :compass
  • :contact
  • :credit_card charge · payment · transaction
  • :display screen
  • :document file · form · page · post · summary
  • :droplet
  • :envelope email
  • :eye view
  • :filter
  • :fingerprint
  • :fire
  • :flag milestone
  • :folder project
  • :franchise
  • :gear configuration · setting
  • :gift coupon · offer
  • :globe country · site
  • :grid
  • :hammer job
  • :headphones
  • :heart
  • :hospital
  • :hourglass
  • :house home
  • :image banner · photo · picture
  • :inbox
  • :infinity
  • :info
  • :invoice bill
  • :key credential · permission · token
  • :keyboard
  • :laptop
  • :lightbulb
  • :link
  • :list log
  • :lock password
  • :map area · county · region · state · territory · trip
  • :megaphone announcement · campaign
  • :microphone recording
  • :mobile
  • :moon
  • :music track
  • :note memo
  • :palette
  • :paperclip attachment
  • :people group · staff · team
  • :percent discount
  • :person client · customer · lead · member · user
  • :phone call
  • :pie_chart sector
  • :pin address · destination · location · zip
  • :playlist episode
  • :puzzle integration · platform · plugin
  • :qr_code
  • :question answer
  • :rain
  • :receipt
  • :reply
  • :ruler
  • :search
  • :server
  • :shield
  • :shop market · vendor
  • :signature contract
  • :signpost route · source
  • :sliders optimization · preference
  • :smiley feedback
  • :snow
  • :speedometer dashboard · evaluation
  • :square
  • :star rating · review
  • :stopwatch
  • :sun
  • :table
  • :tag category · label · price
  • :task todo
  • :terminal api · prompt
  • :thumbs_down
  • :thumbs_up
  • :ticket
  • :toolbox
  • :train
  • :tree
  • :trending_up
  • :trophy goal
  • :truck delivery · fleet · shipment · supplier
  • :video movie
  • :volume
  • :wallet
  • :wand inquiry · prediction · reading
  • :warning alert · issue
  • :waveform audio · echo
  • :wifi
  • :window app
  • :wrench

Install

gem 'unicon'

Ruby 3.2 or newer, and no dependencies at all — the gem is a frozen hash and two readers.