NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1231 most downloaded on npm
A lightweight carousel library with fluid motion and great swipe precision
Last release 28 days ago
21 Aug 2026
Release timing varies
gaps range from 9 days to 10 months
Nearly every release is documented
notes for 56 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
240 releases · first in 2019
Any plugins you intend to use with this version also has to be v7.0.0-rc05.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Full Changelog: https://github.com/davidjerleke/embla-carousel/compare/v7.0.0-rc04...v7.0.0-rc05
Any plugins you intend to use with this version also has to be v7.0.0-rc04.
One column per quarter.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Full Changelog: https://github.com/davidjerleke/embla-carousel/compare/v7.0.0-rc03...v7.0.0-rc04
Any plugins you intend to use with this version also has to be v7.0.0-rc03.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Full Changelog: https://github.com/davidjerleke/embla-carousel/compare/v7.0.0-rc01...v7.0.0-rc03
Any plugins you intend to use with this version also has to be v7.0.0-rc01.
auto% to px. As a result, the position: relative style on the slides needed for loop carousels to work is not necessary anymore.Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Adds the ability to set global options. Solves #175.
Adds the ability to set global options. Solves #175.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Adds the `playOnInit` option to the `embla-carousel-autoplay` plugin.
Adds the playOnInit option to the embla-carousel-autoplay plugin.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Adds the Auto Height plugin to NPM. Solves #113.
Adds the Auto Height plugin to NPM. Solves #113.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Adds the Class Names plugin to NPM. Solves #239.
Adds the Class Names plugin to NPM. Solves #239.
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
[x] dangerouslyGetEngine --> internalEngine
true --> falsedangerouslyGetEngine --> internalEngine% to px. A side effect of this will be that the position: relative needed for loop carousels won't be necessary anymore.Embla Carousel is an open source MIT licensed project. If you are interested in supporting this project, please consider:
Added the missing nodeAuthToken to the .yarnrc file.
Added the missing nodeAuthToken to the .yarnrc file.
`js import useEmblaCarousel from 'embla-carousel-react' `
import useEmblaCarousel from 'embla-carousel-react'
import { useEmblaCarousel } from 'embla-carousel/react'
This patch release fixes the broken type declarations for the useEmblaCarousel hook that was introduced in v4.5.2.
This patch release fixes the broken type declarations for the useEmblaCarousel hook that was introduced in v4.5.2.
Nothing published for this version
Solves issue #181 to some extent.
🌟 Improvements
Solves issue #181 to some extent.
Solves issue #38. With this release, it's possible to turn off the behavior where the carousel skips scroll snaps when it's dragged vigorously. This w
Solves issue #38. With this release, it's possible to turn off the behavior where the carousel skips scroll snaps when it's dragged vigorously. This will be an opt-in option for now, but with the next major release (v.5), this will be the default behavior.
Read more here.
Nothing published for this version
Solves issue #176. With this release, it's possible to scroll instantly to a scroll snap with the jump parameter. It's a boolean and default is false.
Solves issue #176. With this release, it's possible to scroll instantly to a scroll snap with the jump parameter. It's a boolean and default is false. The following methods accept the jump parameter:
embla.scrollTo(3) // Smooth scroll to scroll snap index 3
embla.scrollTo(3, true) // Instant jump to scroll snap index 3
embla.scrollPrev() // Smooth scroll to the previous scroll snap
embla.scrollPrev(true) // Instant jump to the previous scroll snap
embla.scrollNext() // Smooth scroll to the next scroll snap
embla.scrollNext(true) // Instant jump to the next scroll snap
This feature doesn't add anything to the bundle size.
<img width="700" alt="v4 4 0" src="https://user-images.githubusercontent.com/11529148/114317052-8c3f4d80-9b06-11eb-8ee3-c1d5533bc3bf.png">
Enjoy!
## 🛠️ Bugfixes Solves issue #170.
Solves issue #170.
## 🛠️ Bugfixes Solves issue #164.
Solves issue #164.
Solves issue #156. With this release, it's possible to declare different options for different breakpoints. It's achieved by using the content attribu
Solves issue #156. With this release, it's possible to declare different options for different breakpoints. It's achieved by using the content attribute of the pseudo element :before on the root node:
.embla:before {
display: none;
content: '{
"slidesToScroll": 1,
"draggable": true
}';
}
@media (min-width: 768px) {
.embla:before {
content: '{
"slidesToScroll": 2,
"draggable": false
}';
}
}
Enjoy!
Removes the transform rounding in the Translate component.
Removes the transform rounding in the Translate component.
This is definitely one of the most exciting releases in a while. This release ships with awesome new features:
This is definitely one of the most exciting releases in a while. This release ships with awesome new features:
Embla will automatically detect any spacings between the slides whether it's margins or grid gaps, and automagically align the scroll snaps accordingly. This gives users a whole new level of freedom and convenience when setting up their carousels. This marks the beginning of Embla Carousel fully supporting any CSS that aligns your slides horizontally or vertically, whether it's CSS Grid, Flexbox or any other setup. This is more to the spirit of Embla Carousel which aims to have a minimal footprint.
For example, add spacing between your slides like so:
.embla__slide {
margin-right: 20px;
}
...or like so:
.embla__container {
grid-column-gap: 20px;
}
Before this release, Embla exposed its container node and slide nodes with the embla.containerNode() and embla.slideNodes() methods. This release also exposes the rootNode with the following method embla.rootNode().
The root node is equivalent to the first argument you pass to the EmblaCarousel(rootNode: HTMLElement, option: EmblaOptions) initalizer. It's been added for convenience, in case you need to access that node in any context where you have access to the embla instance.
const embla = EmblaCarousel(emblaNode /* <--- this is equivalent to... */, options)
const rootNode = embla.rootNode() /* <--- ...this node */
This release makes the total bundle size 6% smaller 🎉 😍.
Enjoy! David
README links now point directly to useful documentation pages. For example Installation --> Takes you to https://www.embla-carousel.com/get-started/#c
README links now point directly to useful documentation pages. For example Installation --> Takes you to https://www.embla-carousel.com/get-started/#choose-installation-type.
The new documentation website is up. Check it out here https://www.embla-carousel.com.
The new documentation website is up. Check it out here https://www.embla-carousel.com.
This release comes with a refactored eventEmitter component that slightly reduces the bundle size.
This release comes with a refactored eventEmitter component that slightly reduces the bundle size.
The ScrollBounds component is now responsible for applying friction instead of the dragHandler component when the carousel is out of bounds.
ScrollBounds component is now responsible for applying friction instead of the dragHandler component when the carousel is out of bounds.Nothing published for this version
This release comes with RTL (Right To Left) support (#43) for Embla. Special thanks to @omarkhatibco and @ppromerojr for all the help. And good news!
This release comes with RTL (Right To Left) support (#43) for Embla. Special thanks to @omarkhatibco and @ppromerojr for all the help. And good news! This feature doesn't add any weight to the Embla library. It actually comes with a slightly reduced bundle size.
The options object is configured like so:
const emblaNode = document.getElementById('embla')
const options = { direction: 'rtl' } // Default is 'ltr'
const embla = EmblaCarousel(emblaNode, options)
The HTML direction also has to be set to RTL. This can be achieved by using the HTML dir attribute:
<div class="embla" id="embla" dir="rtl">
...
</div>
...or using the CSS direction property:
.embla {
direction: rtl;
}
I've added the following two sandboxes to the examples page to get you started:
Enjoy!
Nothing published for this version
Fixes the issue described in PR #108. Special thanks to @msallent for his efforts!
Nothing published for this version
Issue #87. Special thanks to @S1SYPHOS for reporting this.
Comes with fixes for:
Comes with a fix for issue #99. Special thanks to @flayks for reporting this.
Nothing published for this version
Instead of exposing an encapsulated component , the useEmblaCarousel() hook now exposes a ref you can attach to your own component. The ref approach m
<EmblaCarouselReact>, the useEmblaCarousel() hook now exposes a ref you can attach to your own component. The ref approach makes the Embla footprint smaller regarding forcing stuff on the user. Basically, what the <EmblaCarouselReact> component did was creating a React Element with the style { overflow: "hidden" }. As a consequence, the user had to pass a string to choose DOM element type (div, ul, section etc...) and had to use the className prop in order to style the encapsulated element. This release solves issue #94.<EmblaCarouselReact> returned null before initializing the carousel. This release solves issue #91.useEmblaCarousel({ loop: false }) was before this release a one way ticket. Changing options didn't reinitialize the carousel with the new options. This has been fixed in this release.Migrating is luckily very easy.
import React, { useEffect } from 'react'
import { useEmblaCarousel } from 'embla-carousel/react'
const EmblaCarousel = () => {
const [EmblaCarouselReact, emblaApi] = useEmblaCarousel({ loop: false })
return (
<EmblaCarouselReact>
<div className="embla__container">
<div className="embla__slide">Slide 1</div>
<div className="embla__slide">Slide 2</div>
<div className="embla__slide">Slide 3</div>
</div>
</EmblaCarouselReact>
)
}
export default EmblaCarousel
import React, { useEffect } from 'react'
import { useEmblaCarousel } from 'embla-carousel/react'
const EmblaCarousel = () => {
const [emblaRef, emblaApi] = useEmblaCarousel({ loop: false })
return (
<div className="embla" ref={emblaRef}> /* Make sure this element has overflow: hidden; */
<div className="embla__container">
<div className="embla__slide">Slide 1</div>
<div className="embla__slide">Slide 2</div>
<div className="embla__slide">Slide 3</div>
</div>
</div>
)
}
export default EmblaCarousel
Enjoy!
Resolves issue #84 with PR #93 which removed side effects from the react package. Special thanks to @wopian for his efforts.
"sideEffects": false in package.json.A fix for the window bind issue has been merged #85. Special thanks to @romellem for this.
event.cancelable and bails if it returns false.This release resolves issue #82. Special thanks to @sedlukha.
This release resolves issue #82. Special thanks to @sedlukha.
Small code improvements that resulted in a smaller bundle size.
Nothing published for this version
When an empty carousel with no slides was initialized, canScrollNext() and canScrollPrev() returned true when loop: true. This has been resolved.
canScrollNext() and canScrollPrev() returned true when loop: true. This has been resolved.Nothing published for this version
Nothing published for this version
This release resolves issue #78. Special thanks to @korsvanloon for opening this issue.
This release resolves issue #78. Special thanks to @korsvanloon for opening this issue.
This release resolves issue #77. Special thanks to @jamesdbruner for noticing this.
This release resolves issue #77. Special thanks to @jamesdbruner for noticing this.
Nothing published for this version
This release resolves issue #75. Special thanks to @korsvanloon for opening this issue.
This release resolves issue #75. Special thanks to @korsvanloon for opening this issue.
Nothing published for this version
The embla-carousel-react has now moved into the core package which will improve the maintainability of this project. For example, as soon as a new ver
The embla-carousel-react has now moved into the core package which will improve the maintainability of this project. For example, as soon as a new version is released, React users won't have to wait for the React package to be published separately.
Please migrate as soon as possible. Start by uninstalling the react package and installing the core package like so:
NPM
npm uninstall embla-carousel-react --save
npm install embla-carousel --save
YARN
yarn remove embla-carousel-react --save
yarn add embla-carousel --save
// from this...
import { useEmblaCarousel } from 'embla-carousel-react';
// ...to this
import { useEmblaCarousel } from 'embla-carousel/react';
useEmblaCarousel() hook. The class setup is no longer supported. Please migrate to the hook setup as soon as possible.If you've starred the Embla Carousel React package, please take a moment to migrate your star ⭐ to the core package as well. I would appreciate that a lot.
Thank you! David
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →