I live in the terminal, and alt-tabbing to Telegram Desktop a hundred times a day finally broke me. So I built telegram-cli — a complete Telegram client that runs in your terminal, written in Go.

GitHub: imtaqin/telegram-cli

Not a toy

This is a real client, not a send-only script:

  • Chats — private chats, groups, supergroups, channels. Rounded message bubbles, own messages right-aligned, read-status ticks.
  • Rich rendering — Markdown via Glamour (code blocks, bold, links), profile avatars as colored initials or actual rendered photos.
  • Images in the terminal — Kitty graphics protocol and Sixel where supported, with a Unicode half-block fallback using CatmullRom scaling everywhere else.
  • Media — play voice messages inline via mpv/ffplay, open videos in an external player, download files with a progress bar.
  • Search — chats, messages, and the global Telegram directory.
  • Auth — phone + SMS code, 2FA password, and QR login. A first-run wizard asks for API credentials and writes the config for you.
  • Desktop notifications, responsive dual-panel/single-panel layout, dark and light themes.
╭─ Chat List ────────────╮╭─ Messages ─────────────────────╮
│ AL  Alice         08:15 ││            ╭──────────────────╮│
│     see you tomorrow    ││            │ sounds good 👍   ││
│ DT  Dev Team      13:24 ││            │ 15:20 ✓✓         ││
│     deploy is green   2 ││            ╰──────────────────╯│
╰─────────────────────────╯╰────────────────────────────────╯

Why Go

The TUI is built on the Charm stack (Bubble Tea + Glamour), which makes terminal apps feel like real UI development. Go gives me a single static binary per platform — download, run, log in. CI builds releases for Linux, macOS and Windows.

It pairs nicely with telegram-mcp, which reuses the QR login to let AI agents read and send Telegram messages.

If your workflow already lives in tmux, this closes the last tab you were keeping a browser open for.