The official LottieFiles player for Lottie (.json) and
dotLottie (.lottie) animations on the web — a Rust + WASM core
powered by ThorVG, with Software,
WebGL2, and WebGPU rendering backends and full
dotLottie v2 support (theming, state machines,
and audio).
🌐 Live Viewer · 📊 Perf Playground · 📚 Docs · 🦀 dotLottie-rs
src at a classic Lottie .json or a .lottie archive. The .lottie format bundles multiple animations, themes, state machines, and embedded assets into a single compressed file.dotlottie-rs, the same engine that ships in iOS, Android, and native dotLottie players. One battle-tested implementation across every platform.DotLottie class everywhere..lottie file. No userland wiring required.DotLottieWorker renders on a Web Worker with OffscreenCanvas, keeping your UI buttery-smooth even with dozens of animations.fit + align), playback modes (forward/reverse/bounce), frame interpolation, 25+ typed events.Install the package for your framework, then drop in a few lines. The same player loads both Lottie .json and dotLottie .lottie files — just point src at either:
npm install @lottiefiles/dotlottie-web
<canvas id="canvas" style="width: 300px; height: 300px"></canvas>
import { DotLottie } from '@lottiefiles/dotlottie-web';
const dotLottie = new DotLottie({
canvas: document.getElementById('canvas'),
src: 'https://your-animation-url.lottie',
autoplay: true,
loop: true,
});
⚛️ React
bash
npm install @lottiefiles/dotlottie-react
```jsx import { DotLottieReact } from '@lottiefiles/dotlottie-react';
const App = () => ( ); ```
💚 Vue
bash
npm install @lottiefiles/dotlottie-vue
```vue
```
🧡 Svelte
bash
npm install @lottiefiles/dotlottie-svelte
```svelte
```
🔵 Solid
bash
npm install @lottiefiles/dotlottie-solid
```jsx import { DotLottieSolid } from '@lottiefiles/dotlottie-solid';
const App = () => ( ); ```
🌐 Web Component (drop-in, no build step)
```html <dotlottie-wc src="https://lottie.host/4db68bbd-31f6-4cd8-84eb-189de081159a/IGmMCqhzpt.lottie" autoplay loop
```
Or via npm:
bash
npm install @lottiefiles/dotlottie-wc
js
import '@lottiefiles/dotlottie-wc';
dotLottie v2 ships state machines built into the file format — no JS glue required. Define states, transitions, and inputs in a single .lottie and drive them at runtime through pointer events, custom events, or input values.
const dotLottie = new DotLottie({
canvas: document.getElementById('canvas'),
src: 'interactive-button.lottie',
stateMachineId: 'main',
autoplay: true,
});
The player exposes typed events for stateMachineStart, stateMachineTransition, stateMachineStateEntered, custom events, and input changes — perfect for wiring animations into your UI logic.
Switch palettes, animate gradients, swap text, or replace images at runtime — without re-exporting from After Effects. Themes can be embedded in the .lottie manifest or supplied programmatically.
// Use a theme defined in the .lottie manifest
dotLottie.setTheme('dark');
// Or supply a theme object at runtime
dotLottie.setThemeData({
rules: [
{ id: 'primary', type: 'Color', value: [0.9, 0.2, 0.4, 1.0] },
],
});
The full Theme type covers color, scalar, position, vector, gradient, image, and text rules — all keyframe-aware.
dotLottie files can carry embedded audio tracks alongside the animation timeline — handy for UI sound effects, onboarding flows, or interactive characters. Audio is decoded and played in lockstep with the animation timeline.
Audio is an experimental feature in
dotlottie-rs. Browser autoplay policies still apply — initiate playback from a user gesture.
For pages with many animations, swap DotLottie for DotLottieWorker. Identical API, but rendering happens on a Web Worker with an OffscreenCanvas, freeing the main thread for layout, scrolling, and your app code.
import { DotLottieWorker } from '@lottiefiles/dotlottie-web';
const player = new DotLottieWorker({
canvas: document.getElementById('canvas'),
src: 'animation.lottie',
autoplay: true,
loop: true,
workerId: 'shared-pool', // optional: share one worker across many instances
});
All DotLottieWorker methods are async (Promise-returning) since they cross a worker boundary.
The default Software backend works everywhere. For demanding workloads — many concurrent animations, large canvases, complex masks — opt in to GPU rendering via subpath imports:
// WebGL2 — broadly supported
import { DotLottie } from '@lottiefiles/dotlottie-web/webgl';
// WebGPU — experimental, modern Chromium / Safari TP
import { DotLottie } from '@lottiefiles/dotlottie-web/webgpu';
The class name (DotLottie) and API surface are identical across all three backends, so swapping renderers is a one-line change. Each backend ships its own optimized WASM build via package.json conditional exports.
Want to see the difference on your own hardware? The hosted perf-test page compares Software vs WebGL vs WebGPU vs Skottie/CanvasKit head-to-head.
.lottie files — animationId config + loadAnimation(id) to switch between bundled animationssetMarker(name) and markers() to play AE-defined segmentssetSegment(start, end) for arbitrary frame rangesfit (contain / cover / fill / fit-width / fit-height / none) + normalized align: [x, y]forward / reverse / bounce / reverse-bounce with configurable loop countsplay, pause, frame, complete, loop, load, loadError, freeze, plus the full state-machine event suiteAll packages render both Lottie (.json) and dotLottie (.lottie) animations.
| Package | Description |
|---|---|
| @lottiefiles/dotlottie-web | Core Lottie & dotLottie player — Rust/WASM via dotlottie-rs, Canvas2D / WebGL / WebGPU, Node-isomorphic |
| @lottiefiles/dotlottie-react | React component for Lottie & dotLottie |
| @lottiefiles/dotlottie-vue | Vue 3 component for Lottie & dotLottie |
| @lottiefiles/dotlottie-svelte | Svelte component for Lottie & dotLottie |
| @lottiefiles/dotlottie-solid | Solid component for Lottie & dotLottie |
| @lottiefiles/dotlottie-wc | Framework-agnostic Web Component for Lottie & dotLottie |
Each package README contains its full API reference, prop tables, and event documentation.
A hosted companion app at lottiefiles.github.io/dotlottie-web for inspecting, debugging, and benchmarking animations:
| Page | What it does |
|---|---|
| Home | Drop a .lottie or .json file to preview rendering and inspect manifest details |
| Playground | Interactive editor for player config, themes, markers, and animation switching |
| Performance | Stress test across 40+ animations — compare Software / WebGL / WebGPU / Skottie head-to-head on your own hardware, with seedable runs for reproducibility |
| List | Gallery of curated animations |
| Embed | Embedding patterns and demos |
Source: apps/viewer/.
@lottiefiles/dotlottie-web — Getting Started · Playback Controls · Dynamic Loading · Worker · Multi Animations · Advanced Layout · Named Markers · Theming · Interactivity
@lottiefiles/dotlottie-react — Getting Started · Custom Controls
*
$ claude mcp add dotlottie-web \
-- python -m otcore.mcp_server <graph>