Add sound to your icons.
Every one of the 200 icons has a sound of its own, scored note by note against its animation. There are no audio files: it is all synthesised in the browser. Copy the engine once, copy the sounds you want, and call one function.
Hear a few first
Press an icon to play it with its sound. Every icon page has its own preview, and the Sound switch on the icons page plays the whole set.
Three steps
- 1
Copy the engine
Two small files do all the work. Save sound-engine.ts and sound-kit.ts side by side, for example in components/icons/. They have no dependencies.
- 2
Copy the icon's sound
Every icon page has a Sound section with that icon's score. Save it as components/icons/sounds/<icon>.ts, next to sound-kit.ts. Take only the icons you use.
- 3
Call playIconScore
Call it from a click, tap or hover handler, passing the score. That is the whole integration.
Using Next.js? Put the files in a client component folder: the handlers that call playIconScore need "use client". Nothing else is required: no provider, no setup call, no audio assets.
1. The engine
Creates one shared audio context, draws notes and bursts of noise, remembers the visitor's on/off choice and exposes playIconScore.
The note helpers
The small vocabulary every score is written in: ding, plink, blip, swish, tick, thud and puff, plus note names.
2 and 3. Add a sound and play it
Copy the score from the icon's page (for example bell) into components/icons/sounds/bell.ts, then play it from a handler.
The liquid looks have a sound too
Mercury, Liquid and Glass each have two sounds in the same format as an icon's: a short layer for hovering an icon that wears the look, and a longer one for the moment it is picked. Mercury is a bead of metal rolling and ringing, Liquid is bloops and drips, Glass is a clink and a thin ring. Save the file beside sound-kit.ts. On the icons page, picking a liquid look plays its sound and turns Sound on.
Patterns you will want
Match the icon's speed
Give visitors a sound switch
Use it without React
Respect reduced motion
Good habits
Only after a gesture
Browsers block sound until the visitor has clicked, tapped or pressed a key. Play from handlers, never on page load.
Touch has no hover
Play on pointer enter for mouse users, and on click or tap for everyone. Both are shown above.
Always a switch
Sound is a bonus, never the only signal. Let visitors turn it off, and keep volume modest.
Quiet when hidden
The engine stays silent while the tab is hidden, and it respects the visitor's on/off choice.
Questions
- Are the sounds free?
- The sound engine, the note helpers and this guide are free. An icon's sound score comes with the icon: free for the 75 free icons, and part of Pro for the other 125. You can hear every icon's sound on its page and on the icons page first.
- Do the icons need sound to work?
- No. Sound is optional and separate: the animated icon is one file, and the sound is a second, optional file per icon. Without it, nothing is loaded or played.
- Why do I hear nothing the first time?
- Browsers only let a page make sound after the visitor has interacted with it (a click, a tap or a key press). Call playIconScore from an event handler, and the first interaction wakes the audio engine.
- Does it work on iPhones and Android?
- Yes, after a tap. Hover does not exist on touch screens, so also play the sound on click. On iPhones, sounds follow the ringer volume.
- How big is it?
- The engine is about 4 KB of TypeScript. Each icon's score is under 1 KB. There are no audio files, so nothing is downloaded.
- Can I change a sound?
- Yes. A score is a short list of notes placed on moments of the icon's animation, written with a handful of helpers (ding, plink, blip, swish, tick, thud, puff). Edit the numbers, or write your own.
- Is it accessible?
- Sound should never be the only signal. Keep every action visible, give visitors a switch (setIconSoundsEnabled), do not play anything on page load, and keep volumes modest.
Ready to pick sounds? Browse all 200 icons, switch Sound on and hover.