Telegram github commits and releases
Открыть в Telegram
Broadcast from the most important Telegram clients' repositories
Больше4 834
Подписчики
-1324 часа
-487 дней
-22430 день
Загрузка данных...
Похожие каналы
Облако тегов
Входящие и исходящие упоминания
---
---
---
---
---
---
Привлечение подписчиков
июнь '26
июнь '26
+17
в 0 каналах
май '26
+75
в 5 каналах
Get PRO
апрель '26
+39
в 9 каналах
Get PRO
март '26
+9
в 1 каналах
Get PRO
февраль '26
+13
в 2 каналах
Get PRO
январь '26
+16
в 2 каналах
Get PRO
декабрь '25
+19
в 0 каналах
Get PRO
ноябрь '25
+17
в 0 каналах
Get PRO
октябрь '25
+7
в 0 каналах
Get PRO
сентябрь '25
+5
в 0 каналах
Get PRO
август '25
+19
в 1 каналах
Get PRO
июль '25
+21
в 1 каналах
Get PRO
июнь '25
+23
в 0 каналах
Get PRO
май '25
+71
в 0 каналах
Get PRO
апрель '25
+28
в 0 каналах
Get PRO
март '25
+29
в 0 каналах
Get PRO
февраль '25
+24
в 0 каналах
Get PRO
январь '25
+61
в 0 каналах
Get PRO
декабрь '24
+16
в 0 каналах
Get PRO
ноябрь '24
+86
в 0 каналах
Get PRO
октябрь '24
+112
в 0 каналах
Get PRO
сентябрь '24
+814
в 0 каналах
Get PRO
август '24
+606
в 0 каналах
Get PRO
июль '24
+475
в 0 каналах
Get PRO
июнь '24
+415
в 0 каналах
Get PRO
май '24
+392
в 0 каналах
Get PRO
апрель '24
+422
в 0 каналах
Get PRO
март '24
+598
в 1 каналах
Get PRO
февраль '24
+1 585
в 0 каналах
Get PRO
январь '24
+3 043
в 0 каналах
Get PRO
декабрь '23
+3 050
в 0 каналах
Get PRO
ноябрь '23
+42
в 0 каналах
Get PRO
октябрь '23
+34
в 1 каналах
Get PRO
сентябрь '23
+25
в 0 каналах
Get PRO
август '23
+30
в 0 каналах
Get PRO
июль '23
+26
в 0 каналах
Get PRO
июнь '23
+12
в 0 каналах
Get PRO
май '23
+11
в 0 каналах
Get PRO
апрель '23
+18
в 0 каналах
Get PRO
март '23
+22
в 0 каналах
Get PRO
февраль '23
+14
в 0 каналах
Get PRO
январь '23
+10
в 0 каналах
Get PRO
декабрь '22
+13
в 0 каналах
Get PRO
ноябрь '22
+30
в 0 каналах
Get PRO
октябрь '22
+9
в 0 каналах
Get PRO
сентябрь '22
+23
в 0 каналах
Get PRO
август '22
+29
в 0 каналах
Get PRO
июль '22
+36
в 0 каналах
Get PRO
июнь '22
+22
в 0 каналах
Get PRO
май '22
+20
в 0 каналах
Get PRO
апрель '22
+40
в 0 каналах
Get PRO
март '22
+52
в 0 каналах
Get PRO
февраль '22
+24
в 0 каналах
Get PRO
январь '22
+13
в 0 каналах
Get PRO
декабрь '21
+61
в 0 каналах
Get PRO
ноябрь '21
+20
в 0 каналах
Get PRO
октябрь '21
+11
в 0 каналах
Get PRO
сентябрь '21
+28
в 0 каналах
Get PRO
август '21
+21
в 0 каналах
Get PRO
июль '21
+31
в 0 каналах
Get PRO
июнь '21
+25
в 0 каналах
Get PRO
май '21
+6
в 0 каналах
Get PRO
апрель '21
+40
в 0 каналах
Get PRO
март '21
+16
в 0 каналах
Get PRO
февраль '21
+11
в 0 каналах
Get PRO
январь '21
+30
в 0 каналах
Get PRO
декабрь '20
+477
в 0 каналах
| Дата | Привлечение подписчиков | Упоминания | Каналы | |
| 09 июня | 0 | |||
| 08 июня | +3 | |||
| 07 июня | +2 | |||
| 06 июня | +8 | |||
| 05 июня | +2 | |||
| 04 июня | 0 | |||
| 03 июня | 0 | |||
| 02 июня | +1 | |||
| 01 июня | +1 |
Посты канала
telegramdesktop/tdesktop/dev • f310313 • 1 files, +1/-1
Try improving context loss handling.
telegramdesktop/tdesktop/dev • e38fc74 • 7 files, +210/-58
Mark IV links in shared links section.
#tdesktop
| 2 | morethanwords/tweb/master • 8be3bec • 1 files, +2/-2
fix: don't offer forward for protected messages in cross-chat selection
The per-peer loop in AppSelection.updateContainer overwrote cantForward/
cantDelete on each iteration instead of OR-accumulating them. With a
multi-peer selection (only reachable via global search), selecting a
no_forwards message plus a forwardable message from another chat left the
flags reflecting only the last peer iterated, re-enabling the Forward
button and bypassing the content-protection restriction.
Accumulate with ||= so a single unforwardable peer keeps the whole
selection unforwardable, matching cantForwardDeleteMids' per-mid logic
and the loop's existing `if(cantForward && cantDelete) break`.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • 068e422 • 1 files, +7/-0
fix: don't hide sibling album items' floating overlays in media viewer
hideFloatings ran querySelectorAll over the whole bubble, so opening one
album item dimmed every item's .video-time/.video-play overlays. Scope to
the clicked item's .album-item while still hiding bubble-level floatings.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • e2705c6 • 2 files, +14/-8
feat: show views/shares count in message time tooltip
Append exact views and forwards (shares) counts to the message
timestamp title, like in TDesktop, so hovering the time/views area
reveals them.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 100 |
| 3 | morethanwords/tweb/master • ed1ae98 • 1 files, +13/-1
fix: animate chat-list/topbar video avatars only for premium users
Match Telegram Android: in the chat list and chat topbar a video
(animated) avatar plays only when its owner is a Premium user.
Android's ImageReceiver.setForUserOrChat sets a videoLocation only
under isPremiumUser(user) && has_video, and its chat branch sets no
video at all — so non-Premium users, bots (which can't hold Premium)
and groups/channels all stay static there.
The big profile avatar and the avatar/media viewer are unchanged —
they keep animating for everyone. Owner Premium is read synchronously
from the cached peers mirror (apiManagerProxy.getUser), so this adds
no request to the avatar-render path.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • afca7f7 • 1 files, +0/-2
fix: show "Nobody" option in Profile Photos privacy
The Profile Photos privacy section hid the Nobody radio via
skipTypes: [PrivacyType.Nobody]. Both official clients offer it
(Android PRIVACY_RULES_TYPE_PHOTO handles TYPE_NOBODY; tdesktop
ProfilePhotoPrivacyController handles Option::Nobody), and it is the
natural pairing for the public (fallback) photo — nobody sees the
real photo, restricted users see the public one.
Remove the skip and the now-unused PrivacyType import.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • aaad022 • 1 files, +0/-2
fix: show "Nobody" option in Bio privacy
All official clients (iOS, Android, Desktop) offer Everybody/Contacts/Nobody
for Bio (privacyKeyAbout). tweb was suppressing Nobody via skipTypes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • 34ea6c7 • 2 files, +21/-7
fix: stronger frosted-glass side blur for vertical photos with caption
The letterbox side-fill behind a portrait photo blurred the full-res image
at radius 12 then object-fit: cover scaled it down, making the blur barely
visible. Official clients downscale to a tiny thumbnail before blurring.
Add an optional maxSize to blur() that downscales the source before the
blur pass, and use blur(url, 10, 2, 48) for the side-fill (matches Android's
~48px/radius-10 config). Also cheaper: blurs a 48px image, not the full one.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 81 |
| 4 | telegramdesktop/tdesktop/dev • ab656cb • 1 files, +14/-3
Update Windows ARM64 action to VS2026
#tdesktop | 97 |
| 5 | telegramdesktop/tdesktop/dev • df3d8b8 • 1 files, +5/-5
Fix rotated video rendering in calls
#tdesktop | 109 |
| 6 | telegramdesktop/tdesktop/dev • 24b4724 • 1 files, +3/-0
Add newer cmake to snap build
#tdesktop | 113 |
| 7 | telegramdesktop/tdesktop/dev • 0cdf4ff • 1 files, +2/-1
Support cmake 4 in Docker
#tdesktop | 116 |
| 8 | telegramdesktop/tdesktop/dev • e2c42dd • 1 files, +1/-1
Update cmake_helpers for cmark-gfm packaged mode.
#tdesktop | 122 |
| 9 | telegramdesktop/tdesktop/dev • ee20ac6 • 2 files, +5/-1
Drop session-less redundant accounts on acc add.
telegramdesktop/tdesktop/dev • 614ee45 • 10 files, +951/-38
Implement support for flatpak updates
#tdesktop | 124 |
| 10 | morethanwords/tweb/master • dfb013e • 5 files, +47/-9
fix: show limit-reached toast when saving GIFs or faving stickers
saveGif / faveSticker silently trimmed the list to the account limit (saved_gifs_limit_*, stickers_faved_limit_*) with no feedback, unlike iOS/Android/tdesktop which show a "replaced" toast. They now flag limitReached on the gif_updated / sticker_updated events, and appImManager surfaces a toast via a shared showLimitReplacedToast helper: non-premium users get a clickable "increase the limit" Premium upsell, premium users a plain "replaced" message. Strings mirror the official iOS/Android wording.
Fixes https://bugs.telegram.org/c/62515
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • f976635 • 1 files, +1/-0
docs(CLAUDE.md): never regenerate langPack.strings manually (auto-generated)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 130 |
| 11 | morethanwords/tweb/master • de7c31e • 43 files, +1969/-109
Video avatars, public/personal profile photos & suggested-photo service messages
Animated (video) profile photos and related profile-photo features, ported
from the official iOS/Android/Desktop clients.
Display
- Animated avatars play in the profile carousel, chat list, topbar and the
full-screen avatar/media viewer; message-bubble avatars stay static.
Gated by lite-mode 'video'; off-screen videos pause.
Upload
- Media editor gains a video-avatar mode (<=10s trim, forced mute, cover-frame
picker; 800px / 30fps / 1.5Mbps caps); the AvatarEdit pipeline wires it
through.
Public (fallback) & personal photos
- Privacy > Profile Photo: set / update / remove a public (fallback) photo.
- Contact editing: Set / Suggest / Reset a personal contact photo (correct
save / suggest MTProto flags).
Suggested & changed photos in chat
- messageActionSuggestProfilePhoto renders the photo inline (generic
wrapServiceMediaBubble); the receiving side opens it in the editor and sets
it as the profile photo on confirm, with a toast.
- Group / channel avatar-change service messages show the (animated) photo;
clicking opens the media viewer.
Notable fixes
- Fallback-photo download via inputPhotoFileLocation (not a synthetic peer).
- Channel video-avatar resolution in topbar / chat list (getFullVideoPhoto
fetches the chat full photo; failed video loads are no longer cached).
- editContact refreshes the full peer after set / suggest / reset.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 119 |
| 12 | morethanwords/tweb/master • b43026f • 2 files, +81/-13
fix: keep per-chat theme on global toggle and reveal it with the theme-switch circle
When the open chat pins its own theme/wallpaper, a global day/night toggle no longer overwrites it with the global background. chatBackground's theme_changed listener re-publishes the chat's own theme/wallpaper (tracked as ownedTheme/ownedWallPaper) instead of the global one; a same-render in-flight dedup lets the chat's useIsNightTheme re-publish attach to the in-flight render rather than supersede it; and appImManager's theme_changed listener defers when this.chat owns the background.
The per-chat wallpaper also stopped popping in before the circular reveal. setBackground read themeController.getTheme() synchronously (in resolveBackgroundSync and the ownership check), so Chat's reactive update() effect subscribed to appSettings.theme and re-rendered the wallpaper the instant switchTheme flips the setting -- before startViewTransition, painting the new wallpaper into the already-captured old snapshot. Those reads are now wrapped in untrack(): setBackground is imperative and must not create a reactive dependency in its caller. The re-render defers to the theme_changed event inside the view-transition update callback, so it lands in the new snapshot and is revealed together with the circle.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • edeebd5 • 2 files, +41/-3
Fix phone number paste on the sign-in page
Pasting an international number into the login phone field produced a mangled result (e.g. '+66809716338' became '+66', or a doubled country code). Two causes:
- telInputField: a contentEditable paste inserts the raw clipboard text at the caret even when the paste event is preventDefault-ed in Chrome, so pasting onto the pre-filled country code concatenated/doubled it. Compute the country-code-aware merge in the paste handler (a full international number with +/00 replaces the field; a national number appends to the current code, dropping a leading trunk 0) and apply it in the input handler that follows.
- SignInCard: when the pasted number changed the detected country, onInput -> countryInputField.override -> onCountryChange reset telInputField.value to the bare '+code', wiping the pasted national part. Guard that reset with an 'overriding' flag so phone-driven country detection mirrors into the selector without clearing the field; a manual country pick still resets as before.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 145 |
| 13 | morethanwords/tweb/master • 8dde18f • 7 files, +22/-40
style: restyle folders-sidebar unread badges + const-ify sidebar tab locals
morethanwords/tweb/master • f96bff1 • 3 files, +28/-6
fix: resolve circular worker import from log-buffer export wiring
logsBuffer.ts is reached by the universal logger() so it lands in every worker bundle. It held import('./exportLogs'), and exportLogs statically imports apiManagerProxy, which spawns both the mtproto and crypto workers. Rollup keeps dynamically-imported modules in the graph (it only splits the chunk), so Vite's worker bundler pulled apiManagerProxy into crypto.worker's bundle -> spawns index.worker -> spawns crypto.worker -> "Circular worker imports detected".
Move the main-thread-only window.downloadLogs/collectLogs wiring out of the leaf into mountLogExport.ts, imported only from src/index.ts, so exportLogs (and apiManagerProxy) stay out of every worker bundle.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • ed7e34e • 300 files, +987/-735
Build
#webk | 147 |
| 14 | morethanwords/tweb/master • 06558b0 • 1 files, +14/-0
fix: lift incoming P2P call info column above the action buttons
A ringing incoming call shows a second button row and raises the first row into the vertically-centred avatar/name/status column, leaving the subtitle sitting under the buttons. Re-centre the column (translateY -5rem) in the space between the header and the two button rows while .two-button-rows is set; it animates back to centre (audio) or top (video) once the call connects.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
morethanwords/tweb/master • 0d5a0c1 • 1 files, +24/-1
fix: keyboard scroll in chat — PageUp/PageDown + ArrowUp/Down in read-only chats
PageUp/PageDown were ignored by the global keydown listener, so the chat
never scrolled by page. ArrowUp/Down hijacked the key for edit-message
even in channels where the user can't post, where there's nothing to edit.
Both now hand keyboard focus to the bubbles scroll container and let the
browser scroll it natively (overflow:auto + outline:none → focus is
invisible). Existing edit-last / reply-to-previous shortcuts in writable
chats are unchanged.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
morethanwords/tweb/master • 4b1d0bc • 1 files, +4/-4
fix: firing ripple with short trackpad click
morethanwords/tweb/master • ca12e13 • 10 files, +338/-83
feat: rework Chat Wallpaper picker — instant open, lazy tiles, smooth theme switch
Overhaul of the Chat Wallpaper / Set-a-color background picker:
- Fix: picks never applied. The theme-settings Solid store was mutated
directly (silently dropped) and appChatBackground short-circuited an
undefined-opts wallpaper change. Persist via setWallpaperForCurrentTheme
and resolve the background up front so the picked wallpaper actually shows.
- Theme switch via the menu now swaps a static-image background smoothly: the
view transition awaits the chat-background re-render, and heavyAnimation
pauses video/sticker rendering during it with a safety timeout so the app
can't freeze mid-transition.
- Picker grid adopts the Shared-Media media-grid look (full-bleed, rounded),
with corner-aware selection rounding driven by JS-computed classes
(markGridCornerItem) rather than :nth-child. Same for the Set-a-color grid.
- Performance: the grid opens instantly and only does work for visible tiles.
Each whole tile (file download + gradient/pattern/image raster) is deferred
to a LazyLoadQueue and built on scroll-into-view, instead of downloading +
rasterizing all ~70 up front (was ~860ms reveal plus sustained main-thread
jank).
- Tiles show a synchronous colour skeleton (CSS gradient from the wallpaper's
own colours; black fallback for image-only) so the grid is never empty,
even mid open-slide.
- The wallpaper list is cached synchronously (warmed by the General Settings
preload) so the grid + skeletons render in the first frame of the open
slide (~11ms) instead of after the async getWallPapers (~128ms).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 131 |
| 15 | telegramdesktop/tdesktop/dev • 37c5bdb • 1 files, +1/-1
Update User-Agent for DNS to Chrome 148.0.0.0.
telegramdesktop/tdesktop/dev • ea7b419 • 1 files, +0/-1
Removed 1 unused style entries.
#tdesktop | 132 |
| 16 | morethanwords/tweb/master • 0ac46c1 • 1 files, +14/-0
fix: clear stuck drag-and-drop overlay when a file drag ends outside the window
Dragging a file into the chat and releasing it outside the window/tab
left the drop overlay (.drops-container.is-visible + body.is-dragging)
stuck, blocking the chat: no 'drop' fires for a drop outside the app, and
an external OS file drag has no in-document source so 'dragend' never fires
either, leaving the dragenter/dragleave counter unbalanced.
Add a watchdog armed on every 'dragover' (which keeps firing while a drag is
held over the page and stops the instant it leaves/ends): if it lapses for
500ms, force-hide the overlay. A still-active drag re-arms it each tick.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 182 |
| 17 | morethanwords/tweb/master • 9025762 • 3 files, +99/-7
fix: don't drop out of E2E conferences on duplicate chain-block delivery
TdE2E chain blocks reach the call via two paths — the 1.5s poll and the
server `updateGroupCallChainBlocks` push — but only the poll advanced the
`e2eChainOffsets` cursor. A burst of pushes (several participants joining
at once) left the cursor stale, so the next poll replayed a batch of
already-applied blocks. `applyBlockBytes` deduped only the chain tip, so
the older block in the batch fell through to the strict `applyBlock`,
which threw a fatal HEIGHT_MISMATCH — the e2e worker raised `callFailed`
and the client hung itself up.
- applyBlockBytes: skip blocks strictly below our height (already applied)
before the tip-hash check; keep the hash check for the same-height case
so a genuine sibling/fork at the tip still fails. Real forward gaps
(height > height + 1) stay fatal.
- group_call_chain_blocks push handler: advance the poll cursor to the
pushed next_offset (max-guarded against out-of-order pushes) so the next
poll doesn't re-fetch and re-deliver what the push already applied.
- tests: regression coverage for re-delivery of below-tip blocks + an
in-order batch replay of the whole applied chain.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk | 168 |
| 18 | telegramdesktop/tdesktop/nightly • 344e330 • 2 files, +6/-2
Fixed crash on Linux and Windows.
telegramdesktop/tdesktop/nightly • 02f420a • 1 files, +52/-3
Updated macOS build on Github CI.
#tdesktop | 181 |
| 19 | telegramdesktop/tdesktop/nightly • 5d7ca1b • 1 files, +52/-3
Updated macOS build on Github CI.
#tdesktop | 184 |
| 20 | telegramdesktop/tdesktop/dev • 65f24c3 • 1 files, +2/-2
Fix build with Windows on ARM.
#tdesktop | 178 |
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
