OPEN SOURCE BOILERPLATE

    Build a TikTok-Style Feed
    in React Native

    A high-performance vertical video feed for React Native & Expo.
    Built on React Native Video v7 and LegendList. Smart preloading, HLS playback, platform-tuned UX.

    OPEN SOURCEreact-native-video-feed on GitHub
    NEW100+ stars on GitHub
    MITFree for commercial use

    Production-Ready Patterns. Not a Prototype.

    We've solved the hard parts of HLS playback and list virtualization so you can focus on your product.

    HLS & Video v7

    Real HLS Streams
    Built for .m3u8 manifests. Plug in your CDN or ad-stitched URLs without reworking player logic.
    v7 API First
    Uses useVideoPlayer, replaceSourceAsync(), and preload() — the latest React Native Video APIs.
    iOS & Android
    Platform-tuned configurations. One codebase, native-quality playback on both platforms.

    Smart Virtualization

    LegendList Integration
    Efficient component recycling that actually stays performant on Android — solving the issues that plague FlatList and FlashList.
    Asymmetric Preloading
    1 video behind, 3-5 ahead. Lightweight placeholders outside the window to minimize memory usage.
    Visibility Logic
    Videos trigger at 30% viewport visibility. No ghost audio from off-screen items.

    Built-in Dev Metrics

    TTFF Tracking
    Time to First Frame measured from preload start to readyToPlay — plus Perceived TTFF from visibility.
    FPS & Scroll Lag
    Real FPS via requestAnimationFrame. Scroll responsiveness measured on every drag.
    Performance Monitor
    Built-in overlay shows all metrics live. Export data. Clear results. Iterate fast.

    Measure What Matters

    Every millisecond counts in a video feed. The built-in performance monitor tracks the metrics that matter — so you can benchmark, optimize, and ship with confidence.

    ~19ms
    Time to First Frame
    ~0-5ms
    Perceived TTFF
    ~55 fps
    FPS Stability
    ~5ms
    Preload Effectiveness
    View Performance Research

    Performance Dashboard

    MetricValueStatus
    TTFF~19ms● Excellent
    Perceived TTFF~0-5ms● Excellent
    FPS Stability~55 fps● Good
    Memory UsageOptimized● Excellent
    Scroll Lag<5ms● Excellent
    Preload Effectiveness~5ms● Excellent

    One Swipe. One Video. Native Feel.

    Tuned snapToInterval and platform-specific deceleration rates. Tap to pause. Overlay controls. The scroll behavior developers expect but rarely get right.

    snapToInterval

    One-video-per-swipe paging with tuned momentum

    decelerationRate

    0.98 Android / 0.95 iOS for native feel

    disableIntervalMomentum

    Prevents over-scrolling, consistent behavior

    Feed Extensions

    The boilerplate is designed for you to break and extend. Here's what's possible — and what TWG can build for you.

    View FEED_EXTENSIONS.md

    Ads & Monetization

    COMMERCIAL
    Dynamic Ad Insertion (DAI) — server-side HLS stitching
    Standalone video ads with skip buttons
    VAST/VMAP tracking integration
    Scroll blocking until ad completion

    Tracking & Analytics

    COMMERCIAL
    Viewability metrics (time in view, thresholds)
    Engagement tracking (play/pause, seek, completion)
    Feed behavior (scroll direction, swipes, skip rates)
    Deep scroll-away and retention analytics

    Caching & Offline

    COMMERCIAL
    HLS segment caching (.m3u8 + .ts)
    Native player cache (AVPlayer, ExoPlayer)
    Offline playback support
    LRU eviction, max size, TTL policies

    Mixed Content

    Photos, GIFs, forms, CTAs in the feed

    UI Customization

    Seek preview, custom seekbar, category tabs

    Reverse Proxy / CDN

    Manifest proxy, geo-routing, A/B testing

    CUSTOM NATIVE DEVELOPMENT

    When You Need More Than a Library

    react-native-video covers 90% of use cases. For the remaining 10% — where you need full native control, custom player architectures, or platform-specific optimizations — we build it for you.

    CUSTOM DEV

    Player Pool & Memory Management

    When your feed runs 50+ videos and Android's ExoPlayer limit hits. Custom player pooling, lazy creation at visibility thresholds, and aggressive memory reclamation — tuned to your specific device matrix.

    Player Pooling

    Reuse ExoPlayer/AVPlayer instances instead of creating new ones. Rotate a fixed pool (e.g. 3-5 players) across your feed.

    Lazy Player Creation

    Create expensive native player components only when items reach visibility threshold (e.g. 75% on screen). Teams running feeds with 50+ videos reduced jank from 24% to 3% with this approach.

    Memory Pressure Handling

    Automatic player destruction when memory warnings fire. Platform-specific limits (Android is much more constrained than iOS).

    CUSTOM DEV

    Autoplay & Preload Orchestration

    When preload() isn't enough and you need sub-100ms autoplay times. Backend-coordinated loading priorities, MP4 thumbnail pre-warming, and split-phase resource loading.

    Prioritized Loading

    Split network requests — load visible content first, then background-load everything else. GraphQL query splitting for video metadata.

    MP4 Thumbnail Strategy

    Backend generates lightweight MP4 thumbnails for instant visual feedback while HLS manifest loads. This approach has cut autoplay time by 50% in production feeds.

    Player Pre-warming

    Create and configure native players before they're needed. Pre-load codec, configure surface — so when the view appears, playback is instant.

    CUSTOM DEV

    Custom Fabric Video Components

    When you need a video component built specifically for your domain — your analytics, your state model, your native platform quirks. No abstractions you don't need.

    Domain-Specific Metrics

    Custom autoplay time tracking, jank rate measurement, viewability thresholds tied to your business KPIs — not generic player events.

    Backend-Client State Sync

    When your SDUI backend needs tight integration with player state. Video lifecycle managed by your rendering engine, not a third-party abstraction.

    Stripped-Down Native Wrapper

    No DRM, no background playback, no features you don't use. A Fabric component that does exactly what you need and nothing else — minimal surface area, maximum performance.

    "At scale, some problems require native-level solutions. When your feed runs dozens of concurrent videos, you need engineers who understand both the library and the platform to build custom player architectures, memory management, and autoplay orchestration tailored to your specific constraints."

    Developers Are Building With It

    ❤️ 327 Likes🔁 31 Reposts🔖 305 Bookmarks👁 20,500+ Views

    "We're open-sourcing a react-native-video-feed Boilerplate for React Native and Expo. It's not a 'plug-and-play' miracle, but it's a high-performance foundation built on React Native Video v7 and @legendapp/list that handles the heavy lifting for you."

    "Man, this is awesome. I guess I'll have to try using this in the next version of this reels app I'm building"

    Gr1ntch
    @Gr1ntchDotDev
    Mobile & Web Engineer

    "this is dope, can't wait to check it out!"

    foundrceo
    @foundrceo
    App Builder

    "nice work!"

    Daniel Williams
    @Danny_H_W
    Senior Developer at Callstack, React Native Storybook Maintainer

    Technical Stack

    react-native-video
    vv7.0.0-beta.2
    Core player — useVideoPlayer, VideoView, preload(), replaceSourceAsync()
    @legendapp/list
    vlatest
    Virtualized list with component recycling
    Expo
    v~52
    Build and development platform
    React Native
    v0.76.9
    Cross-platform mobile framework
    TypeScript
    v86.2%
    Primary language
    MIT LicenseiOS + AndroidSingle CodebaseExpo Compatible

    Get Started in Minutes

    terminal
    $ git clone https://github.com/TheWidlarzGroup/react-native-video-feed.git
    $ bun install
    $ bun run ios # or: bun run android

    Platform-Tuned Configuration

    Android
    PRELOAD_AHEAD = 3
    PRELOAD_BEHIND = 1
    DRAW_DISTANCE = 2x item height
    SCROLL_THROTTLE = 32ms
    DECELERATION_RATE = 0.98
    CYCLE_COUNT = 10 (100 videos)
    iOS
    PRELOAD_AHEAD = 5
    PRELOAD_BEHIND = 1
    DRAW_DISTANCE = 3x item height
    SCROLL_THROTTLE = 16ms
    DECELERATION_RATE = 0.95
    CYCLE_COUNT = 20 (200 videos)

    Every parameter is tuned per-platform. Android gets tighter preload windows and higher scroll throttle to protect the JS bridge. iOS gets wider preload windows and smoother scroll events.

    Frequently Asked

    Commercial Support Available

    Need a Custom
    Video Feed?

    From ads and analytics to offline playback and mixed content — we build production-grade video feed features. Straight to the point. No audits. We build.

    No credit card requiredEngineers, not chatbotsShipped in apps with millions of users