Telegram github commits and releases
4.43K subscribers
601 files
21K links
Broadcast from the most important Telegram clients' repositories
Download Telegram
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
🫡2
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
🫡3
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
🫡3💅1
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
🫡3
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
🫡3
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
🫡3
telegramdesktop/tdesktop/dev • e2c42dd • 1 files, +1/-1
Update cmake_helpers for cmark-gfm packaged mode.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 0cdf4ff • 1 files, +2/-1
Support cmake 4 in Docker

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 24b4724 • 1 files, +3/-0
Add newer cmake to snap build

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • df3d8b8 • 1 files, +5/-5
Fix rotated video rendering in calls

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • ab656cb • 1 files, +14/-3
Update Windows ARM64 action to VS2026

#tdesktop
🫡2
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
🫡3
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
🫡3
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
🫡3
telegramdesktop/tdesktop/dev • f52da56 • 2 files, +104/-77
Improved jump anchors in shared media with media calendar periods usage.

telegramdesktop/tdesktop/dev • 723bf18 • 1 files, +24/-8
Seeded media slice and added failure recovery to info shared media jump.

telegramdesktop/tdesktop/dev • 0d50917 • 1 files, +6/-1
Fixed missing story outline on first profile open.

Fixed #30760.

telegramdesktop/tdesktop/dev • ec0c611 • 1 files, +77/-24
Added share and QR menu to proxy connection confirmation box.

telegramdesktop/tdesktop/dev • 9d4ad88 • 1 files, +7/-1
Allowed copying internal proxy link via modifier key in connection box.

telegramdesktop/tdesktop/dev • e29458e • 5 files, +147/-0
Added dragging proxy links onto window to open connection box.

telegramdesktop/tdesktop/dev • 1d20073 • 2 files, +7/-0
Aligned admin log userpic context menu to open with forced origin.

telegramdesktop/tdesktop/dev • 511e9ea • 3 files, +4/-142
Added shared cached RHI capability probe to graphics detection.

telegramdesktop/tdesktop/dev • fdb9de7 • 1 files, +1/-1
Fixed possible crash on macOS.

telegramdesktop/tdesktop/dev • 0384edf • 1 files, +25/-3
Allowed dragging profile id as plain number.

telegramdesktop/tdesktop/dev • e5963b9 • 1 files, +78/-61
Added auto-fill from clipboard proxy link to new proxy box.

telegramdesktop/tdesktop/dev • 081c88d • 3 files, +72/-4
Added support of deep links for experimental settings.

telegramdesktop/tdesktop/dev • 056ca1c • 2 files, +8/-1
Replaced poll emoji with correspond icon in dialogs message layout.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 4d32a16 • 14 files, +179/-39
Fixed 3D premium covers drawing over shown boxes.

telegramdesktop/tdesktop/dev • 1fff9c0 • 1 files, +3/-52
Reverted "Updated macOS build on Github CI."

This reverts commit 02f420a0f369c8713933e1bf9fae86aa3876ed73.

telegramdesktop/tdesktop/dev • d6d8373 • 11 files, +146/-59
Added hiding phone number under spoiler in profile and edit sections.

telegramdesktop/tdesktop/dev • f513778 • 6 files, +97/-22
Slightly improved style of repeat selector in schedule box.

telegramdesktop/tdesktop/dev • 08f7937 • 1 files, +4/-0
Fixed centering of date and time text in schedule box fields.

telegramdesktop/tdesktop/dev • 3f50857 • 3 files, +575/-0
Added animated string transitions only for changed text part.

telegramdesktop/tdesktop/dev • 4b421f6 • 6 files, +136/-200
Moved local storage box to separate settings section.

telegramdesktop/tdesktop/dev • 9d9bdfc • 8 files, +568/-0
Added animated ring chart of cached data to local storage section.

telegramdesktop/tdesktop/dev • 6b805e8 • 4 files, +251/-0
Added device storage usage line to local storage section.

telegramdesktop/tdesktop/dev • c2a948a • 4 files, +102/-2
Added progress box display while clearing to storage local section.

telegramdesktop/tdesktop/dev • 4a4868c • 6 files, +1057/-253
Improved clear button and completion animation to local storage section.

telegramdesktop/tdesktop/dev • 6cca2d8 • 4 files, +116/-12
Slightly improved style of local storage section for limit sliders.

telegramdesktop/tdesktop/dev • b9ad1f7 • 1 files, +4/-2
Improved removal of pinned chats from chat filter folders.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 5c5baca • 30 files, +1069/-199
Update API scheme to layer 226. Guard-bots.

telegramdesktop/tdesktop/dev • ec0d523 • 2 files, +13/-0
Fix re-assigning guard bot.

telegramdesktop/tdesktop/dev • b1e012c • 14 files, +91/-26
Update API scheme to layer 227.

telegramdesktop/tdesktop/dev • d186e90 • 14 files, +1290/-64
Handle new types of IV blocks.

telegramdesktop/tdesktop/dev • 2f6c10d • 16 files, +559/-41
Simple rich message view in separate window.

telegramdesktop/tdesktop/dev • 5c825f3 • 28 files, +4170/-269
Support basic display of IV in messages.

telegramdesktop/tdesktop/dev • 304d42a • 2 files, +53/-13
[ai] Another shot at trailing return types rules.

telegramdesktop/tdesktop/dev • 51f0803 • 8 files, +56/-21
Improve internal wrapped URLs processing.

telegramdesktop/tdesktop/dev • 615abf6 • 7 files, +154/-140
Keep webpage_id inside CustomUrl entity data.

telegramdesktop/tdesktop/dev • a2b18e3 • 18 files, +51/-33
Use MakeWrappedEmoji which forwards nullptr-s.

telegramdesktop/tdesktop/dev • 23626fd • 1 files, +1/-1
Fix child field access in styles.

telegramdesktop/tdesktop/dev • fa63d64 • 25 files, +1707/-469
Improve rich_message display styles.

telegramdesktop/tdesktop/dev • 94572a6 • 2 files, +32/-3
Added initial API support of link to PollMedia.

telegramdesktop/tdesktop/dev • 4887aa6 • 6 files, +188/-2
[poll-view] Added poll answer link display support.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • b6ccc35 • 4 files, +185/-9
[poll-create] Added poll answer link entry and preview.

telegramdesktop/tdesktop/dev • 5eb021e • 3 files, +273/-1
[poll-view] Added Open Link box with webpage preview.

telegramdesktop/tdesktop/dev • 596d8ee • 14 files, +431/-463
Introduce MarkdownArticlePaintContext.

telegramdesktop/tdesktop/dev • b5cbc26 • 1 files, +14/-8
Improve IV styles in messages.

telegramdesktop/tdesktop/dev • d91bdfc • 3 files, +3/-13
Remove unused PhotoData/DocumentData in Iv::Data.

telegramdesktop/tdesktop/dev • 2676be3 • 1 files, +1/-1
Fix build with Xcode.

telegramdesktop/tdesktop/dev • db03b23 • 20 files, +1636/-486
Support selection in rich messages.

telegramdesktop/tdesktop/dev • a4ce226 • 8 files, +19/-1
Update API scheme layer on 227.

telegramdesktop/tdesktop/dev • 599459a • 9 files, +1666/-353
Animated reveal for rich messages.

telegramdesktop/tdesktop/dev • 2325662 • 5 files, +35/-8
Ignore Thinking block for rich text flattening.

telegramdesktop/tdesktop/dev • d20bd0a • 16 files, +422/-68
Support animated Thinking block.

telegramdesktop/tdesktop/dev • fb3c415 • 2 files, +63/-73
Improve thinking block animation.

telegramdesktop/tdesktop/dev • a3fa017 • 2 files, +6/-13
Just show "Invalid formula" if needed.

telegramdesktop/tdesktop/dev • b8b4a24 • 4 files, +36/-12
Retain custom emoji so they don't reset.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • ccc0b22 • 5 files, +161/-85
Improve details/summary design.

telegramdesktop/tdesktop/dev • 8008711 • 16 files, +1359/-530
Style fixes and disable edit for now.

telegramdesktop/tdesktop/dev • 96a30ae • 4 files, +0/-16790
Remove test_markdown_iv module.

telegramdesktop/tdesktop/dev • ee9d27f • 2 files, +3/-4
Fix table title being centered.

telegramdesktop/tdesktop/dev • c6679ea • 16 files, +351/-65
Fix scrolling to anchors in IV.

telegramdesktop/tdesktop/dev • ab12f11 • 5 files, +101/-6
Add "Wrong layout?" button to IV.

telegramdesktop/tdesktop/dev • 91789fb • 15 files, +623/-44
Correctly replace IV when full is loaded.

telegramdesktop/tdesktop/dev • 7e0a5e7 • 1 files, +6/-3
Update API scheme on layer 227.

telegramdesktop/tdesktop/dev • d7ea6ed • 7 files, +145/-40
Support same_origin in webapps.

telegramdesktop/tdesktop/dev • 9849406 • 3 files, +66/-0
Support blockquotes with a block list inside.

telegramdesktop/tdesktop/dev • a5b9a14 • 5 files, +140/-0
Support rich messages in inline bots.

telegramdesktop/tdesktop/dev • 8c987c2 • 27 files, +256/-5954
Remove legacy web-based Instant View.

telegramdesktop/tdesktop/dev • 2a69915 • 5 files, +30/-24
Allow scheduling checklists.

telegramdesktop/tdesktop/dev • f83e91c • 6 files, +37/-94
Update API scheme on layer 227.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 3b767e1 • 1 files, +9/-8
Clamp schedule time to accepted values.

telegramdesktop/tdesktop/dev • a9a2114 • 14 files, +277/-2244
Unify MTP page parsing.

telegramdesktop/tdesktop/dev • f61be2e • 2 files, +50/-5
Restore embeds through data requests.

telegramdesktop/tdesktop/dev • e5c6823 • 1 files, +8/-4
Accept any photos in IV.

telegramdesktop/tdesktop/dev • 093562a • 22 files, +1502/-50
Initial structure for future editor.

telegramdesktop/tdesktop/dev • 4ecd4f4 • 3 files, +215/-23
Improve selecting in editor.

telegramdesktop/tdesktop/dev • 22487e6 • 6 files, +428/-165
Improve inline editor field commits.

telegramdesktop/tdesktop/dev • f9dcb49 • 25 files, +2162/-263
Add all buttons to the editor.

telegramdesktop/tdesktop/dev • 051763e • 32 files, +3298/-286
Initial attempt to send articles.

telegramdesktop/tdesktop/dev • 29a93b1 • 22 files, +576/-65
Make block Code allowing of RichText.

telegramdesktop/tdesktop/dev • e83a880 • 17 files, +3403/-191
Support complex selection in the editor.

telegramdesktop/tdesktop/dev • 6baa2fc • 10 files, +250/-326
Support most blocks on save in editor.

telegramdesktop/tdesktop/dev • e1e49ce • 2 files, +58/-28
Improve editor selection logic.

telegramdesktop/tdesktop/dev • ea438ae • 11 files, +117/-26
Correctly host rich message in the item.

#tdesktop
🫡3