Swiftpack.co - Swiftgram/TDLibFramework as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by Swiftgram.
Swiftgram/TDLibFramework 1.8.19-9b4266c0
TDLib for iOS, macOS, watchOS and tvOS packed in XCFramework and SPM.
⭐️ 8
🕓 21 hours ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/Swiftgram/TDLibFramework.git", from: "1.8.19-9b4266c0")



Project contains pre-compiled TDLib binary for iOS, macOS, watchOS, tvOS and simulators in .xcframework bundle.

If you're looking for pure Swift library, check out TDLibKit


Xcode (SPM)

  1. Install latest Xcode
  2. Add https://github.com/Swiftgram/TDLibFramework as SPM dependency in Project > Swift Packages. This could take a while cause it downloads ~300mb zip file with xcframework.
  3. Add TDLibFramework as your target dependency.
  4. Code!

Cocoapods & Flutter

See the docs


Simple examples can be found in Tests directory.

Create client

let clientId: Int32 = td_create_client_id()

Make request object

let request = ["@type": "getTextEntities", "text": "@telegram /test_command https://telegram.org telegram.me", "@extra": ["5", 7.0, "\\u00e4"]] as [String: Any]

JSON Serialization and Deserialization

Small example for helper functions you will need to talk with TDLib

func dictToJSONString(_ dictionary: [String: Any]) -> String {
    let dictionaryData = try! JSONSerialization.data(withJSONObject: dictionary)
    return String(data: dictionaryData, encoding: .utf8)!

func JSONStringToDict(_ string: String) -> [String: Any] {
    let responseData = string.data(using: .utf8)!
    return try! JSONSerialization.jsonObject(with: responseData, options: .allowFragments) as! [String: Any]

Synchronious requests

Only for methods with "Can be called synchronously" in docs

if let res = td_execute(dictToJSONString(request)) {
    let responseString = String(cString: res)
    let responseDict = JSONStringToDict(responseString)
    print("Response from TDLib \(responseDict)")

Async requests

let request = [
    "@type": "setTdlibParameters",
    "api_hash": "5e6d7b36f0e363cf0c07baf2deb26076",
    "api_id": 287311,
    "application_version": "1.0",
    "database_directory": "tdlib",
    "database_encryption_key": nil,
    "device_model": "iOS",
    "enable_storage_optimizer": true,
    "files_directory": "",
    "ignore_file_names": true,
    "system_language_code": "en",
    "system_version": "Unknown",
    "use_chat_info_database": true,
    "use_file_database": true,
    "use_message_database": true,
    "use_secret_chats": true,
    "use_test_dc": false,
] as [String: Any]
// Send request
td_send(clientId, dictToJSONString(request))

// Block thread and wait for response (not more 5.0 seconds)
if let response = td_receive(5.0) {
   let responseString = String(cString: res)
   let responseDict = JSONStringToDict(responseString)
   print("Async response from TDLib \(responseDict)")

Close client on exit

td_send(clientId, dictToJSONString(["@type": "Close"] as [String: String]))


You can find latest releases at Releases page.


You can find more about build process in Github Actions file.


  • Anton Glezman for Build Guide and basic implementation
  • Telegram Team for TDLib




Stars: 8
Last commit: Yesterday
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes


XCFramework based on TDLib-1.8.19 commit 9b4266c0

ZIP Checksum 0b956fe3e639fb7ed21871f9d1b17f2ccf6662831dd38b8bd66c58865f4aa01b

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