v14.3.0
- a11y: let Tab leave the carousel in loop mode (944ba56), closes #8181
- core: drop per-image lazyPreload listeners, handle image
errorin delegated loader (eb02f3c), closes #8223 - core: handle every ResizeObserver frame during continuous resize (6818fea), closes #5441 #8230
- core: keep elementTransitionEnd until the element's own event (#8232) (95696d0), closes #8229
- core: run nested swipers innermost-first regardless of init order (0d100d4), closes #8233 #7702 #8233
- core: skip loop fix and its warning when watchOverflow locks the slider (fefcc9c), closes #8228
- element: keep element class fields type-only so init="false" works in Vue/React 19 (827b8fb), closes #8224
- react: skip emitSlidesClasses() on a destroyed instance (3bf7421)
- types: use SwiperClass for byController in React and Vue wrappers (bdedc7b)
- vue: guard params.loop access in SwiperSlide on a destroyed instance. (d3c325a)
- vue: only invoke slots in render to avoid "slot invoked outside render" warning (eac8a35), closes #8227
- vue: skip emitSlidesClasses() on a destroyed instance (7f8c4cc)
v14.2.0
- cards: prevent invalid calc() transform with low perSlideOffset (d8ff235), closes #8211
- core: do not emit index-change events from loopFix teleports (#8015) (9b78f71)
- core: harden extend() against prototype-method override in key filtering (93154fc), closes #8189
- core: recompute rtlTranslate in changeDirection (#8053) (b4b49bf)
- core: size loop buffer from actual offset width, not centeredSlides geometry (#8203) (bc4a658)
v14.0.1
Patch release fixing two web-component (and Vue wrapper) regressions introduced by the v14 rewrite.
- core: restore slide detection in web component — the
<swiper-container>element initialized with zero slides becauseslidesElwas resolved to the shadow root instead of the host element (b3b822f), closes #8196 - element: render navigation/pagination/scrollbar when set as boolean params — bare boolean usage (
<swiper-container navigation>, Vue:navigation="true") stopped rendering the built-in controls (253fa39), closes #8196
v14.0.0
Swiper v14 is a ground-up TypeScript rewrite of the entire codebase, focused on smaller bundles, more accurate types, and a modern browser baseline. (We skipped v13.)
Upgrading from v12 requires no code changes. Every option, default, event, payload, method signature, and module import (swiper/modules, swiper/react, swiper/vue, swiper/element, …) behaves exactly as before. The only differences you may notice are tighter TypeScript types and a narrower set of supported browsers — see Breaking Changes below.
- Single TypeScript source of truth.
src/is now.ts/.tsx. The hand-maintained.d.tstree (src/types/, the per-module.d.tsfiles) is gone — declarations are emitted directly from the runtime source withtsc, so the shipped types can no longer drift from the implementation. Several signatures that used to beanyare now correctly typed (e.g.getTranslate(): number). - Per-module type augmentation. Each module augments the central
Swiper/SwiperOptions/SwiperEventsinterfaces. Importing a module (e.g.import { Navigation } from 'swiper/modules') brings its option, method, and event types along with it — mirroring how the runtime already requires registration. - More reliable type resolution. Types now resolve correctly under classic
node,node16/nodenext, andbundlermodule resolution, andswiper/bundleexposes every module's options out of the box. Verified by a consumer-simulation test suite. - Zero runtime dependencies. The
ssr-windowdependency was removed and replaced with inline environment guards. Swiper now installs with no transitive runtime deps. - Smaller minified bundles. Legacy DOM-compat helpers and below-baseline feature detection were removed. The shared DOM utils shrank ~28%, and the main builds are ~2–4% smaller minified (
swiper.min.js−4.1%,swiper-element.min.js−2.9%,swiper-bundle.min.js−2.3%). - Babel removed from the build. TypeScript now handles the JSX transform for the React wrapper, and
@babel/preset-envis a no-op at the v14 baseline. Runtime output is byte-identical (React output is marginally smaller).
- Browser baseline raised to the last ~2 years of evergreen browsers. Swiper v14 targets Chrome / Edge 110+, Safari 16.4+ (iOS 16.4+), and Firefox 110+. Code paths and feature detection for older browsers were removed (e.g. the
smoothScrollsupport flag, the Safari < 16.2 perspective workaround, and the legacyDocumentTouchtouch check). iOS/Android-specific quirk handling is kept but simplified. If you need to support older browsers, stay on v12. - Node.js >= 20.19.0 is now required to build/develop against the package (
engineswas>= 4.7.0). This does not affect the browser runtime. - Type-level changes. Stricter types may surface latent issues in code that previously relied on
any-typed access to Swiper internals. These are compile-time only — there are no runtime behavior changes.
ssr-window's mock window/document were replaced with inline typeof guards. Server rendering with the React / Vue / Element wrappers is unaffected — they only instantiate Swiper in client-side mount effects. Imperatively calling new Swiper(...) in a pure Node (non-DOM) environment once again no-ops gracefully, matching v12 behavior, and is now locked down by a dedicated SSR runtime test.