Italian: animato — animated, lively, with life and movement.
Animato
Animato is a stable, renderer-agnostic animation toolkit for Rust. It computes animated values and leaves rendering to your app, engine, terminal UI, browser, or embedded target.
The v1.0.0 API is stable. The current public crates cover easing, tweens, timelines, springs, motion paths, input physics, perceptual color interpolation, drivers, GPU batch evaluation, Bevy integration, and WASM/browser helpers.
Install
Most applications use the facade crate:
[]
= "1.0"
Enable only the integrations you need:
[]
= { = "1.0", = ["path", "physics", "color"] }
For no_std, depend on the focused crates directly:
[]
= { = "1.0", = false }
= { = "1.0", = false }
= { = "1.0", = false }
= { = "1.0", = false }
= { = "1.0", = false }
= { = "1.0", = false }
Quick Start
use ;
let mut tween = new
.duration
.easing
.build;
tween.update;
assert!;
tween.update;
assert_eq!;
assert!;
Core Concepts
Animato is built around four small traits:
| Trait | Purpose |
|---|---|
Interpolate |
Defines how a value lerps between two values. |
Animatable |
Blanket marker for values that can be animated. |
Update |
Advances animation state by a dt in seconds. |
Playable |
Object-safe animation interface used by timelines. |
The hot path is intentionally simple:
animation.update;
let value = animation.value;
Animato never renders. Your application reads the computed value and applies it to a UI widget, game transform, DOM style, terminal cell, shader input, or any other target.
Crates
| Crate | Purpose | no_std |
|---|---|---|
animato-core |
Traits, interpolation, easing functions | yes |
animato-tween |
Tween<T>, keyframes, looping, modifiers |
yes |
animato-timeline |
Timelines, sequences, staggered starts | std |
animato-spring |
1D and component springs | yes |
animato-path |
Bezier, SVG paths, motion paths, morphing | yes/core |
animato-physics |
Inertia, drag tracking, gestures | yes/core |
animato-color |
Lab, Oklch, and linear color interpolation | yes |
animato-driver |
Animation driver, clocks, scroll driver | std |
animato-gpu |
Batched Tween<f32> evaluation with CPU fallback |
std |
animato-bevy |
Bevy ECS components, systems, completion messages | std |
animato-wasm |
rAF driver and optional DOM helpers | wasm/std |
animato |
Facade crate re-exporting stable APIs | feature gated |
Feature Flags
| Feature | What it adds |
|---|---|
default |
std, tween, timeline, spring, driver |
std |
Hosted functionality, wall clock, heap-backed helpers |
tween |
Tween<T>, KeyframeTrack<T>, Loop, TweenState |
timeline |
Timeline, Sequence, stagger, timeline callbacks |
spring |
Spring, SpringN<T>, SpringConfig presets |
path |
Bezier curves, SVG parser, motion paths, morphing, draw helpers |
physics |
Inertia, DragState, GestureRecognizer |
color |
InLab<C>, InOklch<C>, InLinear<C>, palette re-export |
driver |
AnimationDriver, clocks, ScrollDriver, ScrollClock |
gpu |
GpuAnimationBatch through wgpu with CPU fallback |
bevy |
AnimatoPlugin, tween/spring components, transform helpers |
wasm |
RafDriver, ScrollSmoother |
wasm-dom |
FLIP, split text, drag, observer, shared-element helpers |
serde |
Serialization for supported public types |
tokio |
Timeline::wait() async completion helper |
Examples
WASM example:
Documentation
The v1.0 documentation lives in docs/:
| Start here | Details |
|---|---|
| Getting Started | First animation and update loop. |
| API Full | Complete stable API map by crate. |
| Feature Flags | Exact feature requirements. |
| Concepts | Interpolate, Update, clocks, composition. |
| Recipes | Practical patterns for UI, games, paths, and input. |
| Testing | Local and CI verification commands. |
| Release | v1.0 publishing checklist. |
The generated Rust API docs are available on docs.rs/animato.
Testing
The v1.0 release gate is:
Coverage and fuzzing are part of the stable release workflow when the tools are installed:
Stability
Animato follows Semantic Versioning. Starting at 1.0.0, public APIs are
treated as stable. Breaking changes require a future major release and migration
notes. The focused sub-crates can still be used independently when a project
needs tighter dependency control than the facade provides.
Project Docs
Support
- Star the repo on GitHub
- Open issues for reproducible bugs and clear feature requests
- Support development through Buy Me a Coffee
License
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project is dual-licensed as above, without additional terms or conditions.