8 Ekim tarihli 12.10.283300 beta sürümünden itibaren, Telegram'ın macOS istemcisi HTMLBubbles modülünü içeriyor: bunlar, HTML ve CSS ile düzenlenmiş, gömülü JavaScript içeren ve mini uygulama penceresi olmadan doğrudan sohbet balonu içinde yaşayan mesajlardır. 11 Ekim'de, 13.0.283309 sürümünde, buna three.js kütüphanesi ve ok tuşlarıyla kontrol edilen üç adet 3D oyun eklendi. Bu durum şimdilik yalnızca macOS beta kanalında olanları ilgilendiriyor: modül, derlemenin içine gömülü demo sohbetlerde çalışıyor ve API şemasında bunun için sunucu tabanlı bir mesaj türü bulunmuyor.

The post on Telegram — @gramnews
Telegram'ın macOS Beta Sürümündeki HTML Mesajları

Derlemede Neler Var

macOS beta sürümü, mac-updates.telegram.org güncelleme akışı üzerinden dağıtılıyor ve her derleme, uygulamanın bulunduğu sıradan bir zip dosyasıdır. 12.10.283299 sürümünde modül yokken, 12.10.283300 sürümünde kaynakların yanında HTMLBubbles_HTMLBubbles.bundle paketi beliriyor. Derleme aynı gün incelendi.

Paketin içinde on iki adet .chat dosyası bulunuyor. Bunlar sunucudan gelen veriler değil, demo sohbet senaryolarıdır: başlık, avatar renkleriyle katılımcı listesi ve her biri kendi <style> ve <script> etiketlerine sahip bir HTML parçası olan mesajlar. İsimler görevlerini kendileri anlatıyor: «Design Crew», «Deploy Bot», «Stress Test», «Playground», «Long Reads», «Trip to Lisbon», «Shop Assistant», «Analytics», «Live Scripts», «Code Review», «Game Night», «Motion Lab». «Stress Test» alt yazısı, motoru doğrudan belirtiyor: «litehtml'in neyi destekleyip neyi desteklemediği».

Yürütülebilir dosyanın dizelerinde, yaklaşık elli karttan oluşan bir demo mesaj kataloğu bulunuyor: günlere göre sekmeleri olan bir biniş kartı, beden ve renk seçimi olan bir ürün sayfası, bir dönüşüm hunisi, kohort tutma, Approve düğmeli bir pull request, Promote ve Roll back düğmeli bir CI derlemesi, bota karşı tic-tac-toe, «gerçekten yuvarlanan» zarlar, canlı ekolayzırlı bir müzik çalar ve «yapay zeka gibi kendi kendini yazan» bir yanıt.

Ayrı bir sohbet botu olan HTML Bot, kendini şöyle tanıtıyor: her yanıt HTML ve CSS'tir, ağ bağlantısı yoktur; bir mesaj seçmek için / yazın. Kendi kodunuz için de bir kural var: stiller ve bir betik içeren herhangi bir HTML, balonsuz tam genişlikte gösterilirken, <div class="widget"> içine sarılmış olanlar balonun içinde gösterilir.

11 Ekim Derlemesinin Ekledikleri

13.0.283309 sürümünde pakete iki şey eklendi. Birincisi, 1.27 MB boyutunda lib/three.js: MIT lisanslı, r160 revizyonlu three.js kütüphanesi, dosyanın ilk satırındaki yoruma göre «HTML mesajları için» yeniden derlenmiş — modül tek bir betik olarak çalışır ve kendini global THREE nesnesine yerleştirir. Mesaj, kütüphaneyi ağdaki bir adresle değil, dahili bir app:three bağlantısıyla bağlar.

İkincisi, «uygulamanın Metal render motoru tarafından çizilen three.js sahneleri» alt yazısıyla on üçüncü sohbet olan «3D Lab». Bu sohbette üç mesaj var: bir tavuğun yolları geçtiği Chicken Cross adlı arcade oyunu, «three.js on Metal» demo sahnesi ve bota karşı satranç. Chicken Cross'ta kontrol, alana tıkladıktan sonra ok tuşları veya WASD ile yapılır, Esc odaklanmayı bırakır; alanın altında fare için yedek düğmeler bulunur.

The post on Telegram — @gramnews
Telegram'ın macOS Beta Sürümündeki Mesajlarda three.js ve 3D Oyunlar

Ayrıca, yüzün üzerinde ayrı HTML dosyası içeren ported klasörü de ortaya çıktı — aynı demo mesajları, sohbetlere göre düzenlenmiş. İkili dosyadaki «twidget has no port of this card» dizesi amacını ipuçlar: kartlar ikinci bir render motoruna taşınır ve hangilerinin taşındığı kontrol edilir.

Bunun Kullanıcılar ve Bot Geliştiricileri İçin Anlamı

Stabil Telegram for macOS, Telegram Desktop, iOS ve Android bu tür mesajları göstermez. Beta sürümünde modül kendi demo sohbetlerinde çalışır: sunucu aracılığıyla bir muhataba betikli HTML mesajı göndermenin bir yolu yoktur — API şemasında (katman 230), alıcıya stil ve betik içeren orijinal işaretlemeyi iletecek bir mesaj türü bulunmamaktadır.

En yakın halka açık olanı, 11 Haziran 2026'da Bot API 10.1'de ortaya çıkan Rich Messages'tır. Bir bot, sendRichMessage aracılığıyla HTML veya Markdown formatında bir mesaj gönderebilir, ancak belgeleme HTML'i yalnızca bir yazım yöntemi olarak tanımlar: her etiket, sabit bir kümeden (paragraf, başlık, liste, tablo, alıntı, açılır blok, formül, fotoğraf, video) bir bloğa indirgenir. API şemasında bu, türlerden görülebilir: giriş olarak bir işaretleme dizesiyle inputRichMessageHTML kabul edilirken, alıcı bir blok listesiyle richMessage görür — bunlar Instant View sayfalarının oluşturulduğu blokların aynısıdır. Desteklenenler arasında Bot API ne <script> ne de <style> etiketini listeler.

HTMLBubbles'ın Rich Messages ile bağlantısı derleme tarafından gösterilmemektedir: demo sohbetler uygulama içindeki paketten yüklenir, sunucu mesajlarından değil. Demo metinleri ikili dosyaya İngilizce olarak gömülüdür, macOS çeviri platformunda bulunmazlar.

Mesaj Sohbet Balonunda Nasıl Çizilir

Ana yol tarayıcı olmadan çalışır. İşaretlemeyi litehtml ayrıştırır — BSD lisanslı, açık kaynaklı bir HTML ve CSS düzen motorudur, kendisi hiçbir şey çizmez: öğeleri koordinatlara göre düzenler ve çizimi uygulamaya bırakır. HTML'i Gumbo ayrıştırıcısı ile okur ve Gumbo'nun hata ayıklama dizeleri («Entering adoption agency algorithm», «Noah's ark clause») onunla birlikte ikili dosyaya dahil olmuştur. Uygulama çizimi kendi başına yapar ve HTML Bot'un dizelerinde üç karşılaştırma modu bulunur: litehtml, litehtml-gpu — Metal üzerinden çıktı ile aynı düzen — ve twidget (WebKit).

Böyle bir mesajdaki betik işaretlemeyi doğrudan düzenlemez. Mevcut durum için bir HTML dizesi döndüren render() işlevini ve olay işleyicilerini tanımlar: onAction(name, value) — data-action özniteliğine sahip bir öğeye tıklama için, onKey, onPointer ve onFocus — oyunlar için. Her olaydan sonra istemci render() çağırır ve balonu yerinde yeniden çizer. Bunun üzerinde, animasyon için bir dizi yardımcı bulunur: tween(), animate(), ease.* eğrileri, yerel içerik değişimi için transition('pop'). <script> etrafındaki statik HTML, betik çalışmazsa yedek görünüm olarak hizmet eder.

«Live Scripts» demosunun metnine göre, her betik kendi JavaScriptCore sanal alanında yürütülür — macOS'un JavaScript motoru. Kartın üzerine sağ tıklamak, konsoluyla birlikte «Script Log…»u açar ve HTML Bot ile sohbetteki /stats komutu, her mesajın üzerinde kare çizim süresini, kare hızını, CPU ve belleği gösterir — bu bir ölçüm aracıdır, kullanıcı için değildir.

Sanal Alan ve Ağ

«Runaway scripts the sandbox stops» demosu sınırları doğrudan kartlarda gösterir: yükleme sırasında sonsuz bir döngüyü, metinlerine göre, JavaScriptCore 50 ms sonra keser ve statik HTML bırakır; Hang düğmeli kart, onAction içinde benzer bir döngü başlatır; her 100 ms'de bir CPU'yu 40 ms meşgul eden zamanlayıcı, saniyede 200 ms'lik CPU zamanı bütçesini aşar.

WebKit modu ayrı bir WidgetSandbox modülünde yaşar ve ağdan üç katmanla aynı anda izole edilmiştir. Sayfa, connect-src 'none' ve yalnızca tek kullanımlık bir anahtarla betiklerle içerik güvenlik politikası alır; WebView'a tüm http, https, ws, wss ve ftp adreslerini engelleyen bir kural listesi bağlanmıştır; mesaj kodu çalıştırılmadan önce fetch, XMLHttpRequest, WebSocket, EventSource, RTCPeerConnection, worker'lar ve window.open pencereden kaldırılır. Resimler ve medya yalnızca data: ve blob:'dan izinlidir, three.js gibi dosyalar dahili şema işleyicisi tarafından sunulur.

3D Sahneler Nasıl Yapılandırılmıştır

«3D Lab»deki oyunlar standart three.js koduyla yazılmıştır: sahne, ortografik kamera, gölgeli ışık, küplerden oluşan geometri. Renderer, THREE.WebGLRenderer olarak oluşturulur, ancak three.js'de bulunmayan cornerRadius parametresiyle — bunu yalnızca uygulama sarmalayıcısı anlar. İkili dosyada sayfa tabanlı WebKit modu için bir sarmalayıcı bulunur: bu, WebGLRenderer'ı bir alt sınıfıyla değiştirir, tuvalini data-3d özniteliğine sahip bir öğeye yerleştirir, boyutu izler ve ok tuşlarını, WASD'yi, boşluk tuşunu ve Enter'ı oyunun onKey'ine iletir — Cmd, Ctrl veya Alt ile tuşlar uygulamaya gider.

Sohbet balonunda, sohbetin alt yazısına göre, aynı sahne uygulamanın Metal render motoru tarafından çizilir; modülde HTMLBubbleGPU, HTMLBubbleGPUPool sınıfları ve Metal kaynakları için tamponlar bulunur. Metal olmayan Mac'lerde oyun, «3D needs a Mac with Metal» yazan bir yer tutucu gösterir.

Telegram Serverless ve tgcloud.ai

Ne HTMLBubbles paketinde, ne ikili dosyanın dizelerinde, ne de API şemasında Telegram Serverless, tgcloud.ai veya başka bir sunucu tarafı yürütücüsüne atıf bulunmamaktadır: demo mesajları yerel olarak bulunur ve HTML Bot'un tasarımı gereği ağ bağlantısı yoktur. Aralarındaki bağlantı şimdilik zamanlama çakışmasından başka hiçbir şeyle doğrulanmamıştır.