All notable changes to this project are documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
A change to the generated SVG for an existing seed is treated as a breaking change — see "Stability and versioning" in the README.
cast-avatar/speak— make an avatar talk out loud.speak(target, text, opts?)readstextwith the browser's native speech engine (Web Speech API, no dependency) and flaps the mouth of an avatar rendered withanimate: 'talk'in time with it;stopSpeaking(target?)cancels. Returns aPromisethat resolves when speech ends. SSR-safe (a no-op with no speech engine) and respectsprefers-reduced-motion(speaks, but skips mouth motion).<cast-avatar>gains a.speak(text, opts?)method and now accepts ananimateattribute (so<cast-avatar animate="talk">is speakable).
animate: 'talk'— a subtle mouth flap for the face styles (portrait,studio,cartoon), as if the avatar is speaking. The CSS is scoped to the individual avatar (so it never animates others on the page) and respectsprefers-reduced-motion. Existing output is unchanged unlessanimate: 'talk'is set.
1.7.0 - 2026-06-17
studiostyle redesigned as a semi-realistic, sculpted portrait, replacing the previous softly-shaded version (which had grown too close toportrait). It shares the face trait set withportrait(so a seed renders as the same person) and pushes fidelity further: afaceShape-driven head silhouette, multi-layer color-agnostic skin modelling (vertical light, upper-left key light, rim-shadow vignette, cheekbone highlights, jaw/temple core shadows), a sculpted nose, volumetric upper/lower lips, almond lidded eyes with a gradient iris and catch-light, and hair with a gradient sheen. Deterministic, dependency-free, and SSR-safe like the other styles.- Trait coverage filled in so selections are honoured consistently:
portraitnow renderseyebrows,nose,freckles,blush,earrings, all head coverings (beanie/cap/bucket/turban/hijab) and afaceShape-driven head;minimalandlinegaineyebrows, eye-shape variants, head coverings andearringsin their own visual language (linestays monochrome). The abstract styles (pixel/initials/bot/shapes/mesh) continue to derive everything from the seed. - Demo playground now hides controls that the selected style doesn't render, so every visible control affects the avatar.
1.6.0 - 2026-06-15
animate: 'blink'— a subtle eye-blink for the face styles (portrait,studio,cartoon). The CSS is scoped to the individual avatar (so it never blinks others on the page) and respectsprefers-reduced-motion. Existing output is unchanged unlessanimate: 'blink'is set.- Status badge
iconoption — setstatus: { state, icon: true }to draw a colorblind-safe shape glyph on the dot (check / minus / clock / cross), so presence is distinguishable without relying on color alone. Defaults tofalse. createAvatarGroupnow accepts member objects ({ seed, ...perMemberOptions }) alongside plain seeds, so a customized member renders with its own look inside the group mark. Plain-seed groups are unchanged.
1.5.0 - 2026-06-15
decorativeoption — render the SVG witharia-hidden="true"(and no role/label/title) so assistive tech skips it, for avatars that sit beside their own visible name. Defaults tofalse(a labelledrole="img"image).- A native
<title>element is now emitted alongside the existingaria-label, giving a hover tooltip and broader screen-reader support. - Colorblind-safe palette preset (Okabe–Ito based). Opt in with
palette: 'accessible'(or'colorblind-safe'); it recolors the abstract styles, clothing, and inks while keeping skin and hair natural. Exported asCOLORBLIND_SAFE_PALETTE/PALETTE_PRESETS, andresolvePalettenow accepts a preset name.resolvePaletteis also re-exported from the package entry.
1.4.0 - 2026-06-12
createAvatarGroup(seeds, options)— compose several member seeds into one cohesive group mark (a clipped mosaic of 1–4 tiles, with extra members collapsing into a+Nchip). Great for team/squad/group-DM icons.mergeSeeds(...seeds)— combine seeds into a single deterministic, order-independent seed for a stable "pair"/relationship avatar.
1.3.0 - 2026-06-12
animateoption — a subtle looping animation (breathe,bounce) applied to the avatar content via deterministic, dependency-free CSS that respectsprefers-reduced-motion. Works on every style.- Documented edge / serverless rendering:
createAvatarand the other string helpers have no DOM/Node APIs, so they run on Cloudflare Workers, Vercel/Netlify Edge, Deno, and Bun. Added an "Edge & server rendering" guide and example.
1.2.0 - 2026-06-12
expressionoption — a shorthand (neutral,happy,sad,surprised,thinking,wink) that presets eyes/mouth/eyebrows while keeping identity seed-stable, so the same avatar can reflect a mood or agent state. Explicittraitsstill take precedence; applies to the face styles.
1.1.0 - 2026-06-12
studiostyle — a softly-shaded, more realistic portrait (gradient skin, detailed irises with a catch-light, shaped lips). Reuses the face trait set.
- Open-mouth (
mouth: 'open') on thecartoon,portrait, andstudiostyles drew a stray line across the mouth; it now renders as parted lips with the lip below the opening.
1.0.0 - 2026-06-11
First stable release. The public API and trait/option vocabulary are now considered stable and follow semantic versioning — a change to the generated SVG for an existing seed will be a major bump.
- Brand logo (
logo.svg). - Redesigned product landing page / demo.
0.6.0 - 2026-06-11
- Moved
clothingintotraits(traits.clothing) so it sits with the other identity features — it's the one free-color trait (a CSS color or'auto'). Top-levelclothingis still accepted as a legacy alias, and avatars encoded before this change still render their clothing color.
0.5.0 - 2026-06-11
- Renamed the
facestyle tocartoon(the oldfacevalue still works as an alias). - The default style (when none is requested) is now
portraitinstead of a seed-random style. - Demo: redesigned with a modern two-column layout; reordered the style gallery and dropdown; deployed via GitHub Actions.
0.4.0 - 2026-06-11
paletteoption — override the default color sets (skin tones, hair, backgrounds, shape colors, clothing, inks) to theme avatars; works across every style and is preserved through encode/decode.createAvatars(items, sharedOptions)andcreateAvatarSprite(items, options)— render a roster of avatars in one call (array of SVGs, or a single SVG sprite-sheet grid).fontWeightandfontFamilyoptions for theinitialsmonogram.
0.3.0 - 2026-06-10
minimalstyle — a flat geometric face (bold rounded shapes, muted fills, reduced features).linestyle — a monochrome thin-line (shadcn-flavored) face in a seeded dark ink.meshstyle — an abstract seeded gradient-blob avatar.- Background patterns:
dots,rings, andgrid(seeded), alongside the existing color/transparent/gradientoptions. statusoption — a presence badge on any style. Accepts a state string (online,busy,away,offline) for a corner dot, or an object{ state, shape: 'dot' | 'ring', position, pulse }for a ring border, custom corner placement, or a pulsing animation.
0.2.0 - 2026-06-10
portraitstyle — a refined, less-cartoony illustrative face (oval head, almond lidded eyes, subtle features) sharing thefacetrait set.- "Use from a CDN" documentation (jsDelivr
/+esmand version-pinned raw ESM). - npm version, CI, bundle-size, and license badges, plus a DiceBear credit, in the README.
web-component,typescript,pfp, andprofile-picturekeywords for npm discoverability.enginesfield declaring Node >= 18.
0.1.0 - 2026-06-09
- Initial release.
- Deterministic SVG avatar generator:
createAvatar,mountAvatar,createAvatarElement,createAvatarDataUri, andtoDataUri. - Five styles:
face,initials,shapes,pixel, andbot. - Rich
facetrait system — gender, skin tone, face shape, hair style and color, eyebrows, eyes, nose, mouth, facial hair, freckles, blush, headwear, earrings, and accessories — plus a clothing color. Each trait resolves from its own seed-derived stream. - Background options: solid color,
transparent, and a seededgradient. - Persistence helpers:
avatarHash, hash-verifiedencodeAvatar/decodeAvatar, andresolveAvatarOptions. <cast-avatar>custom element via thecast-avatar/elemententry point.- TypeScript declarations for the library and the custom element.
- Dependency-free with no build step.