Skip to content
v1.5.0 source · Angular 21 and 22

Motion for Angular that follows your state.

Start with one attribute. Coordinate enter, exit and state changes when your interface needs more. Native browser animations and Angular signals, with zero runtime dependencies.

npmpnpmyarn
npm install angular-movement
runtime deps
0
native engine
WAAPI
zoneless ready
SSR

GitHubnpmMIT licensed

Stable APIs, one attribute away

STATE → MOTION

Change the data. The interface follows.

Add, complete, expand and remove tasks. Every transition comes from a signal changing, not from imperative animation code.

  • Rows enter, leave and reorder without index bookkeeping.
  • Completing a task animates to a new state; nothing is recreated.
  • Details stay mounted until their leave animation has finished.
Open in the motion lab

Today

An interactive task list: add, complete, expand and remove tasks.

Built only from stable APIs: *movePresenceFor, *movePresence, [moveAnimation], moveWhileHover. Honours prefers-reduced-motion.

SEE IT MOVE / SCROLL THE STORY

Four things CSS alone makes awkward.

Each one is a stable API, running live.

Hover & pressStatePresenceStagger

Pressed 0×

Stable

Feedback while something is true: the pointer is over it, it is pressed. Touch gets press feedback, not a sticky hover.

interaction.htmlhtml
<button moveWhileHover="lift" moveWhileTap="press">Save</button>

Built for state. Here's why.

Angular already animates simple enter and leave. Movement exists for the part that is hard to coordinate by hand: motion that is driven by application state.

  • Signals in, motion out

    Bind an object or a signal and the element animates to the new state. moveValue, moveTransform and moveSpringValue derive motion from signals without a change-detection detour.

    Reactive animation →
  • Native browser animation

    Playback runs on the Web Animations API, so transforms and opacity stay on the compositor. Final styles are committed, not left in a fill. No animation runtime to ship.

    How it works →
  • Presence that owns lifetime

    movePresence and movePresenceFor keep an element mounted until every leave animation has finished, including keyed lists that are reordered or revived mid-exit.

    Presence guide →
  • Server-rendered first

    Every directive is a no-op on the server and waits for the browser. Standalone, zoneless and hydration-friendly by default, from Angular 21 onwards.

    Get started →
  • Reduced motion, honoured

    When the reader asks for less motion, state still changes and final styles still land — without the animation work. You do not have to wire it up.

    Accessibility →
  • Springs and presets

    A preset library for the common cases, physical springs for the rest, and plain keyframe objects whenever you need exact control.

    Browse presets →

Not sure whether you need it? Read when CSS or Angular's native animations are enough.

Change a setting, see the motion, copy the code

This is the real moveEnter directive, not a recording. The snippet is generated from the same values you are editing.

Easing
Duration: 500ms

fade-up

entered 1×

card.htmlhtml
<div
  moveEnter="fade-up"
  moveDuration="500ms"
  moveEasing="ease-out"
>
  Billing summary
</div>

What you can build

A short list of interface problems the library is good at. Hover a tile to see it, then open its live demo or the documentation.

Interactive cards

Stable

Lift on hover, press on tap, ring on focus — one attribute each, composable.

<div [moveWhileHover]="{ y: [0, -4] }">Uses moveWhileHover, moveWhileTap, moveWhileFocus

Modals and drawers

Stable

Keep the panel mounted until its exit animation finishes, then remove it.

<aside *movePresence="open" moveLeave="fade-down">Uses movePresence

Animated lists

Stable

Add, remove and reorder keyed rows without losing identity mid-exit.

<li *movePresenceFor="let r of rows(); trackBy: byId">Uses movePresenceFor

Reactive state

Stable

Animate between named or object states whenever a signal changes.

<div [moveVariants]="v" [moveVariant]="state()">Uses moveVariants, moveAnimation

Scroll reveal and progress

Stable

Reveal on entry or scrub a progress animation with scroll position.

<section moveInView="fade-up">Uses moveInView, moveScroll

SVG drawing

Stable

Draw paths and animate icons with presets that normalise SVG transform origins.

<path moveEnter="icon-draw" d="…" />Uses movePathDraw, moveIconPulse

Use the simplest tool that works

Movement is not a replacement for CSS or for Angular's own animate.enter / animate.leave. It adds value when motion has to react to state and be coordinated.

CSS
Hover colours, simple transitions, loaders
  • Zero JavaScript, runs before hydration
  • Best for state that already lives in a class or pseudo-class
  • No coordination with element lifetime
animate.enter / animate.leave
Enter and leave of elements, Angular 20.2+
  • Built into Angular, nothing to install
  • Applies CSS classes while a node enters or leaves
  • Ideal when each element has its own self-contained enter/leave
Raw WAAPI
One-off, fully custom effects
  • element.animate() directly, maximal control
  • You own cancellation, reduced motion and cleanup
  • Fine for a single isolated effect

Full comparison and decision guide →

TEMPLATES / READY TO SHIP

Start from a template

Complete pages with motion already wired in. Open one, read the source, and keep what fits your product.

Browse templates
Angular MovementVolt UILumen icons

Product landing

Hero, feature grid, steps and a call to action, composed with Angular Movement, Volt UI components and Lumen icons. Copy the sections you need.

  • Staggered entrances that respect reduced motion
  • Hover and press feedback on every card
  • Scroll-revealed sections, server-rendered first

Learn it the way you prefer

The same examples are reachable three ways, and each links to the others.

  • Read the guidesTask-first documentation: install, animate on enter, react to state, keep things mounted while they leave. Searchable, with live playgrounds inline. Get started
  • Experiment in the demosA full playground per directive: tune presets, timing and easing, replay the motion and copy valid Angular code. Explore demos
  • Check the contractEvery public directive, input, output and type, generated from the library source with its stability — stable, experimental or deprecated. Open the API reference

Questions worth asking first

Short answers, with the page that has the long one.

Ready to move?

Install the package, import one directive, and animate your Angular 21 or 22 application.

npmpnpmyarn
npm install angular-movement