Telegram github commits and releases
4.42K subscribers
601 files
21K links
Broadcast from the most important Telegram clients' repositories
Download Telegram
UnigramDev/Unigram/develop • 39ce27d • 1 files, +13/-3
Never lay out the incoming page from the navigated handler

Writing a scroll mode on a scroller that is already laid out reconfigures its
manipulation, and that runs a layout pass over the whole tree. The incoming page
is the frame content by then but NavigateToAsync has not activated it, so
ChatView was arranged without a view model: it threw, and the exception unwound
the navigation before anything could be activated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 4878bfb • 2 files, +371/-52
Match Chrome's back gesture, in distance and in affordance

The pan commits at 30% of the display's larger edge rather than at a fixed 120,
which is what makes the distance feel the same whatever the window size, and the
first 60 DIPs only recognise the gesture. The chip is Chrome's: a 20-radius
circle over a ripple that grows to 40 and bursts to 48 on commit, travelling 146
with 72 of rubber band past it, inverting to the accent as it activates, and
retreating over a duration proportional to how far it came.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 4a16484 • 2 files, +63/-4
Size and load the chat search autocomplete from its own collection

The list is handed an empty collection that fills asynchronously, so a null
check on the source never saw a row: it now follows CollectionChanged too, and
starts the first page itself, since a collapsed list is never measured and its
panel never asks. Member rows are 44, not the 64 a ChatCell declares.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • a156a68 • 3 files, +101/-23
Snap a word or paragraph to the line the pointer is on

A paragraph break takes no rendered unit, so the end of a line and the start of
the next share an index: expanding from it always resolved to the following
paragraph, and a double tap on an empty line selected the next line's first
word. Hit-testing now reports which paragraph the point landed in, and reports
none for an empty line, where there is nothing to expand to.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 9147943 • 1 files, +61/-9
Show a hand cursor over an inline button

The I-beam was driven for anything that isn't a hyperlink, buttons included,
and a disabled button takes no pointer input at all, so the pointer fell
through to the text behind it: its wrapper now carries a transparent
background, and the negative margin with it, to cover what the button paints.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

#unigram
UnigramDev/Unigram/develop • 03f39d7 • 1 files, +19/-4
Flatten an inline button's label as plain text

The label's own entities competed with the button entity over the same range,
and a run carrying both reports the inner type: a label of custom emoji
rendered as emoji, with no button around them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 1ea35f4 • 1 files, +23/-2
Stop waiting for TDLib to transform a frame once the call is closing

Transform blocks a media thread until TDLib answers, and Dispose blocks TDLib's
update thread until tgcalls has stopped — and that is the thread the answer would
come from. A transform still waiting when Dispose runs holds the two against each
other, with the call window frozen behind the manager lock.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 1a017ae • 1 files, +45/-32
Stop the group call managers outside the manager lock

Stop waits for the tgcalls threads to wind down, and the UI thread sits on the
lock for as long as that takes, which is what freezes the call window while a
call is torn down. The lock only has to cover the fields: once they are null the
UI thread has nothing left to reach, and the instance the caller took out is its
own to stop.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • fbb0e7f • 1 files, +51/-23
Tear the group call managers down off TDLib's update thread

Stopping a manager waits for the tgcalls threads behind it, and one of those can
be waiting on a request whose answer arrives on the very thread Dispose runs on.
EndScreenSharing has the mirror problem: called from the UI thread, it held the
window for the whole teardown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 3f8a338 • 2 files, +9/-2
Fix the order and the icons of the group call participant list

A participant moving down the list was inserted one place too low, since the
index was measured before the removal shifted everything after it. Sorting only
looked right for participants moving up, and the list drifts as people speak.

The icon for someone sharing a screen but no camera was behind a condition that
repeated the one above it, so the row kept whatever the recycled container had.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

#unigram
UnigramDev/Unigram/develop • 53f18ac • 1 files, +13/-2
Take the video list down with the pinned cell it belongs to

The list exists to hold the videos the pinned cell covers, so when that cell goes
away the grid lays them out again while the list still holds them, and every
remaining participant shows up twice. Clearing the pin was not enough: nothing
tore the list down, and the participant rows stayed hidden with it.

LoadVideoInfo replays every participant, which could put the pinned endpoint in
the list the same way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • bf72417 • 1 files, +67/-14
Pin a shared screen without being asked to

A screen share takes the pinned slot as it arrives, and again if the pinned cell
goes away while another one is running. One automatic pin replaces another, but a
cell the user pinned themselves is never taken over.

Selecting a cell moves out of the click handler, since both paths need it. The
only difference is that an automatic pin does not scroll the compact list to the
top, which would move it under whoever is reading it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

UnigramDev/Unigram/develop • 49d97ae • 1 files, +8/-0
Let a new back gesture take the chip from a burst still playing

The burst animates the chip's opacity to zero, and a property under a running
animation ignores direct writes, so the next gesture's reset was dropped and the
burst left the chip hidden for the whole of it - while the tracker carried the
gesture through to the navigation regardless.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

#unigram
UnigramDev/Unigram/playback-shuffle • e6346dd • 3 files, +215/-36
Implement shuffle

The button existed in two places and set IsReversed, since shuffle itself
was never written. It now walks a fixed shuffled order, so Previous goes
back to what was actually heard, and pages loaded later are folded into
the part not yet played.

Paging is measured against the playlist rather than the order being
walked, which shuffle reaches the ends of in no particular order.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

#unigram
telegramdesktop/tdesktop/nightly • 565c076 • 5 files, +2/-67
Removed protobuf dependency from cld3 and build recipes.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly • af5bb1b • 1 files, +2/-0
Enabled LTO in Release configuration on Windows CI.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly • 37b4ed4 • 1 files, +24/-11
Switched macOS CI to Release build with LTO on nightly.

#tdesktop
🫡3
UnigramDev/Unigram/develop • ffdc081 • 5 files, +31/-23
Update emoji to Unicode 17.0

UnigramDev/Unigram/develop • 37b0fc4 • 1 files, +0/-0
Trim emoji font size

UnigramDev/Unigram/develop • 6b4b9cd • 1 files, +3/-3
Fix shift when sending a message after many unread messages

UnigramDev/Unigram/develop • 761ab7b • 1 files, +1/-0
Clear children before add

#unigram
UnigramDev/Unigram/record-start-on-press • 51b52ea • 1 files, +19/-0
Note the sixty-second pause and message drafts as todo

The official apps stop at sixty seconds and show the pause UI rather than
sending, which 4.3 does not, and they keep an unsent recording as a draft,
which Unigram has no notion of.

UnigramDev/Unigram/record-start-on-press • 0889840 • 1 files, +4/-0
Note that the sixty-second stop cannot be resumed from

The limit reuses the pause UI, but a video message gets no more time, so the
pause button has to go rather than offer its resume glyph.

UnigramDev/Unigram/record-start-on-press • e892215 • 1 files, +3/-10
Drop two flags the timer and the session already answer for

_recordAudioVideoRunnableStarted said what _timer.IsEnabled says, and
_calledRecordRunnable was only ever read where a recording exists, which the
session knows.

UnigramDev/Unigram/record-start-on-press • 4da4557 • 1 files, +8/-1
Don't record for a press that was let go while rights were checked

The check is awaited between the press and the timer, so a release during it
left the press running: the timer started with no pointer down, and a recording
began three hundred milliseconds later that nobody was holding.

UnigramDev/Unigram/record-start-on-press • 3069c66 • 1 files, +21/-4
Close off opening the device on the press

Warming the device up under the hold timer works, but it marks the microphone
and the camera as accessed for a tap that only switches mode, and lights the
privacy LED on hardware that has one. Written down so it isn't tried again.

#unigram
UnigramDev/Unigram/develop • cf37ec8 • 1 files, +19/-0
Note the sixty-second pause and message drafts as todo

The official apps stop at sixty seconds and show the pause UI rather than
sending, which 4.3 does not, and they keep an unsent recording as a draft,
which Unigram has no notion of.

UnigramDev/Unigram/develop • 134180d • 1 files, +4/-0
Note that the sixty-second stop cannot be resumed from

The limit reuses the pause UI, but a video message gets no more time, so the
pause button has to go rather than offer its resume glyph.

UnigramDev/Unigram/develop • e71214d • 1 files, +3/-10
Drop two flags the timer and the session already answer for

_recordAudioVideoRunnableStarted said what _timer.IsEnabled says, and
_calledRecordRunnable was only ever read where a recording exists, which the
session knows.

UnigramDev/Unigram/develop • 57630df • 1 files, +8/-1
Don't record for a press that was let go while rights were checked

The check is awaited between the press and the timer, so a release during it
left the press running: the timer started with no pointer down, and a recording
began three hundred milliseconds later that nobody was holding.

UnigramDev/Unigram/develop • 86ad43f • 1 files, +21/-4
Close off opening the device on the press

Warming the device up under the hold timer works, but it marks the microphone
and the camera as accessed for a tap that only switches mode, and lights the
privacy LED on hardware that has one. Written down so it isn't tried again.

#unigram
telegramdesktop/tdesktop/nightly • 74da0c3 • 1 files, +30/-1
Enabled LTO in Release configuration on Windows CI.

telegramdesktop/tdesktop/nightly • f7c7386 • 1 files, +24/-11
Switched macOS CI to Release build with LTO on nightly.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly • 9ac4970 • 1 files, +35/-1
Enabled LTO in Release configuration on Windows CI.

telegramdesktop/tdesktop/nightly • eb2a3dc • 1 files, +24/-11
Switched macOS CI to Release build with LTO on nightly.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly • 396ada1 • 1 files, +38/-1
Enabled LTO in Release configuration on Windows CI.

telegramdesktop/tdesktop/nightly • 6cda4dd • 1 files, +24/-11
Switched macOS CI to Release build with LTO on nightly.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly • 4f1f0f5 • 3 files, +138/-1
Added packing of Lottie animations into tgs at build time.

telegramdesktop/tdesktop/nightly • 567462e • 226 files, +1071/-112
Replaced animation tgs blobs with plain json sources.

#tdesktop
🫡2
UnigramDev/Unigram/develop • ec0529b • 1 files, +0/-0
Fix space char in emoji font

UnigramDev/Unigram/develop • b9ed1af • 1 files, +4/-1
Normalize log tail

UnigramDev/Unigram/develop • 1914371 • 1 files, +18/-2
Log focus manager exceptions

UnigramDev/Unigram/develop • 7189e2b • 1 files, +16/-0
Try to park window focus before swapping content

UnigramDev/Unigram/develop • 9d60582 • 1 files, +4/-1
Enable bubble tails only in high performance mode

UnigramDev/Unigram/develop • c3cdae3 • 1 files, +1/-1
Don't ignore source ImageBrush

UnigramDev/Unigram/develop • a99cbaf • 31 files, +222/-87
Update TDLib

UnigramDev/Unigram/develop • 0907419 • 3 files, +11/-12
Update webrtc to the 2026-08-19 archives, built with Visual Studio 18

UnigramDev/Unigram/develop • 6fcff0b • 6 files, +29/-0
Split generators into two projects

UnigramDev/Unigram/develop • 6fb1c62 • 10 files, +230/-64
Support message ephemeral content

UnigramDev/Unigram/develop • a2e5b96 • 6 files, +63/-6
Handle unsupported rich message blocks

UnigramDev/Unigram/develop • c2b0239 • 1 files, +24/-0
Store community full info

UnigramDev/Unigram/develop • a16508c • 1 files, +3/-0
Unsubscribe events on unlock

UnigramDev/Unigram/develop • dafbee5 • 1 files, +7/-3
Fix VideoAnimation getting stuck on read loop

UnigramDev/Unigram/develop • 0769a06 • 1 files, +6/-1
Capture RPC_E_WRONG_THREAD too

#unigram
UnigramDev/Unigram/develop • ba5dbcb • 13 files, +1220/-43
Animate deleted messages coming apart

A frozen visual surface captures at the compositor commit that follows the
freeze, so the view's mirror holds a removal back for one frame to give it one.
The view model applies updateDeleteMessages unchanged.

IsInitial becomes AnimationState, which is also how the view tells a deletion
from a row leaving the list for any other reason. The renderer is a diagnostics
setting, off by default in the Store build.

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

UnigramDev/Unigram/develop • c290b37 • 1 files, +8/-1
Try to fix null ref

UnigramDev/Unigram/develop • 24927ab • 1 files, +73/-9
Park focus asynchronously when swapping window content

Control.Focus answers before the focus pipeline has run, and reports success
even when a LosingFocus handler cancels the move underneath it. Focus stayed
on the passcode field, which was then detached with it, leaving the focus
manager pointing at an element XAML can no longer resolve a peer for.

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

#unigram
UnigramDev/Unigram/develop • c3bf937 • 4 files, +522/-14
Update notes, add changelog skill

#unigram
Ajaxy/telegram-tt/master • b70a9f3 • 3 files, +4/-4
12.0.40

Ajaxy/telegram-tt/master • 00b3e6c • 28 files, +627/-17
Profile: Add "Playlist" tab with saved music

Lists the music a peer has added to their profile, next to Posts and Gifts
and ahead of the shared media tabs. The tab is shown when `userFull` reports
saved music, so it costs no extra request.

Tracks come from `users.getSavedMusic` as bare documents, so they are played
inline through their own `savedMusic` track queue, which advances in listing
order. `TrackId` accepts document-based ids alongside message-based ones, and
file references are repaired via `users.getSavedMusicByID`.

Also keeps the current user's own playlist in step with "Add to Profile", so
toggling does not need a refetch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Ajaxy/telegram-tt/master • a91fb87 • 2 files, +8/-1
Modals: Fix link overflow for modal windows (#7216)

Ajaxy/telegram-tt/master • a821d5d • 5 files, +47/-22
TLottie: Bump renderer (#7227)

Ajaxy/telegram-tt/master • 81fe0ff • 80 files, +4141/-1446
Emoji Picker: Add search (#7210)

Ajaxy/telegram-tt/master • 4542449 • 1 files, +5/-1
Round Video: Fix width (#7226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

Ajaxy/telegram-tt/master • 8b63941 • 144 files, +593/-569
[Build]

#webz
UnigramDev/Unigram/develop • 8b28e13 • 1 files, +28/-0
Note playing a paused recording back as todo

The paused bar draws a waveform with nothing to press, and neither the ogg nor
the mp4 is a finished file at the pause, so what gets played is the question the
task turns on.

#unigram
TGX-Android/Telegram-X/main • dc7a0be • 110 files, +13/-3
Reduce non-latest APK size

TGX-Android/Telegram-X/main • 39e7361 • 1 files, +1/-1
Version bump to `1805`

#tgxandroid
🫡3