Web Component Installation Guide
Instructions to get your player installed and on-screen using Web Components.
1. Select FrameworkSection titled 1. Select Framework
We also ship JSX types to make sure you have complete TypeScript support for props and events! In addition, we don’t use Shadow DOM so it will work with SSR-frameworks like SvelteKit.
We also ship JSX types to make sure you have complete TypeScript support for props and events! In addition, we don’t use Shadow DOM so it will work with SSR-frameworks like Nuxt.
We also ship JSX types to make sure you have complete TypeScript support for props and events! In addition, we don’t use Shadow DOM so it will work with SSR-frameworks like SolidStart.
We provide a CDN bundle that includes all package dependencies, and it’s specially minified to get
the bundle size as small as possible. Add a few
<style> tags to your
and you’re ready to start building!
2. Select BundlerSection titled 2. Select Bundler
3. Select ProviderSection titled 3. Select Provider
You can use this provider to build an audio player. This provider uses the native
element to support audio codecs such as AAC, MP3, FLAC, etc.
Do note, the type of audio codec supported is completely dependent on the browser so use the prior link as reference to see what’s supported.
You can use this provider to build a video player. This provider uses the native
<video> element to support video codecs such as AV1, AVC (H.264), VP9, etc.
Do note, the type of video codec supported is completely dependent on the browser so use the prior link as reference to see what’s supported.
Embed video content into documents via the native video element. This provider enables streaming video using the HTTP Live Streaming (HLS) protocol.
Remotion enables creating complex animations and videos programatically using React. You can use this provider to embed, preview, and play dynamic React components that are using Remotion. You can also provide the rendered MP4 directly to the player in production (see the video provider).
4. Select StylingSection titled 4. Select Styling
The CSS option provides you with a minimal starting point and completely unstyled components. All components including the player itself provide styling hooks via data attributes and support animations.
This option is best when you want to build your player yourself from scratch using vanilla CSS.
The Default Theme is best when you want to build your own player but you don’t want to design each component from zero. Our default styles have been built to be extremely easy to customize! We provide the shell and base styles and you provide the content and customization.
The Default Layout is our production-ready UI. If you’re looking for something pre-designed and ready out of the box then this is the best option. You can easily customize the icons, branding, colors, and components to your liking.
The Tailwind option provides you with a minimal starting point and completely unstyled components. All components including the player itself provide styling hooks via data attributes and support animations.
Our optional plugin can help speed you up even more by providing you with easy to
use media variants such as
5. Check SupportSection titled 5. Check Support
Ensure the following browser support table is suitable for your application. We’ve built the library for the modern web; thus, we try to avoid bloated polyfills and outdated environments as much as possible. At the moment, we only support browsers that fully implement the Custom Elements V1 spec.
We support at minimum ~94.18% of users tracked on caniuse.
6. Install PackagesSection titled 6. Install Packages
7. Setup BundlerSection titled 7. Setup Bundler
You can skip this step since you're not using a bundler.
8. Import LibrarySection titled 8. Import Library
The following imports will include the required CSS styles and variables:
The following imports will register all custom media elements (e.g.,
<media-player>) and import global TypeScript types:
9. Player MarkupSection titled 9. Player Markup
10. Poster (Optional)Section titled 10. Poster (Optional)
See the Poster component for how to display an image while video content is loading, or until the user hits play. If this is not included, the first frame of the video will be used instead.
11. Playsinline (Optional)Section titled 11. Playsinline (Optional)
playsinline property will indicate that video content should be played inline (on mobile only),
rather than launching the video in fullscreen mode on play. In addition, setting this property
will also ensure custom player UI is displayed on iPhone when playing
inline (hidden in fullscreen mode as native controls are forcefully displayed by the browser).
Important to note, we normalize the playing inline behaviour across all mobile browsers. If you
do not set
playsinline, the video will launch in fullscreen on play in all mobile browsers, not
just iOS Safari where the attribute is accepted.
12. Visual Studio (Optional)Section titled 12. Visual Studio (Optional)
This step is optional. VS Code (VSC) provides support for extending the known HTML entities through VSC Custom Data. Once set up, it enables autocomplete suggestions for custom player elements and on-hover information such as documentation and type data.
- Create the VSC settings file at the root of your project directory:
- Add the custom HTML data file path to
html.customDatainside the newly created settings file:
13. Media Icons (Optional)Section titled 13. Media Icons (Optional)
You can skip this step since you're using the Default Layout.
This step is optional. Media Icons is a collection of icons we’ve designed at Vidstack to help with building audio and video player user interfaces. You can preview the entire collection in our media icons catalog.
- First, install the
- Import them like so:
- Finally, you can start using them like so:
14. Keep Alive (Optional)Section titled 14. Keep Alive (Optional)
By default, the player and all components will destroy themselves if they’re removed from the
DOM and not reattached after an animation frame tick (i.e.,
requestAnimationFrame). If you or
your router are moving player components around the DOM for unknown amounts of time, consider
keeping the player and all children alive, and manually destroying all component instances.
keep-alive attribute can be set on any media element, not just the player. Important to note
that it’s forwarded to all children. Any root component with
keep-alive must be destroyed
by calling the
destroy() method on the element instance as shown above.
15. ExamplesSection titled 15. Examples
You should be all set up by this point. We recommend exploring our 👉 examples to learn how to start building and customizing your player. You can also use the examples to make sure you’ve set everything up correctly.
16. Next StepsSection titled 16. Next Steps
From here you’re free to explore the library.
- Scan over the remaining docs pages to get a good overview of how the library works.
- Explore the API and Components references.
- Check out the Default Layout customization guide if you’re using it.
- See the Tailwind Plugin if you’re using Tailwind CSS.
Lastly, remember you’re not alone. You can reach out for help or to talk with other developers using Vidstack: