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 • 1271882 • 1 files, +8/-8
Stop a read receipt from leaving two check marks on one message

An outgoing message in a group could end up rendering its sent and its read
status side by side — "18:11 ✓✓ ✓" — with the thread reply counter that used to
sit next to them gone.

setBubbleSendingStatus asked whether a status was already there with a
descendant query (`element.querySelector('.time-sending-status')`) but then
wrote over `element.firstElementChild`, which is only the same node while
nothing has been prepended in front of it. setBubbleRepliesCount prepends
exactly there: a message that gains its first thread reply after its bubble was
rendered gets `.time-replies` pushed ahead of the status. The next status change
— the read receipt — then replaced the counter instead of the old icon, and the
old icon stayed. Both carry `order: 5` against the time's `0`, so they line up
after the time in DOM order, newest first. The `!status` branch had the mirror
of the same bug: it removed the first child and left the status alone.

The two lookups now name the node they intend to touch, so a status replaces a
status and a missing one is prepended. setBubbleRepliesCount gets the same
direct-child scope: once the status bug had eaten the outer `.time`'s counter,
its descendant query found the copy inside `.time-inner`, concluded the counter
was already mounted and never restored it — leaving the hidden spacer that
reserves the footer's width one element short of what is drawn.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

morethanwords/tweb/master • a5a90e7 • 4 files, +64/-2
Keep tag search input focused

#webk
🫡3
morethanwords/tweb/master • 3501e76 • 11 files, +107/-23
Take a frame's url and height as input rather than at face value

Three values a hosted frame — a mini app, a payment provider, an Instant View
embed — hands the client were used as given.

`path_full` from a `web_app_open_tg_link` event was pasted onto the bare host,
so a value that does not open with a slash landed in the host instead of the
path: '.evil.com/x' built https://t.me.evil.com/x. It walks out of the
registrable domain but not out of the client, because wrapUrl's t.me regexp is
not anchored at its end and matches the result anyway, handing it to the `im`
handler, which reads the parsed path and never the href — so the link opens a
username. Both call sites build it through `getWebViewTgLink` now, which anchors
the path.

`resize_frame` from an Instant View embed set the block height with no ceiling.
The event is the embed's own way of asking for the room its content needs, and
the document that sends it is third party by definition — after a navigation
away, not even the one the block asked for — so the height is capped at four
viewports.

`keyboardButtonUrlAuth.url` reached `window.open()` raw, the one url in the
client that skipped `safeWindowOpen`; the server rejects a non-https button url
today, which is what kept it out of reach. Its local `openWindow` wrapper is
gone. The helper it now shares, meanwhile, repeated wrapUrl's protocol filter
for none of its callers, and most of them pass a url straight off the wire — a
web app event, a gift's listing url, a bot's privacy policy. The filter lives in
`normalizeUrlProtocol` and runs there too, replacing the three hand-rolled
copies of it.

Untouched: the bridge still authorizes an inbound message by WindowProxy
identity alone unless the server asked for `same_origin`, and still answers a
frame it is not bound to at '*'. Binding it by default would break the
cross-origin hops the opt-in exists to permit — a 3DS redirect, an OAuth leg.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

#webk
🫡3
UnigramDev/Unigram/build-from-scratch • e4c521d • 4 files, +113/-28
Give each vcpkg triplet its own install root

UnigramDev/Unigram/build-from-scratch • e724105 • 1 files, +24/-2
Accept a separated -arch list in the TDLib build script

UnigramDev/Unigram/build-from-scratch • c666206 • 2 files, +24/-0
Name the npm command when editor.html is missing

UnigramDev/Unigram/build-from-scratch • edba7a4 • 2 files, +13/-2
Restore packages.config projects from the build scripts

UnigramDev/Unigram/build-from-scratch • 1d275bb • 1 files, +2/-0
Build the native components before Telegram.Modern

UnigramDev/Unigram/build-from-scratch • 8d2a2ea • 1 files, +2/-1
Drop the Alternative manifest from an Original build

UnigramDev/Unigram/build-from-scratch • 022acc1 • 1 files, +18/-0
Package the language resource maps in the Modern bundle

UnigramDev/Unigram/build-from-scratch • 62fb379 • 1 files, +14/-0
Scope the store build mode to the packaging project

UnigramDev/Unigram/build-from-scratch • 1e10548 • 11 files, +16/-22
Keep one signing certificate at the repository root

UnigramDev/Unigram/build-from-scratch • 0b2c199 • 1 files, +1/-1
Point Build.ps1 at the renamed solution

UnigramDev/Unigram/build-from-scratch • d878c1d • 1 files, +0/-4
Stop warning that ARM64 has never been through ILC

UnigramDev/Unigram/build-from-scratch • bcfb2e9 • 2 files, +15/-12
Record what the from-scratch build verified

#unigram
🫡2
UnigramDev/Unigram/build-from-scratch • a0da414 • 2 files, +13/-2
Restore packages.config projects from the build scripts

UnigramDev/Unigram/build-from-scratch • 32e629c • 1 files, +2/-0
Build the native components before Telegram.Modern

UnigramDev/Unigram/build-from-scratch • 3200fb6 • 1 files, +2/-1
Drop the Alternative manifest from an Original build

UnigramDev/Unigram/build-from-scratch • b41af38 • 1 files, +18/-0
Package the language resource maps in the Modern bundle

UnigramDev/Unigram/build-from-scratch • 03ebf6a • 1 files, +14/-0
Scope the store build mode to the packaging project

UnigramDev/Unigram/build-from-scratch • 36ffdcd • 11 files, +16/-22
Keep one signing certificate at the repository root

UnigramDev/Unigram/build-from-scratch • 37a822a • 1 files, +1/-1
Point Build.ps1 at the renamed solution

UnigramDev/Unigram/build-from-scratch • 3bdfcd8 • 1 files, +0/-4
Stop warning that ARM64 has never been through ILC

UnigramDev/Unigram/build-from-scratch • 8587bfd • 2 files, +15/-12
Record what the from-scratch build verified

UnigramDev/Unigram/build-from-scratch • 11424be • 4 files, +411/-1
Check in the assembled editor.html

#unigram
🫡1
telegramdesktop/tdesktop/public-canary • e547b2b • 1 files, +29/-1
Fixed missing ATL breaking breakpad build in canary Windows job.

#tdesktop
🫡3
UnigramDev/Unigram/group-call-participants • 6c60907 • 7 files, +510/-383
Split group call participants into a model and a windowed view

#unigram
UnigramDev/Unigram/streaming-download-buttons • 3dc54fc • 14 files, +112/-112
Rename MessageContentState to FileButtonState

UnigramDev/Unigram/streaming-download-buttons • 244c0bf • 3 files, +73/-0
Track the files a reader is streaming

UnigramDev/Unigram/streaming-download-buttons • f09c9d3 • 14 files, +197/-138
Hide a download that only feeds a reader from the file buttons

#unigram
UnigramDev/Unigram/group-call-participants • eed9d17 • 7 files, +510/-382
Split group call participants into a model and a windowed view

#unigram
UnigramDev/Unigram/animatedimage-imagesource • f1e08a6 • 1 files, +46/-30
Read the animated frame from the presenter, not from ImageBrush.ImageSource

#unigram
UnigramDev/Unigram/develop • a769cb2 • 24 files, +56/-0
TEMP: trace LoadMoreItemsAsync

UnigramDev/Unigram/develop • b6e32f9 • 4 files, +113/-28
Give each vcpkg triplet its own install root

UnigramDev/Unigram/develop • ff1820e • 1 files, +24/-2
Accept a separated -arch list in the TDLib build script

UnigramDev/Unigram/develop • 811b1f8 • 2 files, +13/-2
Restore packages.config projects from the build scripts

UnigramDev/Unigram/develop • 7a64fb4 • 1 files, +2/-0
Build the native components before Telegram.Modern

UnigramDev/Unigram/develop • ed6cffa • 1 files, +2/-1
Drop the Alternative manifest from an Original build

UnigramDev/Unigram/develop • 910d679 • 1 files, +18/-0
Package the language resource maps in the Modern bundle

UnigramDev/Unigram/develop • 6a15dea • 1 files, +14/-0
Scope the store build mode to the packaging project

UnigramDev/Unigram/develop • 306b590 • 11 files, +16/-22
Keep one signing certificate at the repository root

UnigramDev/Unigram/develop • 0b0d0ac • 1 files, +1/-1
Point Build.ps1 at the renamed solution

UnigramDev/Unigram/develop • b7523df • 1 files, +0/-4
Stop warning that ARM64 has never been through ILC

UnigramDev/Unigram/develop • c2d4d34 • 2 files, +15/-12
Record what the from-scratch build verified

UnigramDev/Unigram/develop • 08ea0a1 • 4 files, +411/-1
Check in the assembled editor.html

#unigram
telegramdesktop/tdesktop/dev • aef8afe • 4 files, +247/-106
Moved out corner status from view gif to separated module.

telegramdesktop/tdesktop/dev • 4c2bde6 • 5 files, +169/-71
Moved out video message seek ring from view gif to separated module.

telegramdesktop/tdesktop/dev • d0c45c8 • 5 files, +205/-46
Added seek ring with handle to paused video messages.

telegramdesktop/tdesktop/dev • 5944286 • 4 files, +101/-15
Added frame preview while seeking in video messages.

telegramdesktop/tdesktop/dev • fdf9661 • 8 files, +1143/-14
[iv-editor] Added slash menu with list of insertable blocks.

telegramdesktop/tdesktop/dev • 47d26f3 • 2 files, +24/-1
[iv-editor] Added caret restore after inline button and formula edit.

Related commits: 3cb72867d6, 6b970dfee9.

telegramdesktop/tdesktop/dev • 5291c5c • 2 files, +68/-5
[iv-editor] Added restore of trimmed spaces on inline field commit.

Related commit: 4ddd36665b.

telegramdesktop/tdesktop/dev • 838c6ca • 1 files, +1/-1
Fixed macOS libraries prune dropping pkg-config files for FFmpeg build.

telegramdesktop/tdesktop/dev • b925528 • 2 files, +54/-0
Added cache of participant ban state to chat participants API.

telegramdesktop/tdesktop/dev • 52cd64b • 2 files, +53/-0
Added ban and unban of monoforum peer to sublist menus.

telegramdesktop/tdesktop/dev • 8c53eef • 3 files, +25/-0
[thanos] Fixed lost collapse animation on delete in new chat view.

telegramdesktop/tdesktop/dev • 5a507f5 • 1 files, +21/-0
[thanos] Moved collapse gaps with content in history view list widget.

telegramdesktop/tdesktop/dev • 36f4391 • 1 files, +3/-0
[thanos] Added scroll pin after list resize during collapse.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 3f6639c • 1 files, +1/-1
[thanos] Replaced direct scroll with syntetic one during collapse.

telegramdesktop/tdesktop/dev • 0ea3ac9 • 3 files, +8/-1
[thanos] Fixed lost collapse for all but first of deleted messages.

telegramdesktop/tdesktop/dev • 00cb5fd • 4 files, +75/-43
[thanos] Replaced assumed collapse gap height with measured one.

telegramdesktop/tdesktop/dev • ad1e567 • 1 files, +20/-1
Fixed rich paste toast offering editor for plain text lists.

Related commit: 98591aa959.

telegramdesktop/tdesktop/dev • 415efce • 5 files, +37/-24
Fixed rich paste toast offering formatting restore for markdown.

Related commit: 3605382c0d.

telegramdesktop/tdesktop/dev • c637087 • 1 files, +1/-1
Replaced bold with italic for double underscore in markdown import.

Related commit: 4076184532.

telegramdesktop/tdesktop/dev • a2f030a • 7 files, +181/-45
Added offer to apply pasted markdown in message field.

Related commit: 3605382c0d.

telegramdesktop/tdesktop/dev • 6c10c0a • 2 files, +98/-66
Replaced paint flag with single action for Gif icon and click.

Related commit: 41985c0a5f.

telegramdesktop/tdesktop/dev • c5c3f4a • 2 files, +0/-7
Fix chat closing and removing from list on restricted self receive.

I hope this fixes #31172, fixes #31174.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev • cb81784 • 1 files, +1/-1
Added deferral of back click handling in history view top bar widget.

telegramdesktop/tdesktop/dev • 9736790 • 1 files, +3/-0
Fixed slide animation swallowing back clicks in chat section.

telegramdesktop/tdesktop/dev • ea53b55 • 1 files, +1/-1
Added marking as read on Enter with empty field in chat section.

Related commit: b978bc4876.

telegramdesktop/tdesktop/dev • b8126b9 • 2 files, +34/-21
Added marking as read on Enter without compose field in chat section.

Related commit: b978bc4876.

#tdesktop
🫡3
telegramdesktop/tdesktop/public-canary • a793d4c • 1 files, +50/-20
Install ATL for the pinned Windows toolset

#tdesktop
🫡3
UnigramDev/Unigram/develop • 3126442 • 1 files, +4/-4
Guard for disconnected window

UnigramDev/Unigram/develop • f70ee90 • 3 files, +67/-39
Safely cast to ICompositionVisualSurfacePartner

UnigramDev/Unigram/develop • 466e8af • 1 files, +1/-1
Pass the right xaml root to gallery

UnigramDev/Unigram/develop • 9a289f8 • 1 files, +17/-8
Fix share window initialization

UnigramDev/Unigram/develop • 3baac56 • 6 files, +560/-22
Make the Win32 window answer for what a UWP one does

UnigramDev/Unigram/develop • 35d5a16 • 6 files, +292/-3
Put Mica behind the Win32 windows

UnigramDev/Unigram/develop • ec1089f • 1 files, +4/-0
Translate more errors

#unigram
UnigramDev/Unigram/animatedimage-imagesource • b85ce69 • 1 files, +42/-26
Hand the frame geometry over instead of the buffer

#unigram
telegramdesktop/tdesktop/public-canary • 0cbbae8 • 3 files, +0/-0
Delete unused account_check icon rasters

Task: 2026/08/18/delete-orphaned-account-check-icon

telegramdesktop/tdesktop/public-canary • 980ea85 • 2 files, +11/-2
Correct shared media index writes and viewer counts

Task: 2026/08/18/repair-shared-media-index-and-count-bookkeeping

telegramdesktop/tdesktop/public-canary • c161ac6 • 1 files, +16/-3
Re-index a sent message only when its thread moves

Task: 2026/08/18/repair-shared-media-index-and-count-bookkeeping

telegramdesktop/tdesktop/public-canary • 03fe6f3 • 2 files, +60/-6
Derive the pinned bar's topic root from the thread

Task: 2026/08/19/align-replies-thread-shared-media-attribution

telegramdesktop/tdesktop/public-canary • d0c1c03 • 2 files, +1/-1
Pair the uploaded media edit's shared media removal

Task: 2026/08/19/pair-media-edit-removal-with-index-add

telegramdesktop/tdesktop/public-canary • 7802c83 • 1 files, +20/-5
Drop a sent message from the shared media lists it left

Task: 2026/08/19/match-sent-message-removal-to-written-mask

telegramdesktop/tdesktop/public-canary • 64940be • 1 files, +3/-3
Don't keep a media reference across rich page changes

Task: 2026/08/19/refetch-saved-media-after-rich-page-changes

telegramdesktop/tdesktop/public-canary • c9d3ebc • 5 files, +30/-13
Don't lower shared media counts for unindexed messages

Task: 2026/08/20/stop-unmatched-removal-lowering-shared-media-counts

telegramdesktop/tdesktop/public-canary • 55ec45c • 7 files, +40/-56
Tie stored pinned index writes to the pinned flag

Task: 2026/08/19/unify-pinned-index-writers

telegramdesktop/tdesktop/public-canary • 2c01caa • 2 files, +52/-1
Write the pinned thread index only in forum peers

Task: 2026/08/20/stop-orphaning-general-id-shared-media-lists

telegramdesktop/tdesktop/public-canary • c001c72 • 2 files, +5/-2
Give a saved sublist its own pinned message list

Task: 2026/08/19/make-saved-sublist-pinned-bar-read-one-list

#tdesktop
🫡3
telegramdesktop/tdesktop/public-canary • 1848f29 • 1 files, +6/-0
Retire shared media of a deleted topic with no object

Task: 2026/08/20/retire-forum-media-lists-without-topic-objects

telegramdesktop/tdesktop/public-canary • 6464b81 • 5 files, +31/-0
Retire all topic shared media when a forum is destroyed

Task: 2026/08/20/retire-stranded-forum-media-keys-on-forum-teardown

telegramdesktop/tdesktop/public-canary • a55a929 • 1 files, +6/-4
Guard the live-topic media unload against a zero root

Task: 2026/08/20/guard-live-topic-unload-against-zero-root

telegramdesktop/tdesktop/public-canary • 2833aba • 1 files, +6/-4
Guard the forum teardown media unload against a zero root

Task: 2026/08/20/guard-forum-teardown-unload-against-zero-root

telegramdesktop/tdesktop/public-canary • ddd4ed1 • 2 files, +4/-4
Resolve the self peer sublist in the shared resolver

Task: 2026/08/20/resolve-self-peer-sublist-in-shared-resolver

telegramdesktop/tdesktop/public-canary • cf34af6 • 2 files, +0/-2
Drop the write-only monoforum id from top controls

Task: 2026/08/20/retire-write-only-top-controls-monoforum-peer-id

telegramdesktop/tdesktop/public-canary • 679a20a • 1 files, +1/-1
Read the inbox when a sublist has no parent chat

Task: 2026/08/20/restore-read-inbox-on-parentless-sublist-send

telegramdesktop/tdesktop/public-canary • fff93ae • 1 files, +2/-8
Use the shared sublist resolver in the player panel

Task: 2026/08/20/collapse-player-panel-sublist-onto-shared-resolver

telegramdesktop/tdesktop/public-canary • 4f343be • 4 files, +35/-0
Request pinned messages when a pin is not loaded

Task: 2026/08/20/reach-unloaded-pin-on-complete-pinned-slice

telegramdesktop/tdesktop/public-canary • 3636769 • 6 files, +21/-10
Open a saved sublist's own shared media page

Task: 2026/08/20/open-saved-sublist-own-info-media-page

#tdesktop
🫡3
telegramdesktop/tdesktop/public-canary • 43d9b1a • 9 files, +63/-43
Align sublist media count, query and window keys

Task: 2026/08/21/align-sublist-media-count-query-and-window-keys

telegramdesktop/tdesktop/public-canary • 2ac8f4d • 4 files, +55/-3
Keep Info pages on their topic or sublist

Task: 2026/08/21/preserve-info-thread-identity-and-lifetime

telegramdesktop/tdesktop/public-canary • 8f70653 • 1 files, +12/-10
Tear down Info after a sublist is destroyed

Task: 2026/08/21/preserve-info-thread-identity-and-lifetime

telegramdesktop/tdesktop/public-canary • 9f2b451 • 1 files, +14/-12
Clear Info immediately when its sublist dies

Task: 2026/08/21/preserve-info-thread-identity-and-lifetime

telegramdesktop/tdesktop/public-canary • 15d3162 • 1 files, +9/-13
Always drop an Info wrap when its sublist dies

Task: 2026/08/21/preserve-info-thread-identity-and-lifetime

telegramdesktop/tdesktop/public-canary • 392e20d • 6 files, +90/-34
Reach unloaded pins on thread keys and updates

Task: 2026/08/21/reach-unloaded-pins-across-thread-and-update-paths

telegramdesktop/tdesktop/public-canary • a8e41c8 • 3 files, +11/-4
Rebind Info wrap teardown when a sublist is replaced

Task: 2026/08/21/resubscribe-info-wrap-teardown-on-replaced-sublist

telegramdesktop/tdesktop/public-canary • dc3edf3 • 2 files, +14/-10
Tear down Layer Info instantly when its sublist dies

Task: 2026/08/21/resubscribe-info-wrap-teardown-on-replaced-sublist

telegramdesktop/tdesktop/public-canary • c6c538f • 2 files, +17/-14
Queue Info wrap teardown off sublist destroyed()

Task: 2026/08/21/resubscribe-info-wrap-teardown-on-replaced-sublist

telegramdesktop/tdesktop/public-canary • 2a7abec • 3 files, +19/-21
Hide Layer Info before its sublist is erased

Task: 2026/08/21/resubscribe-info-wrap-teardown-on-replaced-sublist

telegramdesktop/tdesktop/public-canary • 8b579dc • 2 files, +15/-18
Preserve teardown stream across Info wrap removal

Task: 2026/08/21/resubscribe-info-wrap-teardown-on-replaced-sublist

#tdesktop
🫡3
telegramdesktop/tdesktop/public-canary • e6ffaa2 • 1 files, +0/-1
Remove stale Info teardown implementation note

Task: 2026/08/21/resubscribe-info-wrap-teardown-on-replaced-sublist

telegramdesktop/tdesktop/public-canary • a4bb361 • 1 files, +3/-2
Keep saved sublists alive through item teardown

Task: 2026/08/21/finish-info-wrap-sublist-teardown-past-item-destroy

telegramdesktop/tdesktop/public-canary • aed8ff5 • 4 files, +39/-20
Align sublist media counts, windows and titles

Task: 2026/08/21/align-sublist-media-count-window-and-title

telegramdesktop/tdesktop/public-canary • b8b2b2c • 1 files, +7/-5
Show the new window tooltip only on entries that have one

Task: 2026/08/23/verify-saved-sublist-media-surfaces-and-gate-tooltip

telegramdesktop/tdesktop/public-canary • d431e37 • 4 files, +90/-67
Unify sublist media window ids and persisted titles

Task: 2026/08/23/unify-sublist-separate-id-and-window-naming-rulings

telegramdesktop/tdesktop/public-canary • cbc1eea • 3 files, +26/-7
[ai] Refuse implausible test watchdog values

Task: 2026/08/23/refuse-implausible-test-watchdog-values

telegramdesktop/tdesktop/public-canary • 47f965c • 1 files, +2/-2
Limit media topic context to forum chats

telegramdesktop/tdesktop/public-canary • c8ec588 • 4 files, +7/-0
Add public keys for canary channel.

telegramdesktop/tdesktop/public-canary • c4a2f0a • 9 files, +1279/-0
Add v2 update verification core and build channels

telegramdesktop/tdesktop/public-canary • e45bbea • 3 files, +672/-0
Support v2 channel packing in the Packer

telegramdesktop/tdesktop/public-canary • 2a39af0 • 7 files, +662/-141
Verify, fetch and install v2 updates in the client

telegramdesktop/tdesktop/public-canary • 267242a • 2 files, +9/-1
Show canary version and skip changelogs on canary

#tdesktop
🫡3