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.
Comments