Telegram github commits and releases
4.85K subscribers
601 files
19.1K links
Broadcast from the most important Telegram clients' repositories
Download Telegram
morethanwords/tweb/master5f6a6b31 files, +1/-1
fix: restore sticker suggestions for custom emoji input

morethanwords/tweb/master28815483 files, +27/-16
fix: scheduled-view message lookups by id pulled another chat's message

Looking up a message by a bare id (getMessageByPeer / the string branch of
chat.getMessage(fullMid)) resolves against the per-peer history box and, for
legacy private-chat ids, the shared global history box — it never consults the
separate `_scheduled` box. So in the Scheduled view, copying or deleting a
message could grab a same-id message from a different chat.

- contextMenu: getSelectedMessagesText no longer re-fetches by id — the single
message uses the in-hand object, and a selection uses the storage-aware
selection.getSelectedMessages().
- chat.getMessage(FullMid): for our own scheduled peer, read from this chat's
(scheduled) storage instead of getMessageByPeer. Fixes the whole bubbles.ts
getMessage(fullMid) family in Scheduled at the chokepoint; gated, so
non-scheduled / Logs / cross-peer behavior is byte-for-byte unchanged.
- deleteMessages: use getScheduledMessageByPeer when type === Scheduled (history
fetch returned undefined/foreign messages, breaking the megagroup-admin and
giveaway checks).
- Document that ChatType.Logs has the same separate-box (`_logs`) shape but is
left wired to `_history` for now (works via fallbacks).

morethanwords/tweb/master623baf75 files, +151/-36
fix: release camera/mic when owner is torn down mid-getUserMedia

#webk
🫡2
morethanwords/tweb/master9ab78969 files, +300/-383
refactor(2fa): make the ported 2FA tabs idiomatic Solid

Replace the imperative innards of the seven 2FA tabs with JSX: `new SettingSection`
→ `<Section>`, manual `document.createElement` wrappers → JSX `<div class="...">`,
imperative `Button(...)` → `<Button>` (buttonTsx), `<InputFieldTsx>` for the email/
hint inputs, `<Show>` for the conditional buttons. Each component now returns JSX
mounted by the scaffold instead of appending to tab.scrollable.

Add a payload→title function form to the scaffold `title` option so dynamic titles
(passwordSet password/email, enterPassword first/current) are declared on the
scaffold rather than poked via tab.title in the component body. Imperative widgets
with no Solid alternative (PasswordMonkey/TrackingMonkey, PasswordInputField,
CodeInputFieldCompat, wrapStickerEmoji/lottie, ForgotPasswordLink) are embedded
via their containers. Runtime-verified in the worktree preview: passwordSet and
enterPassword render with correct sections/buttons/titles.

morethanwords/tweb/masterca4361c1 files, +66/-74
refactor(groupPermissions): idiomatic Solid Sections + signals

Return a JSX tree of <Section> instead of building SettingSections imperatively
and appending to tab.scrollable. The async/conditional parts use <Show> + signals
for the charge/boosters elements and the convert-to-gigagroup row, and the slow-mode
caption is a reactive signal driven by the range selector. Genuinely-imperative
widgets with no Solid alternative (ChatPermissions/CheckboxFields, RangeStepsSelector,
the participants chatlist, ScrollableLoader, the exception Rows) are embedded into
ref'd content divs. The ref-dependent build runs from onMount so the refs are mounted;
the promiseCollector still gates the open since onMount runs before its await. Drop
the redundant tab.title poke; the scaffold sets the static title. Runtime-verified.

morethanwords/tweb/master130fb6d2 files, +114/-133
refactor(myStories): idiomatic Solid placeholder + Section

Return JSX instead of building the DOM by hand: the placeholder (sticker / caption
/ Show-Archive button) is now JSX with <Button>, the archived-stories hint is a
<Section> driven by a reactive caption signal (sync for the self-archive case,
async once the chat broadcast-ness resolves), and the title moves to a payload
function on the scaffold (archive vs my). The already-Solid StoriesProfileList,
the lottie sticker and the header menu stay as-is, created from onMount so the
refs are mounted. Runtime-verified: placeholder/caption/button/stories render,
no stray section.

morethanwords/tweb/mastercc7649b2 files, +68/-67
refactor(editChatInviteLink): idiomatic Solid Sections

Return a JSX tree of <Section> with the name field as <InputFieldTsx>. The
broadcast-only paid/approve sections are Show-n on a reactive isBroadcast signal
with their rows held in element signals, and the number-of-uses section hides via
a classList signal. The genuinely-imperative widgets with no Solid alternative
(RangeStepsSelector, CheckboxField, InputStarsField, InputRightNumber) are embedded
into ref'd content divs. The title moves to a payload function on the scaffold
(edit vs new). The ref-dependent build runs from onMount. Runtime-verified.

#webk
🫡2
morethanwords/tweb/master9c9d9c11 files, +134/-177
refactor(chatFolders): idiomatic Solid Sections + Button

Return JSX: the sticker/caption are plain JSX, the create-folder control is a
<Button>, and the Filters / Recommended / View blocks are <Section>s whose hidden
state is driven by signals. The recommended section uses contentProps.ref so its
content element keeps the legacy name-first child layout (the slice(1) cleanup is
unchanged); the view section embeds the two RadioField rows. The dynamic folder
rows, Sortable and the lottie animation (no Solid alternative) are built from
onMount into the refs. Runtime-verified.

morethanwords/tweb/master8e6dafe1 files, +585/-575
refactor(privacyAndSecurity): idiomatic Solid Sections + Buttons

Return a JSX tree of six <Section>s instead of building SettingSections and
appending to tab.scrollable. The premium-dependent caption and the premium /
sensitive-content visibility toggles are signals; the two action controls
(clear payment info, delete cloud drafts) are <Button>s with their handlers in
the body. The 16 privacy Rows have dynamic, server-driven subtitles and no Solid
alternative, so they are still built imperatively — now from an onMount build
that appends into the section content refs (contentProps.ref). Runtime-verified.

morethanwords/tweb/master4ddfecf2 files, +175/-163
refactor(chatReactions, editChat): idiomatic Sections + drop title poke

chatReactions now returns a two-<Section> JSX tree: the toggle section's name,
caption and the reactions section's hidden state are signals, and the toggle
row / radio form / sticker checkbox rows (no Solid alternative) are built from an
onMount pass into the section content refs. editChat drops its redundant
tab.title poke (the scaffold already sets title: 'Edit'); its re-entrant
permission-driven builder stays imperative.

morethanwords/tweb/master83f48044 files, +244/-228
refactor(chatDiscussion, userPermissions, editTopic): Sections + scaffold titles

chatDiscussion returns a JSX tree: the sticker, the dynamic caption, the
discussion <Section> and the unlink <Section> are declarative; the create-group
and unlink controls are <Button>s; the section caption / unlink text / create
visibility are signals driven by the onMount build, and the appDialogsManager
chatlist + its per-row update() (no Solid alternative) stay embedded.

userPermissions and editTopic move their sync, payload-derived titles to scaffold
function-titles (editingAdmin -> EditAdmin/UserRestrictions; threadId ->
ForumTopic.Title.Edit/NewTopic) and drop the in-component tab.title pokes; their
ChatPermissions / EmojiTab-dominated bodies stay imperative.

#webk
🫡3
morethanwords/tweb/master689bc714 files, +4/-5
refactor(tabs): drop manual tab.title pokes where the scaffold can set it

includedChats moves its sync, payload-derived title to a scaffold
function-title (type -> FilterAlwaysShow/FilterNeverShow). chatInviteLinks and
chatInviteLink drop redundant tab.title pokes that just re-set the static title
the scaffold already applies (InviteLinks / InviteLink); chatInviteLink keeps
only the custom-title override (wrapEmojiText), which has no scaffold equivalent.

morethanwords/tweb/master70bf3c1300 files, +2626/-2389
Merge master into HMR-tabs branch; reconcile settings-store migration

Master advanced 9 commits (useAppSettings store, chat edge-to-edge scroll,
media-viewer rework, voice fixes, Build artifacts). Reconciled:

- modify/delete conflicts: master edited the legacy editFolder.ts /
backgroundColor.ts, which this branch replaced with .tsx — kept the .tsx,
deleted the .ts, and ported master's rootScope.settings -> useAppSettings()
migration into editFolder.tsx + backgroundColor.tsx (background.tsx auto-merged
master's migration cleanly).
- rootScope.settings removed in master: all three ported background/folder tabs
now read via useAppSettings() (writes use unwrap(appSettings)); no
rootScope.settings remains in the ported tabs (remaining hits in sendingStatus
et al. are identical to master).
- hotReloadGuard.ts/.tsx auto-merge keeps both master's showTranslatePopup and
this branch's scaffold-tab/appDialogsManager/StoriesProvider entries.

tsc clean; eslint clean (tabs.ts indent autofixed).

morethanwords/tweb/master06a052c9 files, +179/-53
Merge branch 'master' into xenodochial-swartz-dbc3ca

#webk
🫡3
New telegramdesktop/tdesktop release: v6.8.5 (beta)

- Animated 3D objects on settings covers (premium star, coin, diamond).
- Particle effects for one-time voice message playback.
- Birthday celebration effect on profile.
- Poll votes graph in message statistics.
- Separate send action animation for round video messages.
- Open public channels from chat folder invite links.
- Notify toggle and muted icon for silent scheduled messages.
- Per-window Qt RHI renderer activation.
- Fix empty chat list preview after deleting last message.
- Fix shaking of pinned chats dragged past rows of other heights.
- Fix scroll with keyboard in chat history.
- Fix pause of animated reactions when opening their context menu.
- Improve performance with RHI enabled.

#tdesktop
🫡3
telegramdesktop/tdesktop/deve60476c4 files, +4/-36
Replaced global Qt RHI forcing with per-window activation.

telegramdesktop/tdesktop/dev818f5621 files, +73/-2
Added separate send action animation for round video messages.

telegramdesktop/tdesktop/devbc6705e1 files, +20/-29
Fix creating chats from webapps.

telegramdesktop/tdesktop/deva681dbe1 files, +1/-1
Add styles for send round video message animation.

telegramdesktop/tdesktop/devba6c9661 files, +1/-1
Fix build with Qt < 6.7.

telegramdesktop/tdesktop/dev4d4ba037 files, +32/-16
Beta version 6.8.5.

- Animated 3D objects on settings covers (premium star, coin, diamond).
- Particle effects for one-time voice message playback.
- Birthday celebration effect on profile.
- Poll votes graph in message statistics.
- Separate send action animation for round video messages.
- Open public channels from chat folder invite links.
- Notify toggle and muted icon for silent scheduled messages.
- Per-window Qt RHI renderer activation.
- Fix empty chat list preview after deleting last message.
- Fix shaking of pinned chats dragged past rows of other heights.
- Fix scroll with keyboard in chat history.
- Fix pause of animated reactions when opening their context menu.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightlyacd25401 files, +24/-2
Fixed build for Windows ARM on Github CI.

telegramdesktop/tdesktop/nightlyd4f530e2 files, +6/-2
Fixed crash on Linux and Windows.

#tdesktop
🫡3
morethanwords/tweb/masterfa1fc251 files, +12/-5
fix: cancel in-flight autocomplete load when hiding the panel

morethanwords/tweb/master010b12d1 files, +5/-4
fix: don't disable HMR inside .claude worktree checkouts

morethanwords/tweb/master6795d8419 files, +1161/-11
feat: capture every logger() call to an exportable, symbolicatable log buffer

#webk
🫡3
telegramdesktop/tdesktop/devfc1fc694 files, +228/-337
Once again try fixing separators in profiles.

#tdesktop
🫡3
telegramdesktop/tdesktop/dev65f24c31 files, +2/-2
Fix build with Windows on ARM.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly5d7ca1b1 files, +52/-3
Updated macOS build on Github CI.

#tdesktop
🫡3
telegramdesktop/tdesktop/nightly344e3302 files, +6/-2
Fixed crash on Linux and Windows.

telegramdesktop/tdesktop/nightly02f420a1 files, +52/-3
Updated macOS build on Github CI.

#tdesktop
🫡3
morethanwords/tweb/master90257623 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
🫡3
morethanwords/tweb/master0ac46c11 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
🫡3