Comparisons

Compared with Vue packages

How nanime compares with vue-animejs and v-anime, the Vue packages for AnimeJS v4.

This page compares nanime with vue-animejs and v-anime, as of September 2026. If something is out of date, open an issue. For Nuxt modules, see Compared with Nuxt modules.

How do the Vue packages compare?

nanime@juleshry/vue-animejsv-anime
Nuxt module with auto-importsYesNoNo
Latest releaseSep 2026Sep 2026May 2025
Safe during SSR, cleans up on unmountYesYesYes
Rebuilds when a ref changesYesYesNo
Keeps the playhead on rebuildYesNoNo
Animate, timeline, draggableYesYesManual
WAAPI, split text, scroll, layout and moreYesYesNo
Scramble textYesNoNo
Timer and scope composablesNoYesScope only
Transition componentsYesNoNo
DirectivesNoYesNo
Green marks the rows where nanime and vue-animejs differ, on the package that has the feature. "Manual" means the package leaves that step to your own code.

Which should you pick?

  • nanime for a Nuxt app, transition components, or rebuilds that keep the playhead.
  • vue-animejs for directives, useTimer or useScope, or a Vue app without Nuxt.
  • v-anime for a thin wrapper around an AnimeJS scope.

How do lists animate in and out?

<AnimeTransitionGroup> scales items in and out of a v-for list. AnimeJS layout slides the other items to their new places:

  • 1
  • 2
  • 3
  • 4
  • 5
View on GitHub
<template>
  <AnimeTransitionGroup
    tag="ul"
    enter-animation="scale"
    leave-animation="scale"
    class="relative"
  >
    <li v-for="item in items" :key="item">{{ item }}</li>
  </AnimeTransitionGroup>
</template>

Neither vue-animejs nor v-anime has transition components, so the vue-animejs version animates in the @enter and @leave hooks of Vue's <TransitionGroup>. Vue animates moves only through a CSS move class, so the other items jump to their new places.

How does nanime differ from vue-animejs?

vue-animejs covers almost the same AnimeJS v4 APIs. It also has five directives, such as v-animate, and the useTimer and useScope composables. It is a Vue package, so in Nuxt each component imports what it uses, or the app registers it in imports.presets.

Its composables take reactive options as a ref or computed. They return wrapper functions such as play and pause, and keep the AnimeJS instance in an animation ref. nanime composables also accept a getter and return the AnimeJS instance, so animation.play() calls AnimeJS directly. With keepTime, a rebuilt animation continues from where the old one was.

How does nanime differ from v-anime?

v-anime wraps the AnimeJS v4 createScope function. Its useAnime runs your code once in onMounted, so changing a ref afterwards does not rebuild the animation. The scope reverts on unmount. Install animejs alongside it, since the package does not list it as a dependency.

Copyright © 2026