Starting from version 2.0.0, this package works with Vue 3.
Using npm:
npm install @kinescope/vue-kinescope-player --saveUsing yarn:
yarn add @kinescope/vue-kinescope-playerYou can either import it in your whole project
import KinescopePlayer from "@kinescope/vue-kinescope-player";
import { createApp } from "vue";
const app = createApp(App);
app.use(KinescopePlayer);
app.mount("#app");or import it locally in a component
import { KinescopePlayer } from "@kinescope/vue-kinescope-player";
export default {
components: { KinescopePlayer },
};<!-- events -->
<template>
<kinescope-player
:video-id="200702846"
@ready="handleReady"
@play="handlePlay"
></kinescope-player>
</template><!-- methods -->
<template>
<div>
<kinescope-player
ref="kinescope"
:video-id="200702846"
@ready="handleReady"
></kinescope-player>
<button @click="handleClick" :disabled="!ready">Play</button>
</div>
</template>
<script>
import { ref } from "vue";
import { KinescopePlayer } from "@kinescope/vue-kinescope-player";
export default {
components: { KinescopePlayer },
setup() {
const ready = ref(false);
const kinescope = ref(null);
const handleReady = () => {
ready.value = true;
};
const handleClick = () => {
kinescope.value.player.play();
};
return {
ready,
kinescope,
handleReady,
handleClick,
};
},
};
</script>| Prop | Type | Default | Description | Required |
|---|---|---|---|---|
| video-id | Number, String | - | Video id from app.kinescope.io | Yes |
| width | Number, String | 100% | Player width | No |
| height | Number, String | 100% | Player height | No |
| external-id | String | - | External user ID passed to Kinescope analytics | No |
| Prop | Type | Default | Description | Required |
|---|---|---|---|---|
| auto-play | Boolean, String | false | Autostart playback. 'viewable' — start when player enters viewport, 'hover' — play while cursor is over player |
No |
| muted | Boolean | false | Start video muted | No |
| loop | Boolean | false | Loop the video | No |
| plays-inline | Boolean | true | Play inline on mobile without auto-entering fullscreen | No |
| volume | Number | - | Initial volume level (0–1). Reactive: updates volume without reloading the player | No |
| playback-rate | Number | - | Initial playback rate (1 = normal). Reactive: updates speed without reloading the player | No |
| text-track | Boolean, String | - | Enable subtitles on load. Pass true for default or a language code e.g. 'ru' |
No |
| Prop | Type | Default | Description | Required |
|---|---|---|---|---|
| language | String | en | Player UI language | No |
| controls | Boolean | true | Show all player controls. When false, hides everything including title and control bar |
No |
| title | Boolean | true | Show video title overlay | No |
| control-bar | Boolean, String | true | Show bottom control bar. 'always' — keep visible even during playback |
No |
| progress-bar | Boolean | true | Show progress / seek bar | No |
| main-play-button | Boolean | true | Show the large center play button | No |
| play-button | Boolean | true | Show play/pause button in the control bar | No |
| volume-button | Boolean | true | Show volume button in the control bar | No |
| playback-rate-button | Boolean | false | Show playback rate button in the control bar | No |
| playback-rates | Array, Boolean | - | Available playback rates list e.g. [0.5, 1, 1.5, 2]. false hides the button |
No |
| subtitles-button | Boolean | true | Show subtitles (CC) button in the control bar | No |
| settings-button | Boolean | true | Show settings button in the control bar | No |
| pip-button | Boolean | true | Show Picture-in-Picture button in the control bar | No |
| fullscreen-button | Boolean, String | true | Show fullscreen button. 'force' — always show even if fullscreen API is unavailable |
No |
| video-fit | String | contain | How video fits the player container: 'contain' | 'cover' | 'fill' |
No |
| watermark | String, Object | - |
Watermark displayed over the video. Pass a string as shorthand or a full options object:{ text: string, mode?: 'random' | 'stripes', scale?: number, displayTimeout?: number | { visible: number, hidden: number } }Reactive: changing this prop updates the watermark without reloading the player. |
No |
| Event | Data |
|---|---|
| js-load | No |
| js-load-error | No |
| ready |
currentTime: number duration: number quality: string | number qualityLevels: {} |
| quality-changed | quality: string | number |
| auto-quality-changed | quality: string | number |
| seek-chapter | position: number |
| size-changed |
width: number height: number |
| play | No |
| playing | No |
| waiting | No |
| pause | No |
| ended | No |
| time-update | currentTime: number |
| progress | bufferedTime: number |
| duration-change | duration: number |
| volume-change |
muted: boolean volume: number |
| playback-rate-change | playbackRate: number |
| seeking | No |
| seeked | No |
| fullscreen-change |
isFullscreen: boolean video: boolean |
| call-action |
id: string title?: string type: string |
| call-bookmark |
id: string time: number title?: string |
| error | error: unknown |
| destroy | No |
| Method | Params | Result |
|---|---|---|
| isPaused | No | Promise<boolean> |
| isEnded | No | Promise<boolean> |
| play | No | Promise<void> |
| pause | No | Promise<boolean> |
| stop | No | Promise<void> |
| getCurrentTime | No | Promise<number> |
| getDuration | No | Promise<number> |
| seekTo | (time: number) | Promise<void> |
| isMuted | No | Promise<boolean> |
| mute | No | Promise<void> |
| unmute | No | Promise<void> |
| getVolume | No | Promise<number> |
| setVolume | (value: number) | Promise<void> |
| getPlaybackRate | No | Promise<number> |
| setPlaybackRate | (value: number) | Promise<void> |
| getVideoQualityList | No | Promise<VideoQuality[]> |
| getCurrentVideoQuality | No | Promise<VideoQuality> |
| setVideoQuality | (quality: VideoQuality) | Promise<void> |
| enableTextTrack | (lang: string) | Promise<void> |
| disableTextTrack | No | Promise<void> |
| closeCTA | No | Promise<void> |
| isFullscreen | No | Promise<boolean> |
| setFullscreen | (fullscreen: boolean) | Promise<void> |
| isPip | No | Promise<boolean> |
| setPip | (pip: boolean) | Promise<void> |
| getPlaylistItem | No | Promise<object> |
| switchTo | (id: string) | Promise<void> |
| next | No | Promise<void> |
| previous | No | Promise<void> |