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.
v12.1.0
- autoplay: broken custom delay percentages with pause/resume (#8133) (0afecde)
- core: Don't use
data-swiper-slide-indexforrealIndexwhen virtual module is enabled (#8142) (bd957f8) - core: Escape all CSS selector special characters (d35f41a), closes #8135
- core: support slidesOffsetBefore and slidesOffsetAfert in cssMode (45b98d0), closes #7926
- fix lazy preloader removal error in react in vue (332f5c7), closes #8149
- thumbs: update slide classes on virtual swiper update (#8141) (9752771)
- types: Add
autoScrolltothumbs.updatetype signature (#8146) (5d91e6e) - zoom: initialize gesture state after programmatic zoom (#8112) (71e9511)