---
title: Carousel
description: A carousel with motion and swipe built using Embla.
source: apps/www/src/lib/registry/default/ui/carousel
primitive: https://www.embla-carousel.com/api
---
## About
The carousel component is built using the [Embla Carousel](https://www.embla-carousel.com/) library.
## Installation
```bash
npx shadcn-vue@latest add carousel
```
## Usage
```vue
...
...
...
```
## Examples
### Sizes
To set the size of the items, you can use the `basis` utility class on the ``.
Example
```vue:line-numbers title="Example" {4-6}
// 33% of the carousel width.
...
...
...
```
Responsive
```vue:line-numbers title="Responsive" {4-6}
// 50% on small screens and 33% on larger screens.
...
...
...
```
### Spacing
To set the spacing between the items, we use a `pl-[VALUE]` utility on the `` and a negative `-ml-[VALUE]` on the ``.
**Why:** I tried to use the `gap` property or a `grid` layout on the `
CarouselContent` but it required a lot of math and mental effort to get the
spacing right. I found `pl-[VALUE]` and `-ml-[VALUE]` utilities much easier to
use.
You can always adjust this in your own project if you need to.
Example
```vue:line-numbers /-ml-4/ /pl-4/
...
...
...
```
Responsive
```vue:line-numbers /-ml-2/ /pl-2/ /md:-ml-4/ /md:pl-4/
...
...
...
```
### Orientation
Use the `orientation` prop to set the orientation of the carousel.
```vue
...
```
## Options
You can pass options to the carousel using the `opts` prop. See the [Embla Carousel docs](https://www.embla-carousel.com/api/options/) for more information.
```vue:line-numbers {3-6}
...
...
...
```
## API
### Method 1
Use the `@init-api` emit method on `` component to set the instance of the API.
### Method 2
You can access it through setting a template ref on the `` component.
```vue:line-numbers {2,5,9}
...
```
## Events
You can listen to events using the API. To get the API instance use the `@init-api` emit method on the `` component
```vue:line-numbers {5,7-9,25}
...
```
See the [Embla Carousel docs](https://www.embla-carousel.com/api/events/) for more information on using events.
## Slot Props
You can get the reactive slot props like `carouselRef, canScrollNext..Prev, scrollNext..Prev` using the `v-slot` directive in the `` component to extend the functionality.
```vue:line-numbers {2}
...
```
## Plugins
You can use the `plugins` prop to add plugins to the carousel.
```bash
npm i embla-carousel-autoplay
```
```vue:line-numbers {2,8-10}
...
```
See the [Embla Carousel docs](https://www.embla-carousel.com/api/plugins/) for more information on using plugins.