npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@sigx/lynx-video

v0.13.0

Published

Native video player component for sigx-lynx (AVPlayer on iOS, ExoPlayer on Android).

Downloads

1,873

Readme

@sigx/lynx-video

Native video player component for sigx-lynx. iOS uses AVPlayer + AVPlayerLayer; Android uses androidx.media3 (ExoPlayer + PlayerView).

📚 Documentation

Full guides, API reference and live examples → https://sigx.dev/lynx/modules/video/overview/

Registers a <video-player> JSX intrinsic that participates in Lynx's layout tree. The typed <VideoPlayer> wrapper is the recommended entry point.

Install

pnpm add @sigx/lynx-video

sigx prebuild auto-discovers the package, registers the <video-player> UI element on both platforms, and pulls in the media3 Gradle deps on Android.

Usage

import { VideoPlayer } from '@sigx/lynx-video';

function ClipScreen() {
    return () => (
        <VideoPlayer
            src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
            autoplay
            controls
            resizeMode="contain"
            onLoad={(e) => console.log('loaded', e.detail.durationMs)}
            onEnd={() => console.log('done')}
            onError={(e) => console.warn(e.detail.message)}
            style={{ width: '100%', aspectRatio: 16 / 9 }}
        />
    );
}

API

<VideoPlayer> props

| Prop | Type | Notes | | ------------- | ------------------------------------- | ------------------------------------------------------ | | src | string | URL or file:// URI. Setting reloads the player. | | poster | string? | Image to display before the first frame. | | autoplay | boolean? | Begin playback as soon as the asset is ready. | | playing | boolean? | Drive play/pause declaratively. Re-renders flip state. | | loop | boolean? | Restart automatically at end-of-clip. | | muted | boolean? | Mute audio output. | | volume | number? | 0..1. Independent of muted. | | controls | boolean? | Show platform-default playback controls. | | resizeMode | 'contain' \| 'cover' \| 'stretch' | Default 'contain'. | | startTime | number? | One-shot initial seek (seconds) before the first play. | | onLoad | (e) => void | detail: { durationMs, width, height } | | onEnd | (e) => void | Playback reached end of clip. | | onError | (e) => void | detail: { message } | | onTimeUpdate| (e) => void | ~4×/sec. detail: { positionMs } | | onStateChange| (e) => void | detail: { state, positionMs }state is 'playing' \| 'paused' \| 'buffering' \| 'ended'. Catches system/OS-driven pauses the playing prop can't. |

Gotchas

  • Imperative methods (seek(s), getStatus()) are tracked as a v2 follow-up — they need Lynx's UIMethodInvoker surface, which isn't wired through sigx-lynx yet (same blocker that WebView.goBack and Map.animateToRegion are waiting on). For now, drive the player declaratively via playing / src props.
  • App Transport Security (iOS) — playing an http:// (non-HTTPS) URL requires an NSAppTransportSecurity exception in your app's Info.plist. The package itself does not relax ATS.
  • Android media3 versions — pinned to 1.4.1. If your app already depends on a different media3 version, align it via Gradle resolution to avoid duplicate-class errors.
  • AudioSession (iOS) — when playing audio-bearing video, this component sets AVAudioSession to .playback. Apps that also use @sigx/lynx-audio get a separate session ref-count.