A small Telegram desktop client written from scratch in C++, as a pet project. It implements the MTProto protocol itself and talks directly to Telegram's servers — no Telegram SDK.
- Login by phone number, SMS code, and 2FA password
- Multiple accounts with quick switching
- Sessions persist between launches
- Dialog list with previews, paginated as you scroll
- Message history with scroll-up-to-load-older
- Media is labelled (photo / video / voice / file / sticker / poll / location)
- Download attachments to disk
- Send messages; view and edit your profile
- Unicode font bundled, so Cyrillic and other scripts render fine
- Protocol: MTProto 2.0 by hand — the DH handshake, AES-IGE, RSA, and the TL serializer
- Crypto: mbedTLS
- UI: Dear ImGui + GLFW + OpenGL 2
- Language: C++
Needs a C++ toolchain, CMake, and dev packages for mbedTLS, GLFW, OpenGL and zlib.
# Arch
sudo pacman -S mbedtls glfw cmake
# add your API credentials (see below)
cp include/config/config.h.example include/config/config.h
$EDITOR include/config/config.h
cmake -B build
cmake --build build --target atc_gui
./build/atc_guiatc_gui is the desktop client. The older atc target is the original
low-level handshake/CLI testbed.
Get an api_id / api_hash from https://my.telegram.org and put them in
include/config/config.h (gitignored, so they stay local).
Work in progress, but usable: login, browse chats, read/send messages, multiple accounts, download attachments, and it survives restarts. Inline media preview and playback aren't planned — a client isn't a media player.
MIT — see LICENSE.