Comparisons

Compared with Nuxt modules

How nanime compares with AnimeJS on its own in Nuxt, and with nuxt-anime.

This page compares nanime with AnimeJS on its own and with @hypernym/nuxt-anime, as of September 2026. If something is out of date, open an issue. For Vue packages, see Compared with Vue packages.

How do the Nuxt modules compare?

nanime@hypernym/nuxt-anime
AnimeJS versionv4v3
Latest releaseSep 2026Sep 2023
Auto-importsYesOpt-in
Safe during SSR, cleans up on unmountYesManual
Rebuilds when a ref changesYesNo
Keeps the playhead on rebuildYesNo
Animate, timeline, SVG helpersYesYes
WAAPI, draggable, text, scroll, layout and moreYesNo
Transition componentsYesNo
Green marks the rows where the two modules differ. "Manual" means the module leaves that step to your own code.

@hypernym/nuxt-anime provides the AnimeJS v3 anime function as $anime. With composables: true, it also auto-imports it as useAnime. AnimeJS v4 split anime() into functions like animate() and createTimeline(), so v3 code needs changes to run on v4.

nuxt-animejs is a Nuxt 2 module built on a v-anime directive. Its README says it is no longer maintained.

Which should you pick?

  • nanime for a Nuxt app on AnimeJS v4, especially one that animates lists or values that change.
  • AnimeJS on its own for one or two animations that never change.
  • @hypernym/nuxt-anime for an app that stays on AnimeJS v3.
  • A package from Compared with Vue packages for a Vue app without Nuxt.

How does a staggered entrance compare?

The three versions below do the same thing. Four cards fade up one after another on mount, and a Replay button plays the entrance again:

<script setup lang="ts">
import { stagger } from '#nanime/utils'

const cards = useTemplateRef('cards')

const entrance = useAnimate(cards, {
  translateY: [16, 0],
  opacity: [0, 1],
  delay: stagger(80),
})
</script>

<template>
  <button @click="entrance.restart()">Replay</button>
  <div v-for="n in 4" :key="n" ref="cards" class="card" />
</template>

useAnimate waits for the cards to mount and reverts the animation on unmount. entrance is the AnimeJS animation, so methods like restart() work as the AnimeJS docs describe.

How do lists animate in and out?

<AnimeTransitionGroup> animates items that enter and leave a v-for list. AnimeJS layout slides the other items to their new places. The three versions below scale items in and out:

  • 1
  • 2
  • 3
  • 4
  • 5
View on GitHub
<script setup lang="ts">
const items = ref([1, 2, 3, 4, 5])
</script>

<template>
  <AnimeTransitionGroup
    tag="ul"
    enter-animation="scale"
    leave-animation="scale"
    class="relative"
  >
    <li v-for="item in items" :key="item">{{ item }}</li>
  </AnimeTransitionGroup>
</template>

The AnimeJS and @hypernym/nuxt-anime versions use Vue's <TransitionGroup> with :css="false". Vue animates moves only through a CSS move class, so the other items jump to their new places.

Copyright © 2026