Syntax
<track src="captions.vtt" kind="subtitles" srclang="en" label="English">Examples
Basic Captions
Adding English captions to a video.
<video controls>
<source src="tutorial.mp4" type="video/mp4">
<track src="captions-en.vtt" kind="captions" srclang="en" label="English" default>
</video>Multiple Language Subtitles
Offering subtitle tracks in more than one language.
<video controls>
<source src="movie.mp4" type="video/mp4">
<track src="subs-en.vtt" kind="subtitles" srclang="en" label="English" default>
<track src="subs-fr.vtt" kind="subtitles" srclang="fr" label="Français">
</video>Chapter Markers
Using track for chapter navigation instead of captions.
<video controls>
<source src="lecture.mp4" type="video/mp4">
<track src="chapters.vtt" kind="chapters" srclang="en" label="Chapters">
</video>Attributes
- src (URL): The URL of the WebVTT track file
- kind (subtitles | captions | chapters | descriptions): The type of timed text
- srclang (string): The language of the track content, as a language code
- label (string): A human-readable label shown in the track selection menu
- default (boolean): Marks this track as enabled by default
Best practices
- Always provide captions for video content with spoken dialogue — it is one of the most impactful accessibility improvements you can make
- Use kind="captions" (which includes non-speech sounds) rather than kind="subtitles" when the audience may be deaf or hard of hearing, not just non-native speakers
- Mark exactly one track as default per kind to avoid ambiguity
- Test that your WebVTT files are valid — malformed timing syntax will silently fail to display
Browser compatibility
Support applies to the named feature, not every attribute or behaviour in this article. Versions refer to browsers, not operating systems.
<track>
Desktop
- Chrome
- Supported
From 23 - Firefox
- Supported
From 31 - Safari
- Supported
From 6 - Edge
- Supported
From 12 - Opera
- Supported
From 12.1
Mobile
- Safari on iOS
- Supported
From 6 - Chrome for Android
- Supported
From 25 - Firefox for Android
- Supported
From 31 - Samsung Internet
- Supported
From 1.5
MDN BCD record for this feature · MDN reference
Support history and limitations
Chrome
- From 23
Firefox
- From 31
Safari
- From 6
Edge
- From 12
Opera
- From 12.1
Safari on iOS
- From 6
Chrome for Android
- From 25 · Doesn't work for fullscreen video.
Firefox for Android
- From 31
Samsung Internet
- From 1.5 · Doesn't work for fullscreen video.
<track> src
Desktop
- Chrome
- Supported
From 23 - Firefox
- Supported
From 50 - Safari
- Supported
From 6 - Edge
- Supported
From 12 - Opera
- Supported
From 12.1
Mobile
- Safari on iOS
- Supported
From 6 - Chrome for Android
- Supported
From 25 - Firefox for Android
- Supported
From 50 - Samsung Internet
- Supported
From 1.5
MDN BCD record for this feature
Support history and limitations
Chrome
- From 23
Firefox
- From 50
- From 31 · Removed in 50 · Last supported version: 49 · Partial implementation · Before Firefox 50, setting the src didn't work, though it didn't raise an error.
Safari
- From 6
Edge
- From 12
Opera
- From 12.1
Safari on iOS
- From 6
Chrome for Android
- From 25
Firefox for Android
- From 50
- From 31 · Removed in 50 · Last supported version: 49 · Partial implementation · Before Firefox for Android 50, setting the src didn't work, though it didn't raise an error.
Samsung Internet
- From 1.5
<track> kind
Desktop
- Chrome
- Supported
From 23 - Firefox
- Supported
From 31 - Safari
- Supported
From 6 - Edge
- Supported
From 12 - Opera
- Supported
From 12.1
Mobile
- Safari on iOS
- Supported
From 6 - Chrome for Android
- Supported
From 25 - Firefox for Android
- Supported
From 31 - Samsung Internet
- Supported
From 1.5
MDN BCD record for this feature
Support history and limitations
Chrome
- From 23
Firefox
- From 31
Safari
- From 6
Edge
- From 12
Opera
- From 12.1
Safari on iOS
- From 6
Chrome for Android
- From 25
Firefox for Android
- From 31
Samsung Internet
- From 1.5
<track> srclang
Desktop
- Chrome
- Supported
From 23 - Firefox
- Supported
From 31 - Safari
- Supported
From 6 - Edge
- Supported
From 12 - Opera
- Supported
From 12.1
Mobile
- Safari on iOS
- Supported
From 6 - Chrome for Android
- Supported
From 25 - Firefox for Android
- Supported
From 31 - Samsung Internet
- Supported
From 1.5
MDN BCD record for this feature
Support history and limitations
Chrome
- From 23
Firefox
- From 31
Safari
- From 6
Edge
- From 12
Opera
- From 12.1
Safari on iOS
- From 6
Chrome for Android
- From 25
Firefox for Android
- From 31
Samsung Internet
- From 1.5
<track> label
Desktop
- Chrome
- Supported
From 23 - Firefox
- Supported
From 31 - Safari
- Supported
From 6 - Edge
- Supported
From 12 - Opera
- Supported
From 12.1
Mobile
- Safari on iOS
- Supported
From 6 - Chrome for Android
- Supported
From 25 - Firefox for Android
- Supported
From 31 - Samsung Internet
- Supported
From 1.5
MDN BCD record for this feature
Support history and limitations
Chrome
- From 23
Firefox
- From 31
Safari
- From 6
Edge
- From 12
Opera
- From 12.1
Safari on iOS
- From 6
Chrome for Android
- From 25
Firefox for Android
- From 31
Samsung Internet
- From 1.5
<track> default
Desktop
- Chrome
- Supported
From 23 - Firefox
- Supported
From 31 - Safari
- Supported
From 6 - Edge
- Supported
From 12 - Opera
- Supported
From 12.1
Mobile
- Safari on iOS
- Supported
From 6 - Chrome for Android
- Supported
From 25 - Firefox for Android
- Supported
From 31 - Samsung Internet
- Supported
From 1.5
MDN BCD record for this feature
Support history and limitations
Chrome
- From 23
Firefox
- From 31
Safari
- From 6
Edge
- From 12
Opera
- From 12.1
Safari on iOS
- From 6
Chrome for Android
- From 25
Firefox for Android
- From 31
Samsung Internet
- From 1.5
MDN BCD 8.1.5 · Dataset built 2026-10-08 · Mapping reviewed 2026-10-21. These dates are not individual browser-test or claim-verification dates. Unknown means the data does not establish support.