Give your app a little friend.

An animated SVG character for Svelte 5. It blinks, follows your cursor, reacts to boops and lip-syncs to your voice.

Open the studio
<Mascot mood=theme=shape=outfit= />
Click a value to change it

Small component. Big personality.

One Svelte component, drawn in pure SVG. Everything on this page is a prop away.

Moods that morph

17 moods. Eyes, lids, mouth and posture tween into each other, so a switch is a smooth morph instead of a cut.

mood="idle"

Alive by default

It blinks, breathes and floats, tracks the cursor with little saccades and squishes when you boop it.

Move your mouse

Colorways for every brand

13 presets, per-color overrides, or plain --mascbob-* CSS variables.

Voice ready

Pipe audio amplitude into level and the mouth lip-syncs in real time.

Head or full body

10 head shapes, 20 accessories, 8 outfits and shoes.

Tiny and accessible

Pure SVG, zero dependencies. Real button semantics and reduced-motion support.

Build your own in seconds.

Tweak looks and reactions, then take it home as Svelte code, SVG, PNG or a share link.

0 boops · tap it
Colorway og
Colors from og
Background studio only
Shape
Eyes
Size 240px

Talk to it.
It talks back.

Feed any audio amplitude into level and the mouth follows syllable by syllable. This demo reads your microphone through a Web Audio AnalyserNode, smooths the RMS and hands it over 60 times a second.

Nothing leaves your device; audio is analyzed locally.

17 moods, one smooth face.

Switch mood and every feature morphs into the new expression. Effects, hands and floating speed follow along.

idle
happy
listening
thinking
talking
surprised
sleepy
sad
love
wink
grumpy
shy
waving
laughing
focused
curious
nervous

Mix and match a whole cast.

Shapes, eyes, accessories, outfits and colorways combine freely. Hover one, it looks back.

Pip mocha · orb
Fern ice · bean
Nova noir · squircle
Mochi lilac · ghost
Sol volt · pebble

Dressed up or dressed down.

The full body starts plain. Add an outfit and shoes when you want the extra swagger.

none · none
puffer · sneakers
hoodie · hightops
scarf · boots
bowtie · none
none · sneakers

Three lines to a new friend.

Install the package, drop in the component and let it react to your app. Types included, nothing to configure.

App.svelte
<script>  import { Mascot } from 'mascbob';  let mood = $state('idle');</script><Mascot {mood} body theme="og" onboop={() => (mood = 'love')} /><!-- or restyle with plain CSS -->.brand { --mascbob-eye: #00ffc6; --mascbob-accent: #ff4fd8; }

Made with Svelte 5 and a lot of boops. MIT licensed.