Programming language: Swift
License: Apache License 2.0
Tags: Media     Video    
Latest version: v0.5.0

YoutubeKit alternatives and similar libraries

Based on the "Video" category.
Alternatively, view YoutubeKit alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of YoutubeKit or a related project?

Add another 'Video' Library



YoutubeKit is a video player that fully supports Youtube IFrame API and YoutubeDataAPI to easily create Youtube applications.

Swift Cocoapods [Carthage]((https://img.shields.io/badge/Carthage-compatible-brightgreen.svg)) License

Important Referecens

YoutubeKit is created based on the following references. If you are unsure whether it is a normal behavior or a bug, please check the following documents first.


This is an app using YoutubeKit. A simple video playback example is included into Example. You can create these functions very easily by using YoutubeKit.

Example1 Example2
Feed Comment
Example3 Example4
Floating Rotate

What is YoutubeKit?

YoutubeKit provides useful functions to create Youtube applications. It consists of the following two functions.

  • YTSwiftyPlayer (WKWebView + HTML5 + IFrame API)

  • YoutubeDataAPI


YTSwiftyPlayer is a video player that supports Youtube IFrame API.


  • High performance (Performance is 30% better than traditional UIWebView based player)
  • Low memory impact (maximum 70% off)
  • Type safe parameter interface(All IFrame API's parameters are supported as VideoEmbedParameter)


This library supports YoutubeDataAPI (v3). For the details is Here.

Available API lists:

  • Actitivty(list)
  • Actitivty(insert)
  • Caption(list)
  • Channel(list)
  • ChannelSections(list)
  • Comment(list)
  • CommentThreads(list)
  • GuideCategories(list)
  • PlaylistItems(list)
  • Playlists(list)
  • Search(list)
  • Subscriptions(list)
  • VideoAbuseReportReasons(list)
  • VideoCategories(list)
  • Videos(list)

Get Started

Playback the youtube video.

import YoutubeKit

final class VideoPlayerController: UIViewController {

    private var player: YTSwiftyPlayer!

    override func viewDidLoad() {

        // Create a new player
        player = YTSwiftyPlayer(
            frame: .zero,
            playerVars: [

        view = player
        player.delegate = self

        // Load video player
        let playerPath = Bundle(for: ViewController.self).path(forResource: "player", ofType: "html")!
        let htmlString = try! String(contentsOfFile: playerPath, encoding: .utf8)


YTSwiftyPlayerDelegate supports folowing delegate methods.

func playerReady(_ player: YTSwiftyPlayer)
func player(_ player: YTSwiftyPlayer, didUpdateCurrentTime currentTime: Double)
func player(_ player: YTSwiftyPlayer, didChangeState state: YTSwiftyPlayerState)
func player(_ player: YTSwiftyPlayer, didChangePlaybackRate playbackRate: Double)
func player(_ player: YTSwiftyPlayer, didReceiveError error: YTSwiftyPlayerError)
func player(_ player: YTSwiftyPlayer, didChangeQuality quality: YTSwiftyVideoQuality) 
func apiDidChange(_ player: YTSwiftyPlayer)    
func youtubeIframeAPIReady(_ player: YTSwiftyPlayer)    
func youtubeIframeAPIFailedToLoad(_ player: YTSwiftyPlayer)

Call IFrame API during playback.

// Pause the video.

// Seek after 15 seconds.
player.seek(to: 15, allowSeekAhead: true)

// Set a mute.

// Load another video.
player.loadVideo(videoID: "abcde")

Get video information using YoutubeDataAPI

First, Get API key from Here.

Next, add this code in your AppDelegate.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Set your API key here
    YoutubeKit.shared.setAPIKey("Your API key")

    return true

And then you can use YoutubeDataAPI request like this.

// Get youtube chart ranking
let request = VideoListRequest(part: [.id, .statistics], filter: .chart)

// Send a request.
ApiSession.shared.send(request) { result in
    switch result {
    case .success(let response):
    case .failed(let error):

Example of response here.

VideoList(items: [YoutubeKit.Video(etag: "\"A8kisgyDEbllhHF9ooXPFFrkc/nR6_A9oyIoLTJuucY_UXeasjYNU\"",
kind: "youtube#video",
id: "jeiDjeJgF0",
contentDetails: nil,
statistics: Optional(YoutubeKit.Statistics.VideoList(dislikeCount: "1631", likeCount: "60307", commentCount: Optional("8675"), favoriteCount: "0", viewCount: "1259046")),
snippet: nil,
status: nil),
etag: "\"J67fSnfblalhHF0foXPiFFrkc/TZGPJdE22-LilSv4-3VNoPw1cS4\"",
kind: "youtube#videoListResponse",
pageInfo: YoutubeKit.PageInfo(resultsPerPage: 5, totalResults: 200))

Fetch the next page (Pagination)

var nextPageToken: String?

// Send some request
ApiSession.shared.send(request) { [weak self] result in
    switch result {
    case .success(let response):

        // Save nextPageToken
        self?.nextPage = response.nextPageToken
    case .failed(let error):

// Set nextPageToken
let request = VideoListRequest(part: [.id], filter: .chart, nextPageToken: nextPageToken)

Authorization Request

If you want authorized request such as a getting your activity in Youtube, you set your access token before sending a request. To use GoogleSignIn, you can easily get your access token. pod 'GoogleSignIn'

First, add this code in your AppDelegate.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Set your access token for autheticate request
    YoutubeKit.shared.setAccessToken("Your access token")

    return true

And then you can use request requiring authorization, this is an example to get your Youtube activity.

// Get your Youtube activity
let request = ActivityListRequest(part: [.snippet], filter: .mine(true))

// Send a request.
ApiSession.shared.send(request) { result in
    switch result {
    case .success(let video):
    case .failed(let error):


XCode 11+

Swift 5+



$ pod repo update

And add this to your Podfile:

pod 'YoutubeKit'


$ pod install


Add this to your Cartfile:

github "rinov/YoutubeKit"


$ carthage update


Github: https://github.com/rinov

Twitter: https://twitter.com/rinov0321

Email: rinov[at]rinov.jp


YoutubeKit is available under the MIT license.

*Note that all licence references and agreements mentioned in the YoutubeKit README section above are relevant to that project's source code only.