Go to file
levlam ca0b876c62 Find stat nanoseconds using SFINAE.
GitOrigin-RevId: 90b0f42ca6349e2cf4236caf6f81742384649072
2018-03-10 22:19:58 +03:00
benchmark Fix linking zlib to OpenSSL. 2018-02-18 00:24:34 +03:00
CMake Trying to add AppleTvOs support 2018-02-15 00:01:28 +03:00
example Improve README.md. 2018-03-09 01:18:12 +03:00
memprof Replace assert with if to prevent warning about unused variable. 2018-01-21 16:50:35 +03:00
sqlite minor cmake fix 2018-03-06 16:28:43 +03:00
td Fix error code. 2018-03-10 17:52:27 +03:00
tdactor Fix SleepActor leak. 2018-02-14 14:09:04 +03:00
tddb Fix error code. 2018-03-10 17:52:27 +03:00
tdnet Fix Socks5. 2018-02-28 23:25:42 +03:00
tdtl tdtl: pass class_name to constructor generators. 2018-01-09 18:56:58 +03:00
tdutils Find stat nanoseconds using SFINAE. 2018-03-10 22:19:58 +03:00
test Fix process_config. 2018-03-08 18:01:45 +03:00
.clang-format Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
.gitattributes Various fixes. 2018-03-06 19:27:52 +03:00
.gitignore Add Java example. 2018-01-28 13:58:33 +03:00
.travis.yml Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
.ycm_extra_conf.py Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
bitbucket-pipelines.yml Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
CHANGELOG.md Increase TDLib version to 1.1.1. 2018-02-04 00:59:09 +03:00
CMakeLists.txt LOG(FATAL) throws exception in emscripten 2018-03-06 14:43:46 +03:00
Doxyfile Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
format.ps1 Update format.{sh,ps1}. 2018-02-28 02:12:15 +03:00
format.sh Update format.{sh,ps1}. 2018-02-28 02:12:15 +03:00
gen_git_commit_h.ps1 Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
gen_git_commit_h.sh Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
LICENSE_1_0.txt Project import generated by Copybara. 2017-12-31 23:08:40 +03:00
README.md Add link to API scheme to README>md. 2018-03-09 01:31:29 +03:00
src.ps1 Fix exemple formatting. 2018-01-22 22:38:55 +03:00
src.sh Fix exemple formatting. 2018-01-22 22:38:55 +03:00
tdclientjson_export_list Add set_fatal_error_callback to public Log interface. 2018-01-24 18:45:57 +03:00
TdConfig.cmake Project import generated by Copybara. 2017-12-31 23:08:40 +03:00

TDLib

TDLib (Telegram Database library) is a cross-platform library for building Telegram clients. It can be easily used from almost any programming language.

Table of Contents

Features

TDLib has many advantages. Notably TDLib is:

  • Cross-platform: TDLib can be used on Android, iOS, Windows, macOS, Linux, Windows Phone, WebAssembly, watchOS, tvOS, Tizen, Cygwin. It should also work on other *nix systems with or without minimal effort.
  • Multilanguage: TDLib can be easily used with any programming language that is able to execute C functions. Additionally it already has native Java (using JNI) bindings and .NET (using C++/CLI and C++/CX) bindings.
  • Easy to use: TDLib takes care of all network implementation details, encryption and local data storage.
  • High-performance: in the Telegram Bot API, each TDLib instance handles more than 19000 active bots simultaneously.
  • Well-documented: all TDLib API methods and public interfaces are fully documented.
  • Consistent: TDLib guarantees that all updates are delivered in the right order.
  • Reliable: TDLib remains stable on slow and unreliable Internet connections.
  • Secure: all local data is encrypted using a user-provided encryption key.
  • Fully-asynchronous: requests to TDLib don't block each other or anything else, responses are sent when they are available.

Examples and documentation

Take a look at our examples and documentation.

Dependencies

TDLib depends on:

  • C++14 compatible compiler (Clang 3.4+, GCC 4.9+, MSVC 19.0+ (Visual Studio 2015+), Intel C++ Compiler 17+)
  • OpenSSL
  • zlib
  • gperf (build only)
  • CMake (3.0.2+, build only)
  • PHP (optional, for docs generation)
  • Doxygen (optional, for docs generation)

Building

Install all TDLib dependencies as described in Installing dependencies. Then enter directory containing TDLib sources and compile them using CMake:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

Installing dependencies

macOS

  • Install the latest Xcode command line tools.
  • Install other dependencies, for example, using Homebrew:
brew install gperf cmake openssl
  • Build TDLib with CMake as explained in building. You may need to manually specify path to the installed OpenSSL to CMake, e.g.,
cmake -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ ..

Windows

  • Download and install gperf. Add the path to gperf.exe to the PATH environment variable.
  • Install vcpkg.
  • Run the following commands to install TDLib dependencies using vcpkg:
C:\src\vcpkg> .\vcpkg.exe install openssl:x64-windows openssl:x86-windows zlib:x64-windows zlib:x86-windows
  • Build TDLib with CMake as explained in building, but instead of cmake -DCMAKE_BUILD_TYPE=Release .. use
cmake -DCMAKE_TOOLCHAIN_FILE=C:\src\vcpkg\scripts\buildsystems\vcpkg.cmake ..

Linux

  • Install all dependencies using your package manager.

Using in CMake C++ projects

For C++ projects that use CMake, the best approach is to build TDLib as part of your project or to use a prebuilt installation.

There are several libraries that you could use in your CMake project:

  • Td::TdJson, Td::TdJsonStatic — dynamic and static version of a JSON interface. This has a simple C interface, so it can be easily used with any programming language that is able to execute C functions. See td_json_client and td_log documentation for more information.
  • Td::TdStatic — static library with C++ interface for general usage. See Client and Log documentation for more information.
  • Td::TdCoreStatic — static library with low-level C++ interface intended mostly for internal usage. See ClientActor and Log documentation for more information.

For example, part of your CMakeLists.txt may look like this:

add_subdirectory(td)
target_link_libraries(YourTarget PRIVATE Td::TdStatic)

Or you could install TDLib and then reference it in your CMakeLists.txt like this:

find_package(Td 1.1.5 REQUIRED)
target_link_libraries(YourTarget PRIVATE Td::TdStatic)

See example/cpp/CMakeLists.txt.

Using in Java projects

TDLib provides native Java interface through JNI.

See example/java for example of using TDLib from Java and detailed build and usage instructions.

Using from other programming languages

TDLib provides efficient native C++, Java, and .NET interfaces. But for most use cases we suggest to use the JSON interface, which can be easily used with any programming language that is able to execute C functions. See td_json_client and td_log documentation for detailed JSON interface description, scheme td_api.tl or autogenerated HTML documentation for the list of all available TDLib methods and classes.

See example/python/tdjson_example.py for an example of its usage.

License

TDLib is licensed under the terms of the Boost Software License. See LICENSE_1_0.txt for more information.