Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@reelkit/react-reel-player

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@reelkit/react-reel-player

Full-screen vertical-swipe video/image reel player for React, inspired by Instagram Reels and TikTok

Source
npmnpm
Version
0.3.1
Version published
Weekly downloads
146
82.5%
Maintainers
1
Weekly downloads
 
Created
Source

@reelkit/react-reel-player

npm Bundle size Coverage Star on GitHub

Drop-in Instagram Reels / TikTok-style video player for React. Opens as a full-screen overlay with vertical swipe navigation. Handles video autoplay, sound continuity on iOS, and multi-media posts. ~4.4 kB gzip.

Live Demo

Installation

npm install @reelkit/react-reel-player @reelkit/react lucide-react

Quick Start

import {
  ReelPlayerOverlay,
  type ContentItem,
} from '@reelkit/react-reel-player';
import '@reelkit/react-reel-player/styles.css';

const content: ContentItem[] = [
  {
    id: '1',
    media: [
      {
        id: 'v1',
        type: 'video',
        src: 'https://example.com/video.mp4',
        poster: 'https://example.com/poster.jpg',
        aspectRatio: 9 / 16,
      },
    ],
    author: { name: 'John Doe', avatar: 'https://example.com/avatar.jpg' },
    likes: 1234,
    description: 'Amazing video!',
  },
];

function App() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <>
      <button onClick={() => setIsOpen(true)}>Open Player</button>
      <ReelPlayerOverlay
        isOpen={isOpen}
        onClose={() => setIsOpen(false)}
        content={content}
      />
    </>
  );
}

Features

  • Vertical swipe navigation (touch, mouse, keyboard, wheel)
  • Video autoplay with sound toggle
  • Multi-media posts with horizontal nested slider
  • Instagram-style indicator dots
  • Keyboard navigation (Arrow keys, Escape)
  • Desktop navigation arrows
  • iOS sound continuity
  • Video position memory

API Reference

ReelPlayerOverlay

PropTypeDefaultDescription
isOpenbooleanrequiredControls overlay visibility
onClose() => voidrequiredCalled when player closes
contentContentItem[]requiredContent items to display
initialIndexnumber0Starting slide index
onSlideChange(index: number) => void-Callback after slide change
apiRefMutableRefObject<ReelApi>-Ref to access Reel API
loopbooleanfalseEnable infinite loop
enableNavKeysbooleantrueEnable keyboard navigation
enableWheelbooleantrueEnable mouse wheel navigation
wheelDebounceMsnumber200Wheel debounce duration (ms)
transitionDurationnumber300Transition duration (ms)
swipeDistanceFactornumber0.12Swipe threshold (0-1)

Types

interface ContentItem {
  id: string;
  media: MediaItem[];
  author: {
    name: string;
    avatar: string;
  };
  likes: number;
  description: string;
}

interface MediaItem {
  id: string;
  type: 'image' | 'video';
  src: string;
  poster?: string;
  aspectRatio: number; // width / height
}

type MediaType = 'image' | 'video';

Sound Context

import { SoundProvider, useSoundState } from '@reelkit/react-reel-player';

interface SoundState {
  muted: boolean;
  disabled: boolean;
  toggle: () => void;
  setMuted: (value: boolean) => void;
  setDisabled: (value: boolean) => void;
}

Re-exports from @reelkit/react

import {
  Reel,
  ReelIndicator,
  type ReelProps,
  type ReelApi,
  type ReelIndicatorProps,
} from '@reelkit/react-reel-player';

Examples

Single Video

{
  id: '1',
  media: [{
    id: 'v1',
    type: 'video',
    src: 'https://example.com/video.mp4',
    poster: 'https://example.com/thumb.jpg',
    aspectRatio: 9 / 16,
  }],
  author: { name: 'Creator', avatar: '...' },
  likes: 5000,
  description: 'Check this out!',
}

Multi-Media Post

{
  id: '2',
  media: [
    { id: 'img1', type: 'image', src: '...', aspectRatio: 4 / 5 },
    { id: 'v1', type: 'video', src: '...', poster: '...', aspectRatio: 9 / 16 },
    { id: 'img2', type: 'image', src: '...', aspectRatio: 1 },
  ],
  author: { name: 'Blogger', avatar: '...' },
  likes: 10000,
  description: 'My trip',
}
function Gallery() {
  const [isOpen, setIsOpen] = useState(false);
  const [index, setIndex] = useState(0);

  const open = (i: number) => {
    setIndex(i);
    setIsOpen(true);
  };

  return (
    <>
      {content.map((item, i) => (
        <div key={item.id} onClick={() => open(i)}>
          <img src={item.media[0].poster || item.media[0].src} />
        </div>
      ))}
      <ReelPlayerOverlay
        isOpen={isOpen}
        onClose={() => setIsOpen(false)}
        content={content}
        initialIndex={index}
      />
    </>
  );
}

Keyboard Shortcuts

KeyAction
ArrowUpPrevious slide
ArrowDownNext slide
ArrowLeftPrevious media (nested)
ArrowRightNext media (nested)
EscapeClose player

CSS Classes

ClassDescription
.rk-reel-overlayOverlay background
.rk-reel-containerPlayer container
.rk-reel-slide-wrapperSlide wrapper
.rk-player-nav-arrowsDesktop nav arrows container
.rk-player-nav-btnIndividual nav arrow button
.rk-player-close-btnClose button
.rk-player-sound-btnSound toggle
.rk-reel-slide-overlayPer-slide overlay (author, likes)
.rk-reel-slide-overlay-authorAuthor row
.rk-reel-slide-overlay-avatarAuthor avatar
.rk-reel-slide-overlay-nameAuthor name
.rk-reel-slide-overlay-descriptionSlide description
.rk-reel-slide-overlay-likesLike count
.rk-nested-slider-innerNested horizontal slider
.rk-nested-navNested nav arrows
.rk-nested-indicatorNested slider dot indicator
.rk-video-slide-containerVideo slide wrapper
.rk-video-slide-elementVideo element
.rk-video-slide-posterVideo poster image
.rk-video-slide-loaderVideo loading indicator

Documentation

Docs and interactive demos at reelkit.dev/docs/reel-player.

Support

If ReelKit saved you some time, a star on GitHub would mean a lot — it's a small thing, but it really helps the project get noticed.

Star on GitHub

License

MIT

Keywords

react

FAQs

Package last updated on 17 Apr 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts