react-image-gallery vs react-image-lightbox vs react-images vs react-photo-gallery
React Image Gallery Libraries
react-image-galleryreact-image-lightboxreact-imagesreact-photo-gallery

React Image Gallery Libraries

React image gallery libraries provide developers with tools to easily create responsive and interactive image galleries in their applications. These libraries offer various features such as lightboxes, thumbnails, and customizable layouts, enhancing the user experience by allowing users to view images in a visually appealing manner. They are designed to integrate seamlessly with React applications, leveraging React's component-based architecture for efficient rendering and state management.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
react-image-gallery03,932123 kB220 days agoMIT
react-image-lightbox01,280-05 years agoMIT
react-images02,346-505 years agoMIT
react-photo-gallery02,010-807 years agoMIT

Feature Comparison: react-image-gallery vs react-image-lightbox vs react-images vs react-photo-gallery

Gallery Structure

  • react-image-gallery:

    react-image-gallery provides a structured gallery layout with support for thumbnails, fullscreen mode, and autoplay features. It allows for easy navigation between images and can handle various media types, making it versatile for different use cases.

  • react-image-lightbox:

    react-image-lightbox focuses on a lightbox experience, allowing users to view images in a modal with navigation controls. It is designed for simplicity and ease of use, providing a clean interface for image viewing without additional gallery features.

  • react-images:

    react-images offers a flexible structure that allows developers to customize the layout and presentation of images. It supports various viewing options, including captions and zoom functionalities, making it suitable for diverse applications.

  • react-photo-gallery:

    react-photo-gallery is built around a grid layout, allowing for responsive design and easy arrangement of images. It is optimized for displaying multiple images in a visually appealing manner, making it ideal for portfolios and galleries.

Customization Options

  • react-image-gallery:

    react-image-gallery offers extensive customization options, including custom renderers for thumbnails and image components, allowing developers to tailor the gallery to their specific design needs.

  • react-image-lightbox:

    react-image-lightbox provides limited customization, focusing on a straightforward lightbox experience. It allows for basic styling but is primarily designed for quick implementation without extensive modifications.

  • react-images:

    react-images is highly customizable, allowing developers to define their own styles and behaviors for image viewing. It supports various props for fine-tuning the user experience, making it adaptable to different project requirements.

  • react-photo-gallery:

    react-photo-gallery allows for customization of the grid layout and image rendering. Developers can define the number of columns and how images are displayed, providing flexibility in design.

Performance

  • react-image-gallery:

    react-image-gallery is optimized for performance, utilizing lazy loading for images to improve load times and reduce memory usage, especially in galleries with many images.

  • react-image-lightbox:

    react-image-lightbox is lightweight and performs well for single image viewing, but may not be as efficient for galleries with many images due to its focus on modal presentation.

  • react-images:

    react-images is designed for performance with features like lazy loading and efficient rendering, ensuring smooth transitions and quick loading times for images.

  • react-photo-gallery:

    react-photo-gallery is optimized for displaying multiple images in a grid format, ensuring that performance remains high even with a large number of images.

User Experience

  • react-image-gallery:

    react-image-gallery enhances user experience with features like keyboard navigation, swipe gestures, and autoplay, making it easy for users to interact with the gallery.

  • react-image-lightbox:

    react-image-lightbox provides a smooth user experience with intuitive navigation controls and zoom functionality, allowing users to focus on individual images without distractions.

  • react-images:

    react-images focuses on providing a rich user experience with customizable captions and zoom options, making it suitable for applications that require detailed image viewing.

  • react-photo-gallery:

    react-photo-gallery enhances user experience by providing a responsive grid layout that adapts to different screen sizes, ensuring that images are displayed beautifully on all devices.

Learning Curve

  • react-image-gallery:

    react-image-gallery has a moderate learning curve, as it requires understanding of its API and customization options, but is generally straightforward for developers familiar with React.

  • react-image-lightbox:

    react-image-lightbox is easy to implement and has a low learning curve, making it suitable for developers looking for a quick solution for image viewing.

  • react-images:

    react-images has a moderate learning curve due to its flexibility and customization options, but is manageable for developers with React experience.

  • react-photo-gallery:

    react-photo-gallery is relatively easy to learn, especially for developers familiar with grid layouts, making it accessible for quick implementation.

How to Choose: react-image-gallery vs react-image-lightbox vs react-images vs react-photo-gallery

  • react-image-gallery:

    Choose react-image-gallery if you need a comprehensive solution for creating a responsive image gallery with features like thumbnails, fullscreen mode, and keyboard navigation. It is ideal for projects that require a straightforward gallery implementation with customization options.

  • react-image-lightbox:

    Select react-image-lightbox if you want a lightweight and simple solution for displaying images in a lightbox format. It is perfect for projects where you want to focus on a single image view with zoom and navigation capabilities, without the need for a full gallery setup.

  • react-images:

    Opt for react-images if you require a flexible and customizable image viewer that supports various layouts and features like captions, zooming, and fullscreen support. It is suitable for applications that need a more tailored image viewing experience with advanced functionalities.

  • react-photo-gallery:

    Use react-photo-gallery if you are looking for a grid layout for your images with responsive design. It is best for projects that need to display a large number of images in a structured format, allowing for easy customization of the gallery layout.

README for react-image-gallery

React Image Gallery

A responsive, customizable image gallery component for React


npm version Download Count Bundle size CI TypeScript License: MIT


▶️ VIEW LIVE DEMO


React Image Gallery Demo


✨ Features

FeatureDescription
📱 Mobile SwipeNative touch gestures for smooth mobile navigation
🖼️ ThumbnailsCustomizable thumbnail navigation with multiple positions
📺 FullscreenBrowser fullscreen or CSS-based fullscreen modes
🎨 ThemingCSS custom properties for easy styling
⌨️ Keyboard NavArrow keys, escape, and custom key bindings
🔄 RTL SupportRight-to-left language support
↕️ Vertical ModeSlide vertically instead of horizontally
🎬 Custom SlidesRender videos, iframes, or any custom content

🚀 Getting Started

npm install react-image-gallery
import { useRef } from "react";
import ImageGallery from "react-image-gallery";
import "react-image-gallery/styles/image-gallery.css";
import type { GalleryItem, ImageGalleryRef } from "react-image-gallery";

const images: GalleryItem[] = [
  {
    original: "https://picsum.photos/id/1018/1000/600/",
    thumbnail: "https://picsum.photos/id/1018/250/150/",
  },
  {
    original: "https://picsum.photos/id/1015/1000/600/",
    thumbnail: "https://picsum.photos/id/1015/250/150/",
  },
  {
    original: "https://picsum.photos/id/1019/1000/600/",
    thumbnail: "https://picsum.photos/id/1019/250/150/",
  },
];

function MyGallery() {
  const galleryRef = useRef<ImageGalleryRef>(null);

  return (
    <ImageGallery
      ref={galleryRef}
      items={images}
      onSlide={(index) => console.log("Slid to", index)}
    />
  );
}

For more examples, see example/App.jsx


⚙️ Props

  • items: (required) Array of objects. Available properties:
    • original - image source URL
    • thumbnail - thumbnail source URL
    • fullscreen - fullscreen image URL (defaults to original)
    • originalHeight - image height (html5 attribute)
    • originalWidth - image width (html5 attribute)
    • loading - "lazy" or "eager" (HTML5 attribute)
    • thumbnailHeight - image height (html5 attribute)
    • thumbnailWidth - image width (html5 attribute)
    • thumbnailLoading - "lazy" or "eager" (HTML5 attribute)
    • originalClass - custom image class
    • thumbnailClass - custom thumbnail class
    • renderItem - Function for custom rendering a specific slide (see renderItem below)
    • renderThumbInner - Function for custom thumbnail renderer (see renderThumbInner below)
    • originalAlt - image alt
    • thumbnailAlt - thumbnail image alt
    • originalTitle - image title
    • thumbnailTitle - thumbnail image title
    • thumbnailLabel - label for thumbnail
    • description - description for image
    • srcSet - image srcset (html5 attribute)
    • sizes - image sizes (html5 attribute)
    • bulletClass - extra class for the bullet of the item
  • infinite: Boolean, default true - loop infinitely
  • lazyLoad: Boolean, default false
  • showNav: Boolean, default true
  • showThumbnails: Boolean, default true
  • thumbnailPosition: String, default bottom - options: top, right, bottom, left
  • showFullscreenButton: Boolean, default true
  • useBrowserFullscreen: Boolean, default true - if false, uses CSS-based fullscreen
  • useTranslate3D: Boolean, default true - if false, uses translate instead of translate3d
  • showPlayButton: Boolean, default true
  • isRTL: Boolean, default false - right-to-left mode
  • showBullets: Boolean, default false
  • maxBullets: Number, default undefined - max bullets shown (minimum 3, active bullet stays centered)
  • showIndex: Boolean, default false
  • autoPlay: Boolean, default false
  • disableThumbnailScroll: Boolean, default false - disable thumbnail auto-scroll
  • disableKeyDown: Boolean, default false - disable keyboard navigation
  • disableSwipe: Boolean, default false
  • disableThumbnailSwipe: Boolean, default false
  • onErrorImageURL: String, default undefined - fallback image URL for failed loads
  • indexSeparator: String, default ' / ', ignored if showIndex is false
  • slideDuration: Number, default 550 - slide transition duration (ms)
  • swipingTransitionDuration: Number, default 0 - transition duration while swiping (ms)
  • slideInterval: Number, default 3000
  • slideOnThumbnailOver: Boolean, default false
  • slideVertically: Boolean, default false - slide vertically instead of horizontally
  • flickThreshold: Number, default 0.4 - swipe velocity threshold (lower = more sensitive)
  • swipeThreshold: Number, default 30 - percentage of slide width needed to trigger navigation
  • stopPropagation: Boolean, default false - call stopPropagation on swipe events
  • startIndex: Number, default 0
  • onImageError: Function, callback(event) - overrides onErrorImageURL
  • onThumbnailError: Function, callback(event) - overrides onErrorImageURL
  • onThumbnailClick: Function, callback(event, index)
  • onBulletClick: Function, callback(event, index)
  • onImageLoad: Function, callback(event)
  • onSlide: Function, callback(currentIndex)
  • onBeforeSlide: Function, callback(nextIndex)
  • onScreenChange: Function, callback(isFullscreen)
  • onPause: Function, callback(currentIndex)
  • onPlay: Function, callback(currentIndex)
  • onClick: Function, callback(event)
  • onTouchMove: Function, callback(event) on gallery slide
  • onTouchEnd: Function, callback(event) on gallery slide
  • onTouchStart: Function, callback(event) on gallery slide
  • onMouseOver: Function, callback(event) on gallery slide
  • onMouseLeave: Function, callback(event) on gallery slide
  • additionalClass: String, additional class for the root node
  • renderCustomControls: Function, render custom controls on the current slide
  • renderItem: Function, custom slide rendering
  • renderThumbInner: Function, custom thumbnail rendering
  • renderLeftNav: Function, custom left nav component
  • renderRightNav: Function, custom right nav component
  • renderTopNav: Function, custom top nav component (vertical mode)
  • renderBottomNav: Function, custom bottom nav component (vertical mode)
  • renderPlayPauseButton: Function, custom play/pause button
  • renderFullscreenButton: Function, custom fullscreen button
  • useWindowKeyDown: Boolean, default true - use window or element for key events

🔧 Functions

The following functions can be accessed using refs

  • play(): starts the slideshow
  • pause(): pauses the slideshow
  • togglePlay(): toggles between play and pause
  • fullScreen(): enters fullscreen mode
  • exitFullScreen(): exits fullscreen mode
  • toggleFullScreen(): toggles fullscreen mode
  • slideToIndex(index): slides to a specific index
  • getCurrentIndex(): returns the current index

🤝 Contributing

Pull requests should be focused on a single issue. If you're unsure whether a change is useful or involves a major modification, please open an issue first.

  • Follow the eslint config
  • Comment your code

🛠️ Build the example locally

Requires Node.js >= 18.18

git clone https://github.com/xiaolin/react-image-gallery.git
cd react-image-gallery
npm install
npm start

Then open localhost:8001 in a browser.


📄 License

MIT © Xiao Lin