Table of Contents

  • Introduction: The problem with sliders in Nuxt
  • Why conventional slider libraries fail
  • Embla Carousel: The modern alternative
  • Installation and setup
  • Use cases
  • Basic implementation
  • Advanced Features and Configuration
  • Performance optimizations
  • Accessibility and SEO optimization
  • Best practices for slider implementations
  • Conclusion: Why Embla Carousel is the best slider solution
  • FAQ – Frequently asked questions about Embla Carousel in Nuxt

Lukas Rüsche

NuxtVue.js

19.08.2025

Top Carousel Performance with NuxtThe Solution for SSR Sliders with Nuxt

We spent a long time searching for a sensible solution for implementing sliders with Nuxt. Many developers struggle with performance issues, hydration mismatches, and poor SEO performance with conventional slider libraries. In this comprehensive guide, we show you how we use Embla Carousel in Nuxt to achieve top SSR performance.

In this article, we explain why traditional slider libraries often fail in Nuxt projects, what makes Embla Carousel so special, and how you can use it to implement high-performance, SEO-friendly carousels. From problem analysis to solutions to best practices for production environments—everything you need for top-performing sliders in Nuxt.

Nuxt SSR Slider mit Top Performance

Introduction: The problem with sliders in Nuxt

Why are sliders in Nuxt a challenge?

Sliders and carousels are among the most common UI components on the web. They are used for product galleries, testimonials, blog posts, and much more. However, in Nuxt projects with server-side rendering (SSR), they can quickly lead to performance issues and negatively impact the user experience.

This is because many traditional slider libraries such as Swiper.js, Slick Carousel, or Owl Carousel were not designed for modern SSR frameworks. They typically cause the following problems:

  • No SSR support: Many sliders only work on the client side and create hydration mismatches
  • Hydration mismatches: Differences between server and client rendering lead to JavaScript errors
  • Large JavaScript bundles: 50-100KB of additional code slow down loading time
  • Layout shifts: Unpredictable size changes worsen Core Web Vitals
  • Poor SEO performance: Search engines cannot index dynamic content properly
  • Accessibility issues: Many sliders are not accessible and violate WCAG guidelines

After extensive testing of various slider libraries in real Nuxt projects, we have identified Embla Carousel as the best solution for modern web applications. Embla was developed specifically for frameworks such as Nuxt, Next.js, and SvelteKit.

What makes Embla Carousel so special:

  • Native SSR support: Perfect integration with Nuxt's server-side rendering
  • Minimal bundle size: Only ~7KB gzipped vs. 50-100KB for other libraries
  • Excellent performance: Optimized rendering engine without virtual DOM overhead
  • Touch gestures and accessibility: Full WCAG compliance and mobile optimization
  • TypeScript support: Fully typed for secure development
  • Flexible configuration: Adaptable to any design system and requirement

Why conventional slider libraries fail

Swiper.js: The classic with problems

Swiper.js is undoubtedly one of the most popular slider libraries. With over 35,000 GitHub stars and a large community, it seems to be the perfect choice. However, in Nuxt projects, Swiper quickly reaches its limits.

The problems with Swiper.js are manifold, ranging from the enormous bundle size of over 45KB gzipped for the basic version to fundamental SSR issues. Swiper does not offer native SSR support and requires client-only wrappers, which leads to frequent hydration issues. These mismatches between server and client rendering can significantly impair the user experience. In addition, performance suffers from virtual DOM overhead and unnecessary re-renders, while basic accessibility features are often missing.

Slick Carousel was long the standard for jQuery-based sliders. However, it is no longer up to date in modern Vue.js/Nuxt applications.

The jQuery dependency is an unnecessary burden in modern frameworks, while the lack of SSR support means that Slick only works on the client side. With a bundle size of over 30KB in addition to jQuery and an outdated architecture that was not designed for modern web standards, Slick Carousel is no longer practical today.

Owl Carousel was once popular, but has significant problems with modern frameworks.

There have been no active updates for years, leading to SSR incompatibility. The framework does not work with server-side rendering and suffers from performance issues due to inefficient DOM manipulation. In addition, it lacks accessibility features and WCAG compliance, making it unsuitable for modern web applications.

Embla Carousel is a modern, lightweight, and high-performance slider library designed specifically for modern web frameworks. Unlike traditional slider libraries, Embla was designed from the ground up for SSR, performance, and accessibility.

Embla Carousel's development philosophy is based on four fundamental principles: Framework agnosticism allows it to be used with Vue, React, Svelte, and Vanilla JavaScript. The performance-first approach guarantees minimal bundle size and an optimized rendering engine. Accessibility-by-default means that all WCAG guidelines are followed from the outset. Finally, Embla offers native support for server-side rendering, making it the ideal choice for Nuxt projects.

1. Minimal bundle size Embla Carousel is extremely compact at only ~7KB gzipped. In comparison, Swiper.js requires over 45KB gzipped, Slick Carousel over 30KB gzipped plus jQuery, and Owl Carousel about 25KB gzipped. This significant reduction in bundle size results in faster loading times and better performance.

2. Optimized performance Embla Carousel deliberately avoids virtual DOM and uses direct DOM manipulation without overhead. Intelligent caching ensures efficient memory usage, while lazy loading loads images and content as needed. Touch optimization offers native touch gestures without additional libraries.

3. Native SSR support Embla Carousel is hydration-free and does not cause mismatches between server and client. The SEO-friendly structure allows search engines to index all content. Progressive enhancement means that the slider also works without JavaScript.

4. Accessibility features Full keyboard control enables navigation via keyboard, while screen reader support is ensured by ARIA labels and semantic structure. Intelligent focus management and WCAG 2.1 AA compliance meet all important accessibility standards.

For detailed performance benchmarks and comparisons, we recommend the official Embla Carousel API documentation.

Installation and setup

npm install embla-carousel-vue
# or
yarn add embla-carousel-vue

2. Basic component structure

The emblaCarouselVue function offers seamless integration with Vue. A minimal setup requires an overflow wrapper and a scroll container. Here is the basic structure:

<script setup>
import emblaCarouselVue from 'embla-carousel-vue'

const [emblaRef] = emblaCarouselVue()
script>

<template>
  <div class="embla" ref="emblaRef">
    <div class="embla__container">
      <div class="embla__slide">Slide 1div>
      <div class="embla__slide">Slide 2div>
      <div class="embla__slide">Slide 3div>
    div>
  div>
template>

The emblaCarouselVue function gives us an emblaRef, which we attach to our wrapper element with the class embla to hide the scroll overflow. The element with the container class is the scroll body that scrolls the slides. Here is the required CSS:

<style scoped>
.embla {
  overflow: hidden;
}

.embla__container {
  display: flex;
}

.embla__slide {
  flex: 0 0 100%;
  min-width: 0;
}
style>

The emblaCarouselVue function takes the Embla Carousel options as its first parameter. You can also access the API using onMounted:

<script setup>
import { onMounted } from 'vue'
import emblaCarouselVue from 'embla-carousel-vue'

const [emblaRef, emblaApi] = emblaCarouselVue({ loop: false })

onMounted(() => {
  if (emblaApi.value) {
    console.log(emblaApi.value.slideNodes()) // API-Zugriff
  }
})
script>

<template>
  <div class="embla" ref="emblaRef">
    <div class="embla__container">
      <div class="embla__slide">Slide 1div>
      <div class="embla__slide">Slide 2div>
      <div class="embla__slide">Slide 3div>
    div>
  div>
template>

5. Add plugins (optional)

If you want to use plugins, first install the desired plugin. For example, the autoplay plugin:

npm install embla-carousel-autoplay
# or
yarn add embla-carousel-autoplay

The emblaCarouselVue function accepts plugins as a second parameter. Plugins must be passed in an array:

<script setup>
import emblaCarouselVue from 'embla-carousel-vue'
import Autoplay from 'embla-carousel-autoplay'

const [emblaRef] = emblaCarouselVue({ loop: false }, [Autoplay()])
script>

<template>
  <div class="embla" ref="emblaRef">
    <div class="embla__container">
      <div class="embla__slide">Slide 1div>
      <div class="embla__slide">Slide 2div>
      <div class="embla__slide">Slide 3div>
      <div class="embla__slide">Slide 4div>
    div>
  div>
template>

Use cases

Embla Carousel is particularly well suited for various use cases, which we will examine in detail.

1. Product galleries High-performance product galleries are essential for e-commerce websites. Embla Carousel offers touch-optimized navigation for mobile users, lazy loading for fast loading times, zoom functionality for detailed product views, and an SEO-friendly structure for better search engine rankings. This combination makes Embla the ideal choice for online stores that focus on conversion and performance.

2. Testimonials and reviews Customer reviews are crucial for conversion rates. Embla Carousel supports this requirement with autoplay functionality for automatic rotation, pause on hover for better user control, comprehensive accessibility features for all users, and responsive design for all devices. These features ensure that customer reviews are presented in the best possible way.

3. Blog Post Slider For content marketing and blog websites, Embla Carousel offers infinite loop for endless navigation, keyboard navigation for power users, screen reader support for barrier-free access, and social media integration for sharing functions. This combination makes the slider ideal for content-driven websites.

4. Team Member Presentation For corporate websites and portfolios, Embla Carousel offers a grid layout for multiple slides at once, hover effects for interactive elements, smooth transitions for a professional look, and mobile-first design for optimal use. These features ensure a professional presentation of team members.

Performance advantages in practice

SEO improvements Native SSR support allows you to significantly improve SEO performance. Optimized Core Web Vitals through fast rendering lead to high Lighthouse scores and good Google PageSpeed ratings for mobile devices. Improved indexing of image content in Search Console rounds off the SEO advantages.

Basic implementation

Simple slider

<template>
  <div class="embla" ref="emblaRef">
    <div class="embla__container">
      <div class="embla__slide" v-for="(slide, index) in slides" :key="index">
        <img :src="slide.image" :alt="slide.title" class="w-full h-64 object-cover" />
        <h3 class="text-xl font-bold mt-4">{{ slide.title }}h3>
        <p class="text-gray-600">{{ slide.description }}p>
      div>
    div>
  div>
template>

<script setup>
import { ref, onMounted } from 'vue'
import emblaCarouselVue from 'embla-carousel-vue'

const [emblaRef, emblaApi] = emblaCarouselVue()

const slides = ref([
  {
    image: '/img/blog/team/blue_shoes-47.jpg',
    title: 'Cloud Native Entwicklung',
    description: 'Moderne Anwendungen mit Docker, Kubernetes und Microservices',
    link: '/leistungen/cloud-native-entwicklung'
  },
  {
    image: '/img/blog/team/blue_shoes-3.jpg',
    title: 'Vue.js & Nuxt.js Expertise',
    description: 'Performante Frontend-Lösungen mit modernen Frameworks',
    link: '/technologien/vuejs-nuxt'
  },
  {
    image: '/img/blog/team/blue_shoes-28.jpg',
    title: 'DevOps & CI/CD',
    description: 'Automatisierte Deployment-Pipelines für maximale Effizienz',
    link: '/leistungen/devops-consulting'
  },
  {
    image: '/img/blog/team/blue_shoes-61.jpg',
    title: 'API-Entwicklung',
    description: 'RESTful APIs und GraphQL mit Python, FastAPI und Django',
    link: '/leistungen/api-entwicklung'
  }
])

onMounted(() => {
  if (emblaApi.value) {
    emblaApi.value.on('select', (event) => {
      const currentSlide = slides.value[event.selectedScrollSnap()]
      console.log(`Aktueller Slide: ${currentSlide.title}`)
    })
  }
})
script>

<style scoped>
.embla {
  overflow: hidden;
}

.embla__container {
  display: flex;
  gap: 1rem;
}

.embla__slide {
  flex: 0 0 100%;
  min-width: 0;
}
style>

Advanced Features and Configuration

Responsive Design and Breakpoints

Embla Carousel offers excellent support for responsive design. With the integrated breakpoints, you can adapt the behavior of the slider to different screen sizes.

The advantages of responsive configuration include a mobile-first approach optimized for touch devices, tablet optimization with customized navigation for medium screens, desktop enhancement with advanced features for large screens, and performance optimization where only necessary features are loaded.

Autoplay and interactivity

The autoplay functionality of Embla Carousel is designed to be particularly user-friendly.

Intelligent autoplay features include pause on hover for automatic pausing when the user interacts, touch pause, which stops when touch gestures are made on mobile devices, keyboard pause for keyboard input, and visibility API, which pauses when the slider is not visible.

Touch gestures and mobile optimization

Embla Carousel offers native touch support without additional libraries.

Touch features include swipe gestures for natural swipe navigation, momentum scrolling with physics-based animations, touch resistance to prevent accidental navigation, and multi-touch support for pinch-to-zoom and other gestures.

Performance optimizations

Lazy loading for images

Embla Carousel natively supports lazy loading for optimal performance. Here is an example of the implementation:

<template>
  <div class="embla" ref="emblaRef">
    <div class="embla__container">
      <div class="embla__slide" v-for="(slide, index) in slides" :key="index">
        <img 
          :src="slide.image" 
          :alt="slide.title" 
          loading="lazy"
          class="w-full h-64 object-cover"
        />
        <h3 class="text-xl font-bold mt-4">{{ slide.title }}h3>
        <p class="text-gray-600">{{ slide.description }}p>
      div>
    div>
  div>
template>

<script setup>
import emblaCarouselVue from 'embla-carousel-vue'

const [emblaRef] = emblaCarouselVue()
script>

Intersection Observer for performance

For additional performance optimization, you can use Intersection Observer to initialize the slider only when it is visible:

<script setup>
import { ref, onMounted } from 'vue'
import emblaCarouselVue from 'embla-carousel-vue'

const isVisible = ref(false)
const sliderRef = ref(null)
const [emblaRef, emblaApi] = emblaCarouselVue()

onMounted(() => {
  const observer = new IntersectionObserver(
    ([entry]) => {
      isVisible.value = entry.isIntersecting
    },
    { threshold: 0.1 }
  )
  
  if (sliderRef.value) {
    observer.observe(sliderRef.value)
  }
})
script>

<template>
  <div ref="sliderRef" class="embla" ref="emblaRef">
    <div class="embla__container">
      <div class="embla__slide" v-for="(slide, index) in slides" :key="index">
        <img :src="slide.image" :alt="slide.title" class="w-full h-64 object-cover" />
      div>
    div>
  div>
template>

Optimized bundle size

For Nuxt projects, you can further reduce the bundle size through optimized configuration:

// nuxt.config.ts
export default defineNuxtConfig({
  build: {
    transpile: ['embla-carousel-vue']
  },
  vite: {
    optimizeDeps: {
      include: ['embla-carousel-vue']
    }
  }
})

Accessibility and SEO optimization

Why accessibility is important for sliders

Sliders are often critical UI components that must be accessible to all users. Embla Carousel was developed from the ground up with accessibility in mind and offers native support for screen readers, keyboard navigation, and WCAG 2.1 AA compliance.

The benefits for slider-specific accessibility range from full keyboard control for power users to screen reader support, which allows blind users to navigate through all slides. Embla's native ARIA labels and semantic structure ensure that each slide is correctly described.

Embla Carousel offers comprehensive accessibility features designed specifically for slider implementations:

1. Keyboard navigation for sliders

<template>
  <div 
    class="embla" 
    ref="emblaRef"
    @keydown="handleKeydown"
    tabindex="0"
    role="region"
    aria-label="Bildergalerie"
  >
    <div class="embla__container">
      <div class="embla__slide" v-for="(slide, index) in slides" :key="index">
        <img :src="slide.image" :alt="slide.title" class="w-full h-64 object-cover" />
      div>
    div>
  div>
template>

<script setup>
import emblaCarouselVue from 'embla-carousel-vue'

const [emblaRef, emblaApi] = emblaCarouselVue()

const handleKeydown = (event) => {
  switch (event.key) {
    case 'ArrowLeft':
      emblaApi.value?.scrollPrev()
      break
    case 'ArrowRight':
      emblaApi.value?.scrollNext()
      break
    case 'Home':
      emblaApi.value?.scrollTo(0)
      break
    case 'End':
      emblaApi.value?.scrollTo(slides.value.length - 1)
      break
  }
}
script>

2. Screen reader support for slider content

<template>
  <div class="embla" ref="emblaRef">
    <div class="embla__container">
      <div 
        class="embla__slide" 
        v-for="(slide, index) in slides" 
        :key="index"
        :aria-label="`Slide ${index + 1} von ${slides.length}: ${slide.title}`"
        :aria-hidden="emblaApi?.selectedScrollSnap() !== index"
      >
        <img 
          :src="slide.image" 
          :alt="slide.title" 
          class="w-full h-64 object-cover"
        />
      div>
    div>
    
    
    <button 
      class="embla__prev" 
      @click="emblaApi?.scrollPrev()"
      aria-label="Vorheriger Slide"
      :aria-disabled="emblaApi?.canScrollPrev() === false"
    >
    button>
    <button 
      class="embla__next" 
      @click="emblaApi?.scrollNext()"
      aria-label="Nächster Slide"
      :aria-disabled="emblaApi?.canScrollNext() === false"
    >
    button>
  div>
template>

<script setup>
import emblaCarouselVue from 'embla-carousel-vue'

const [emblaRef, emblaApi] = emblaCarouselVue()
script>

SEO optimization for slider content

Sliders pose a particular challenge for SEO, as dynamic content is often overlooked by search engines. Embla Carousel solves this problem with native SSR support and SEO-friendly structures.

Why SEO is critical for sliders:

  • Image indexing: Search engines can index all images in sliders, not just the first one
  • Content accessibility: All slide content is available to crawlers, not just visible content
  • Structured data: Schema.org markup for carousel content improves snippets
  • Core Web Vitals: Optimized performance improves rankings for pages with sliders

SEO best practices for Embla Slider:

  • Semantic HTML structure: Use correct HTML tags for slider content
  • Meaningful alt text: Every image in the slider needs descriptive alt text
  • Structured data: Implement Schema.org markup for carousel content
  • Meta descriptions: Optimized meta tags for each slide content

Best practices for slider implementations

Why slider-specific optimization is important

Sliders are often the first elements users see on a page. A poorly optimized slider implementation can negatively impact the entire user experience. Embla Carousel offers special features for production environments.

Slider-specific issues:

  • Slow loading times: Large images in sliders slow down the initial page load
  • Layout shifts: Unpredictable size changes worsen Core Web Vitals
  • Touch issues: Poor touch optimization on mobile devices
  • Accessibility issues: Many sliders are not accessible

Error handling for sliders

Robust error handling is particularly important for sliders, as they often present critical content:

1. Graceful degradation for sliders

<script setup>
import { ref, onMounted } from 'vue'
import emblaCarouselVue from 'embla-carousel-vue'

const hasError = ref(false)
const errorMessage = ref('')
const isLoading = ref(true)

const [emblaRef, emblaApi] = emblaCarouselVue()

onMounted(() => {
  try {
    if (emblaApi.value) {
      emblaApi.value.on('error', (error) => {
        console.error('Slider error:', error)
        hasError.value = true
        errorMessage.value = 'Image gallery could not be loaded'
      })
      
      emblaApi.value.on('init', () => {
        isLoading.value = false
        console.log('Slider successfully initialized')
      })
    }
  } catch (error) {
    hasError.value = true
    errorMessage.value = `Error initializing the image gallery: ${error.message}`
    isLoading.value = false
    console.error('Slider initialization failed:', error)
  }
})
script>

Progressive enhancement for sliders

Sliders must also work without JavaScript to ensure SEO and accessibility:

1. Progressive enhancement for sliders

<template>
  <div class="embla">
    
    <div class="embla__fallback" v-if="!isHydrated">
      <div v-for="(slide, index) in slides" :key="index" class="slide-fallback mb-8">
        <img 
          :src="slide.image" 
          :alt="slide.title" 
          class="w-full h-64 object-cover rounded-lg"
        />
        <h3 class="text-xl font-bold mt-4 text-gray-800">{{ slide.title }}h3>
        <p class="text-gray-600 mt-2">{{ slide.description }}p>
        <a 
          :href="slide.link" 
          class="inline-block mt-4 px-6 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"
        >
          Mehr erfahren
        a>
      div>
    div>
    
    
    <div v-else class="embla" ref="emblaRef">
      <div class="embla__container">
        <div 
          class="embla__slide" 
          v-for="(slide, index) in slides" 
          :key="index"
        >
          <div class="relative group">
            <img 
              :src="slide.image" 
              :alt="slide.title" 
              class="w-full h-64 object-cover rounded-lg transition-transform group-hover:scale-105"
            />
            <div class="absolute inset-0 bg-black bg-opacity-40 rounded-lg opacity-0 group-hover:opacity-100 transition-opacity">
              <div class="absolute bottom-4 left-4 text-white">
                <h3 class="text-xl font-bold">{{ slide.title }}h3>
                <p class="text-sm">{{ slide.description }}p>
              div>
            div>
          div>
        div>
      div>
    div>
  div>
template>

<script setup>
import { ref } from 'vue'

const isHydrated = ref(false)

onMounted(() => {
  isHydrated.value = true
})
script>

Performance metrics for sliders

Certain metrics are particularly important for slider-specific performance optimization:

Slider-specific metrics:

  • Load time: Sliders should load in less than 1 second, as they are often above the fold
  • Interaction delay: Slide changes should respond in less than 100 ms
  • Memory usage: Monitoring memory leaks during long slider sessions
  • Touch responsiveness: Touch gestures should respond immediately
  • Slide transition performance: Smooth transitions between slides

After years of experience with various slider libraries in Nuxt projects, we can say with certainty: Embla Carousel is the best solution for modern slider implementations.

Summary of slider advantages

Performance advantages for sliders: Embla Carousel offers a small bundle size of only ~7KB gzipped, which is particularly important since sliders are often loaded above the fold. High FPS and smooth animations ensure professional slide transitions, while fast loading times thanks to optimized architecture improve the user experience. No hydration mismatches thanks to native SSR support make Embla the ideal choice for Nuxt projects.

SEO and accessibility benefits for sliders: Full WCAG 2.1 AA compliance is particularly important for sliders, as they often present critical content. Better Google rankings through optimized Core Web Vitals, screen reader support for barrier-free access to all slides, and keyboard navigation for power users make Embla the ideal choice for professional slider implementations.

Developer experience for sliders: TypeScript support for secure slider development, flexible configuration for all slider use cases, an active community and regular updates, as well as comprehensive documentation and examples ensure an excellent developer experience when implementing sliders.

Perfect for sliders in: Embla Carousel is ideal for e-commerce websites with product galleries, corporate websites with team presentations, blog websites with content sliders, portfolio websites with project galleries, and marketing websites with testimonial sliders.

Not suitable for: Very simple image galleries without interactivity, legacy projects with jQuery dependencies, or projects with very specific requirements for other slider libraries are less suitable for Embla Carousel.

Business impact for slider implementations

Implementing Embla Carousel for Sliders can bring significant benefits to your business:

Performance impact for sliders: Faster loading times improve the user experience for sliders, while better Core Web Vitals lead to higher Google rankings. Reduced bounce rates thanks to faster slider interactions round off the performance benefits.

SEO impact for sliders: Improved image indexing through SEO-friendly slider structure, better accessibility scores in Lighthouse, and higher conversion rates through optimized slider user experience are the most important SEO advantages.

Development impact for sliders: Faster development through simple slider integration, fewer bugs thanks to TypeScript and robust slider architecture, and easier maintenance through clear API and documentation make Embla Carousel the ideal choice for slider development teams.


Embla Carousel offers native SSR support, minimal bundle size, and excellent performance. It is specifically designed for modern web frameworks and works seamlessly with Nuxt's server-side rendering. Unlike other slider libraries, Embla does not cause hydration mismatches and offers optimal performance for Nuxt projects.

The implementation is very simple: Install the Embla Carousel Vue plugin with npm install embla-carousel-vue and use the emblaCarouselVue function in your components. Create a client-only component for the carousel functionality and use Nuxt's SSR features for optimal performance. We have explained the detailed implementation step by step in this article.

Embla Carousel offers lazy loading, touch gestures, keyboard navigation, automatic resizing, and minimal JavaScript execution. These features ensure smooth animations and an optimal user experience. In addition, Embla supports Intersection Observer for on-demand initialization and offers native touch optimization without additional libraries.

Yes, Embla Carousel offers full TypeScript support. The types are already included in the package and offer excellent IDE support for secure development. The emblaCarouselVue function is fully typed and offers IntelliSense for all options and methods.

Embla Carousel supports lazy loading for images and offers optimized media handling features. Combine it with Nuxt Image for additional performance optimizations. The loading="lazy" attribute is natively supported, and you can use Intersection Observer for additional performance optimizations.

Alternatives include Swiper.js, Splide.js, or Slick Carousel. However, Embla Carousel stands out with better SSR support, smaller bundle size, and more modern architecture. As we have shown in this article, traditional slider libraries have significant disadvantages in Nuxt projects, while Embla Carousel was developed specifically for modern web frameworks.


Do you have questions or an opinion? With your GitHub account you can let us know...