Meet Mimimo
Mimimo adds animated companions to websites. It is a framework-independent TypeScript library by Flowscape, built for small moments of personality: a friendly guide, a celebration or a quiet companion.
Your artwork, your personality
Use an image, GIF, video, frame sequence or sprite sheet. Name your states yourself, then connect them to clicks, hovers, dragging or your own application events.
Mochi and Byte are independent pet packs. You only include the characters you need.
One entry point
Drag the pet, or focus it and use arrow keys. Reduced motion follows your system settings.
import { createPet } from '@flowscape-ui/mimimo';
import { mochi } from '@flowscape-ui/mimimo-pet-mochi';
// Call after your container mounts.
export function mountCompanion(container: HTMLElement) {
const lifetime = new AbortController();
const pet = createPet({
character: mochi,
container,
anchor: 'center',
});
pet.addReaction('click', 'happy');
pet.say('Hello, friend!');
return () => {
lifetime.abort();
pet.destroy();
};
}
// Keep the returned cleanup and call it when the view is removed.'use client';
import { useEffect, useRef } from 'react';
import { createPet } from '@flowscape-ui/mimimo';
import { mochi } from '@flowscape-ui/mimimo-pet-mochi';
export default function Companion() {
const host = useRef<HTMLDivElement>(null);
useEffect(() => {
const container = host.current;
if (!container) return;
const lifetime = new AbortController();
const pet = createPet({
character: mochi,
container,
anchor: 'center',
});
pet.addReaction('click', 'happy');
pet.say('Hello, friend!');
return () => {
lifetime.abort();
pet.destroy();
};
}, []);
return <div ref={host} style={{ height: 360, position: 'relative' }} />;
}<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { createPet } from '@flowscape-ui/mimimo';
import { mochi } from '@flowscape-ui/mimimo-pet-mochi';
const host = ref<HTMLElement | null>(null);
let cleanup: (() => void) | undefined;
onMounted(() => {
const container = host.value;
if (!container) return;
const lifetime = new AbortController();
const pet = createPet({
character: mochi,
container,
anchor: 'center',
});
pet.addReaction('click', 'happy');
pet.say('Hello, friend!');
cleanup = () => {
lifetime.abort();
pet.destroy();
};
});
onBeforeUnmount(() => cleanup?.());
</script>
<template>
<div ref="host" style="height: 360px; position: relative" />
</template>npm install @flowscape-ui/mimimo @flowscape-ui/mimimo-pet-mochiFits your application
Choose a global or local environment. Customize messages with CSS variables and shadow parts. Mount your own toolbar or chat input. An AI backend is optional and stays under your control.
Explore the API overview or try a companion on the homepage.