Giovambattista Fazioli

Mantine Video v1.0 — a Mantine-native video player with compound API + headless hook

Hey everyone 👋 Just shipped Mantine Video v1.0 — a complete video element replacement built specifically for the Mantine ecosystem.

Image

It's part of the Mantine Extensions Hub family of components.

The idea was simple: every Mantine app I built ended up wrapping the native HTML video element with the same boilerplate — custom controls, theme-aware styling, fullscreen, Picture-in-Picture, captions, keyboard shortcuts.

So I packaged the whole stack into one component that ships in three layers, layered from "drop-in" to "fully custom":

🎬 The default Video component — a polished player with four built-in variants (overlay, minimal, floating, bordered).

🧩 A composable Compound API — nine sub-components you can reorder, replace or restyle: Video.Controls, Video.PlayButton, Video.SkipButton, Video.Timeline, Video.TimeDisplay, Video.MuteButton, Video.CaptionsButton, Video.PiPButton, Video.FullscreenButton.

🪝 A fully headless useVideo hook — 16 state values plus 16 actions, for when you want to drive a 100% custom UI on top of a plain video ref.

Highlights

  • Picture-in-Picture with lifecycle callbacks (onEnterPictureInPicture / onLeavePictureInPicture)

  • Fullscreen, captions via native track element, keyboard shortcuts (Space/K, J/L, arrow keys, M, F, P)

  • Live timeline scrubbing — drag the thumb and the frame updates in real time, YouTube-style

  • asBackground prop — turn the same player into a hero / section background in one line, complete with a discreet floating mute toggle

  • Full Mantine Styles API (classNames, styles, vars, unstyled) on every part — theme-aware out of the box

  • TypeScript-first, MIT, zero hidden runtime dependencies

Targets Mantine 9 and React 19.

🎥 Live demos & docs → https://gfazioli.github.io/mantine-video

📦 npm → https://www.npmjs.com/package/@gfazioli/mantine-video

🔗 GitHub → https://github.com/gfazioli/mantine-video

🌐 All Mantine Extensions → https://mantine-extensions.vercel.app/

Happy to hear feedback — especially around the compound API surface and the headless hook ergonomics.

What use cases would you like to see covered next? Live streaming? HLS adaptive bitrate? Multiple source children for codec fallbacks (already cooking — see GitHub issue #1 on the repo).

4 views

Add a comment

Replies

Be the first to comment