Desktop Telegram client for reading channels, groups, and private chats. Built on Tauri v2 + React + Rust.
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 7, Zustand 5, React Router 7 |
| Backend | Rust (Tauri v2), TDLib (via FFI / libloading) |
| Platform | macOS (darwin-arm64) |
| Tests | Vitest |
| UI Catalog | Storybook 10 |
| Linting | ESLint 9, Prettier 3 |
# 1. Clone and navigate to project
cd v3/Dev/ui
# 2. Install dependencies
npm install
# 3. Run in dev mode
npm run tauri devOn first launch, the app will ask for your Telegram API credentials (api_id + api_hash).
Get them at my.telegram.org/apps.
| Command | Description |
|---|---|
npm run tauri dev |
Launch Tauri + Vite (dev) |
npm run dev |
Vite only (frontend) |
npm test |
Run tests (vitest) |
npm run lint |
ESLint check |
npm run lint:fix |
ESLint with auto-fix |
npm run format |
Prettier formatting |
npm run storybook |
Storybook on localhost:6006 |
npm run build-storybook |
Build Storybook |
v3/Dev/ui/
βββ src/
β βββ components/ # UI components (FeedCard, MediaFile, BubbleMessage...)
β βββ pages/ # Pages (Channels, Groups, Private, Chat, Menu...)
β βββ stores/ # Zustand stores (auth, chat, message, file, ui)
β βββ hooks/ # useTdlibListener
β βββ utils/ # helpers (text, entities, formatting)
β βββ styles/ # CSS (tokens, feed, chat, layout, overlays, animations)
β βββ i18n.js # Localization (en/ru)
β βββ App.jsx # Root + Router + Header
β βββ main.jsx # Entry point
βββ src-tauri/
β βββ src/
β βββ lib.rs # IPC commands (Tauri)
β βββ tdlib.rs # TDLib FFI manager
β βββ handlers.rs # TDLib event handlers
β βββ main.rs # Entry point
βββ tests/ # Unit tests (vitest)
βββ .tasks/ # SKSK tasks and artifacts
The app works with a single Telegram account. On first launch:
- Enter your Telegram API credentials (api_id + api_hash)
- Enter phone number
- Enter code from Telegram
- (Optional) Enter 2FA cloud password
| Key | Action |
|---|---|
Cmd+1 |
Channels |
Cmd+2 |
Groups |
Cmd+3 |
Private |
Cmd+= / Cmd+- |
Zoom |
Cmd+0 |
Reset zoom |
Esc |
Back / Close modal |
MIT