Swiftpack.co -  ddddxxx/LyricsKit as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
Lyrics submodule for LyricsX
.package(url: "https://github.com/ddddxxx/LyricsKit.git", from: "v0.11.1")


Lyrics submodule for LyricsX.

Supported Sources

  • NetEase Music
  • QQ Music
  • Kugou Music
  • TTPod
  • Gecimi
  • Syair
  • Xiami Music (discontinued)
  • ViewLyrics (not working anymore)


Search lyrics from the internet

import LyricsService

// create a search request
let song = "Tranquilize"
let artist = "The Killers"
let duration = 225.2
let searchReq = LyricsSearchRequest(
    searchTerm: .info(title: song, artist: artist),
    duration: duration

// choose a lyrics service provider
let provider = LyricsProviders.Kugou()
// or search from multiple sources
let provider = LyricsProviders.Group(service: [.kugou, .netease, .qq])

// search
provider.lyricsPublisher(request: searchReq).sink { lyrics in


LyricsKit is part of LyricsX and licensed under MPL 2.0. See the LICENSE file.

LRCX file


<lrcx>              ::= <line> (NEWLINE <line>)*
<line>              ::= <id tag>
                      | <lyric line>
                      | <lyric attachment>
                      | ""

<id tag>            ::= <tag>
<tag>               ::= "[" <tag content> "]"
<tag content>       ::= <tag key>
                      | <tag key> ":" <tag value>
<tag key>           ::= [0-9a-zA-Z_-]+
<tag value>         ::= <character except NEWLINE or "]">+

<lyric line>        ::= <time tag> <character except NEWLINE>*
<lyric attachment>  ::= <time tag> <attachment tag> <attachment body>

<time tag>          ::= "[" (<minute> ":")* <second> ("." <millisecond>)* "]"

<attachment tag>            ::= <tag>
<attachment body>           ::= <plain text attachment>
                              | <index based attachment>
                              | <range based attachment>
<plain text attachment>     ::= <character except NEWLINE>+
<index based attachment>    ::= <index based segment>+
<range based attachment>    ::= <range based segment>+
<index based segment>       ::= "<" <segment value> "," <segment index> ">"
<range based segment>       ::= "<" <segment value> "," <segment range> ">"
<segment value>             ::= <characters except NEWLINE, "," or ">">
<segment index>             ::= <number>
<segment range>             ::= <lowerBound> "," <upperBound>

Predefined tags

Predefined ID tags:

Tag Key Value Type Description
title ti string
album al string
artist ar string
offset offset integer
length length decimal

Predefind attachment tags:

Tag Key Value Type Attachment type Description
translation tr RFC 4646 plain text
word time tag tt no value index based (with timestamp in millisecond)
furigana fu no value range based
romaji ro no value range based


Stars: 51
Last commit: 2 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API