egjs Flicking: A JavaScript Carousel Component
@egjs/flicking is NAVER's carousel component for sliders that need circular looping, momentum-based free scroll, and virtual rendering for large panel counts. It ships framework wrappers for React and Vue 3 plus a separate plugins package for AutoPlay, Fade, Parallax, Arrow, and Pagination. Reach for it if you need SSR in Next.js or Nuxt and full TypeScript types; skip it if a five-line CSS slider already covers your case.
Introducing egjs Flicking
@egjs/flicking is an open-source JavaScript carousel component built by NAVER, with core, React, and Vue 3 packages published separately. The README lists circular mode for looping, free scroll for momentum-based native scrolling, and virtual scroll that renders only visible panels. It's written in TypeScript with a fully typed API, and NAVER documents SSR support for Next.js and Nuxt.
Core Features of Flicking
- โCircular mode loops panels continuously without a visible jump at the wrap-around point.
- โFree scroll gives momentum-based native scrolling instead of only snapping fixed to each panel.
- โVirtual scroll renders only the panels currently visible, aimed at large panel counts.
- โSSR ready โ the README lists compatibility with Next.js and Nuxt.
- โA separate @egjs/flicking-plugins package adds AutoPlay, Fade, Parallax, Arrow, and Pagination without bloating the core bundle.
- โWritten in TypeScript with a fully typed API.
- โDedicated @egjs/react-flicking and @egjs/vue3-flicking packages wrap the core library for React and Vue 3 respectively.
- โDistributed via npm and three CDNs (jsDelivr, unpkg, cdnjs) for non-bundled use.
Installation and Setup
Install the core package with `npm install --save @egjs/flicking`, then import the CSS alongside the JS import โ the README's ES Modules example imports both `@egjs/flicking` and `@egjs/flicking/dist/flicking.css`. If you're not using a bundler, the README lists three CDNs: jsDelivr, unpkg, and cdnjs, plus a pre-packaged `flicking.pkgd.min.js` build for the plain-script-tag case. React and Vue 3 projects install the separate `@egjs/react-flicking` or `@egjs/vue3-flicking` packages instead of wrapping the core package by hand.
Quick Start with Flicking
The README's quick-start initializes Flicking against a container element: `import Flicking from "@egjs/flicking"; import "@egjs/flicking/dist/flicking.css"; const flicking = new Flicking("#my-flicking", { circular: true });`. It notes the HTML structure requirement only matters when you're not using one of the framework wrappers โ React and Vue 3 projects skip manual DOM setup and use the `@egjs/react-flicking` or `@egjs/vue3-flicking` components instead. The CDN path mirrors this: load `flicking.pkgd.min.js` and the CSS via script/link tags, then call `new Flicking(...)` the same way.
Strengths
- โCircular mode and virtual scroll are both handled by the library itself, not left as a DIY implementation detail.
- โSSR support for Next.js and Nuxt is documented directly, instead of requiring a client-only workaround.
- โOne core engine shared across vanilla JS, React (@egjs/react-flicking), and Vue 3 (@egjs/vue3-flicking) means the same mental model transfers across projects.
- โA fully typed TypeScript API, which matters if you're already catching prop errors at compile time elsewhere in the codebase.
- โMIT license with no usage restrictions, and the project is maintained by NAVER rather than a single hobbyist maintainer.
Considerations for Use
- โณThe README's browser-support table lists compatibility levels ('Latest', 'Latest', 'Latest', '7+', '4+') without labeling which browsers the numbers belong to, so exact minimum-version support isn't clearly documented here.
- โณNo live example is embedded in the README itself โ you have to leave GitHub to see Flicking actually run, via the linked demos and API docs.
- โณThe package table only covers @egjs/flicking, @egjs/flicking-plugins, @egjs/react-flicking, and @egjs/vue3-flicking; there's no dedicated Angular wrapper listed, even though 'angular' appears as a repo topic.
- โณThe project has a modest following; the README is the main documentation surface, so third-party tutorials or Stack Overflow coverage may be limited as a result.
- โณThe README doesn't state a current version number or changelog inline, so you won't know what release you're installing without checking npm directly.
Other Carousel Libraries
Common Questions
egjs Flicking ships a framework-agnostic core plus dedicated @egjs/react-flicking and @egjs/vue3-flicking packages for React and Vue 3, per the README's package table. Angular appears as a repo topic, but no separate Angular wrapper package is listed there.
egjs Flicking's README lists SSR readiness as a feature, specifically citing compatibility with Next.js and Nuxt.
egjs Flicking is released under the MIT license, per its GitHub repository.
egjs Flicking includes a virtual-scroll mode that, per the README, renders only the panels currently visible rather than mounting every panel in the DOM at once, which is aimed at exactly this case.
egjs Flicking includes a circular mode that loops panels continuously without a visible jump at the wrap-around point, according to the README.
egjs Flicking's README calls out an 'AI-native' direction for the project: clearer TypeScript types, error messages, and documentation organized by use case, aimed at making the library easier for both developers and AI coding tools to use correctly. It also points to a separate llms.txt guide for AI agents.
The problem it solves
Most homegrown carousel code handles a handful of slides fine, then jumps or stutters once you add circular looping or once the panel count grows into the hundreds and every panel stays mounted in the DOM. @egjs/flicking's README addresses both: a circular mode that loops without a visible seam at the wrap-around point, and a virtual-scroll mode that renders only the panels currently on screen. It also documents SSR support for Next.js and Nuxt instead of leaving server rendering as an afterthought, which matters if the carousel sits above the fold on a page that needs to be indexed.
Best use cases
- โขBuilding a product carousel or hero banner in a Next.js or Nuxt app where SSR needs to produce real markup, not a client-only mount.
- โขRendering a panel list that runs into the hundreds โ a media gallery or catalog grid โ where virtual scroll keeps the DOM from bloating.
- โขAdding a circular, infinite-loop carousel without hand-writing wrap-around logic yourself.
- โขSharing one carousel implementation across a React app and a Vue 3 app via the separate @egjs/react-flicking and @egjs/vue3-flicking packages instead of maintaining two.
- โขLayering effects like AutoPlay, Fade, or Parallax onto the base carousel through the @egjs/flicking-plugins package rather than writing custom animation code.
Who should try it โ and who should skip
Reach for egjs Flicking if you're building a carousel that needs circular looping, SSR in Next.js or Nuxt, or virtual rendering for a long panel list, and you want the same core across vanilla JS, React, and Vue 3 projects. Skip it if you need Angular support specifically โ the README's package table doesn't list a dedicated Angular wrapper โ or if a plain CSS scroll-snap carousel already covers a simple, small panel count without any of this machinery.
Related repositories
Is egjs-flicking worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of egjs-flicking.
