8-oktabrdagi 12.10.283300 beta-versiyasidan boshlab, Telegram'ning macOS uchun klienti HTMLBubbles modulini o'z ichiga oladi. Bu modul HTML va CSS'da tuzilgan, o'rnatilgan JavaScript'ga ega xabarlarni mini-ilova oynasisiz, to'g'ridan-to'g'ri chat pufakchasida ko'rsatadi. 11-oktabrda, 13.0.283309 versiyasida, unga three.js kutubxonasi va strelkalar bilan boshqariladigan uchta 3D-o'yin qo'shildi. Bu hozircha faqat macOS beta-kanalida bo'lganlarga tegishli, chunki modul o'ziga o'rnatilgan demo-yozishmalarda ishlaydi va API sxemasida unga mos keladigan server tipidagi xabar yo'q.

The post on Telegram — @gramnews
Telegram'ning macOS uchun beta versiyasidagi HTML-xabarlar

Yig'mada nimalar bor

macOS beta-versiyasi mac-updates.telegram.org yangilanishlar fidi orqali tarqatiladi va har bir yig'ma — ilova bilan oddiy zip-fayl. 12.10.283299 versiyasida modul yo'q, ammo 12.10.283300 versiyasida resurslar yonida HTMLBubbles_HTMLBubbles.bundle paketi paydo bo'ladi. Yig'ma o'sha kuni tahlil qilindi.

Paket ichida o'n ikkita .chat fayli mavjud. Bular serverdan kelgan ma'lumotlar emas, balki demo-yozishmalar ssenariylari: sarlavha, avatarlar ranglari bilan ishtirokchilar ro'yxati va har biri o'zining <style> va <script> teglariga ega HTML qismidan iborat xabarlar. Nomlari vazifani o'zi aytib turibdi: «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» ostidagi yozuv dvigatelni to'g'ridan-to'g'ri nomlaydi — «litehtml nimalarni ko'tara oladi, nimalarni yo'q».

Ijro etiladigan fayl satrlarida demo-xabarlar katalogi, taxminan ellikka yaqin kartochkalar mavjud: kunlar bo'yicha tablari bo'lgan bort taloni, o'lcham va rang tanlash imkoniyati bo'lgan mahsulot sahifasi, konversiya voronkasi, kohortni ushlab turish, Approve tugmasi bilan pull-request, Promote va Roll back tugmalari bilan CI-yig'ma, botga qarshi krestik-nolik, «haqiqatan ham dumalaydigan» kubiklar, jonli ekvalayzerli musiqa pleyeri va «o'zini o'zi yozadigan, AI kabi» javob.

Alohida suhbatdosh bot, HTML Bot, o'zini shunday tanishtiradi: har bir javob — HTML va CSS, tarmoq yo'q; xabarni tanlash uchun / tering. Shuningdek, o'z kodingiz uchun qoida mavjud: uslublar va skriptga ega har qanday HTML pufakchasiz to'liq kenglikda ko'rsatiladi, <div class="widget"> ichiga o'ralgan bo'lsa — pufakcha ichida.

11-oktabr yig'masi nimalarni qo'shdi

13.0.283309 versiyasida paketda ikkita narsa paydo bo'ldi. Birinchisi — 1.27 MB hajmli lib/three.js: MIT litsenziyasi ostidagi r160 reviziyasidagi three.js kutubxonasi, faylning birinchi satridagi izohga ko'ra, «HTML-xabarlar uchun» qayta yig'ilgan — modul bitta skript bilan ishlaydi va o'zini global THREE obyektiga joylashtiradi. Xabar uni tarmoq manzili orqali emas, balki ichki app:three havolasi orqali ulaydi.

Ikkinchisi — o'n uchinchi yozishma, «3D Lab», «ilova Metal-rendereri tomonidan chizilgan three.js sahnalari» yozuvi bilan. Unda uchta xabar mavjud: tovuq yo'llarni kesib o'tadigan Chicken Cross arkadasi, «three.js on Metal» demo-sahnasi va botga qarshi shaxmat. Chicken Cross'da boshqaruv — maydonni bosgandan so'ng strelkalar yoki WASD; Esc fokusni bo'shatadi; maydon ostida sichqoncha uchun takrorlovchi tugmalar mavjud.

The post on Telegram — @gramnews
Telegram'ning macOS uchun beta versiyasidagi three.js va 3D-o'yinlar

Shuningdek, ported papkasi paydo bo'ldi, unda yuzdan ortiq alohida HTML-fayllar — yozishmalar bo'yicha joylashtirilgan o'sha demo-xabarlar mavjud. Binar fayldagi «twidget has no port of this card» satri maqsadni ko'rsatadi: kartochkalar ikkinchi renderlash dvigateli ostiga o'tkaziladi va qaysilari o'tganligi tekshiriladi.

Bu foydalanuvchilar va bot ishlab chiquvchilari uchun nimani anglatadi

macOS, Telegram Desktop, iOS va Android uchun barqaror Telegram bunday xabarlarni ko'rsatmaydi. Beta versiyasida modul o'zining demo-yozishmalarida ishlaydi: suhbatdoshga skriptli HTML-xabarni server orqali yuborishning iloji yo'q — API sxemasida (230-qavat) qabul qiluvchiga asl belgilashni uslublar va skript bilan yetkazib beradigan xabar turi mavjud emas.

Eng yaqin ommaviy — 2026-yil 11-iyunda Bot API 10.1'da paydo bo'lgan Rich Messages. Bot sendRichMessage orqali HTML yoki Markdown'da xabar yuborishi mumkin, ammo hujjatlar HTML'ni faqat yozish usuli sifatida tasvirlaydi: har bir teg qat'iy to'plamdan iborat blokga qisqartiriladi — paragraf, sarlavha, ro'yxat, jadval, iqtibos, ochiladigan blok, formula, fotosurat, video. API sxemasida bu turlar bo'yicha ko'rinadi: kirishga belgilash satri bilan inputRichMessageHTML qabul qilinadi, qabul qiluvchi esa bloklar ro'yxati bilan richMessage ko'radi — Instant View sahifalari yig'iladigan o'sha bloklar. Bot API qo'llab-quvvatlanadiganlar orasida <script> yoki <style> tegini sanab o'tmaydi.

HTMLBubbles'ning Rich Messages bilan aloqasi yig'ma tomonidan ko'rsatilmaydi: demo-yozishmalar ilova ichidagi paketdan yuklanadi, server xabarlaridan emas. Demo matnlari binar faylga ingliz tilida o'rnatilgan, macOS tarjima platformasida ular mavjud emas.

Xabar pufakchada qanday chiziladi

Asosiy yo'l brauzersiz amalga oshiriladi. Belgilashni litehtml tahlil qiladi — BSD litsenziyasi ostidagi HTML va CSS'ni joylashtirish uchun ochiq dvigatel, u o'zi hech narsa chizmaydi: u elementlarni koordinatalar bo'yicha joylashtiradi va renderlashni ilovaga beradi. U HTML'ni Gumbo parseri bilan o'qiydi va Gumbo'ning disk raskadrovka satrlari («Entering adoption agency algorithm», «Noah's ark clause») u bilan birga binar faylga tushgan. Ilova renderlashni o'zi amalga oshiradi va HTML Bot'da uchta taqqoslash rejimi mavjud: litehtml, litehtml-gpu — Metal orqali chiqish bilan bir xil joylashtirish — va twidget (WebKit).

Bunday xabardagi skript belgilashni to'g'ridan-to'g'ri o'zgartirmaydi. U joriy holat uchun HTML satrini qaytaradigan render() funksiyasini va ishlovchilarni e'lon qiladi: onAction(name, value) — data-action atributiga ega elementni bosish uchun, onKey, onPointer va onFocus — o'yinlar uchun. Har bir hodisadan so'ng mijoz render()'ni chaqiradi va pufakchani joyida qayta chizadi. Bunga qo'shimcha ravishda — animatsiya uchun yordamchilar to'plami: tween(), animate(), ease.* egri chiziqlari, mahalliy tarkibni o'zgartirish uchun transition('pop'). Agar skript ishga tushmasa, <script> atrofidagi statik HTML zaxira ko'rinish vazifasini o'taydi.

«Live Scripts» demosining matniga ko'ra, har bir skript o'zining JavaScriptCore qumloqchasida — macOS tarkibidagi JavaScript dvigatelida ishlaydi. Kartochkani o'ng tugma bilan bosish «Script Log…»'ni uning konsoli bilan ochadi, HTML Bot bilan chatdagi /stats buyrug'i esa har bir xabar ustida kadrni renderlash vaqti, kadr tezligi, protsessor va xotirani yoqadi — bu o'lchovlar uchun vosita, foydalanuvchi uchun emas.

Qumloqcha va tarmoq

«Runaway scripts the sandbox stops» demosi cheklovlarni to'g'ridan-to'g'ri kartochkalarda ko'rsatadi: yuklash paytidagi cheksiz tsikl, ularning matniga ko'ra, JavaScriptCore 50 ms dan keyin to'xtatadi va statik HTML'ni qoldiradi; Hang tugmasi bo'lgan kartochka onAction ichida xuddi shunday tsiklni ishga tushiradi; har 100 ms da protsessorni 40 ms ga band qiladigan taymer sekundiga 200 ms protsessor vaqti byudjetidan chiqib ketadi.

WebKit rejimi alohida WidgetSandbox modulida joylashgan va uchta qatlam bilan tarmoqdan yopiq. Sahifa connect-src 'none' va faqat bir martalik kalit bo'yicha skriptlar bilan kontent xavfsizligi siyosatini oladi; WebView'ga http, https, ws, wss va ftp barcha manzillarini bloklaydigan qoidalar ro'yxati ulangan; xabar kodidan oldin fetch, XMLHttpRequest, WebSocket, EventSource, RTCPeerConnection, ishchilar va window.open oynadan olib tashlanadi. Rasmlar va media faqat data: va blob: dan ruxsat etiladi, three.js kabi fayllar sxemaning ichki ishlovchisi tomonidan beriladi.

3D-sahnalar qanday tuzilgan

«3D Lab» dagi o'yinlar oddiy three.js kodi bilan yoziladi: sahna, ortogonal kamera, soyali yorug'lik, kubiklardan geometriya. Renderer THREE.WebGLRenderer sifatida yaratiladi, ammo three.js'da mavjud bo'lmagan cornerRadius parametri bilan — uni faqat ilova o'rami tushunadi. Binar faylda WebKit'ning sahifa rejimi uchun o'ram mavjud: u WebGLRenderer'ni voris bilan almashtiradi, uning kanvasini data-3d atributiga ega elementga kiritadi, o'lchamni kuzatadi va strelkalarni, WASD'ni, bo'sh joyni va Enter'ni o'yinning onKey'iga o'tkazadi — Cmd, Ctrl yoki Alt bilan tugmalar ilovaga o'tadi.

Pufakchada, yozishma ostidagi yozuvga ko'ra, xuddi shu sahna ilovaning Metal-rendereri tomonidan chiziladi; modulda HTMLBubbleGPU, HTMLBubbleGPUPool sinflari va Metal resurslari uchun buferlar mavjud. Metal'siz Mac'da o'yin «3D needs a Mac with Metal» to'siqni ko'rsatadi.

Telegram Serverless va tgcloud.ai

HTMLBubbles paketida ham, binar fayl satrlarida ham, API sxemasida ham Telegram Serverless, tgcloud.ai yoki boshqa server ijrochilariga havolalar yo'q: demo-xabarlar lokal joylashgan, HTML Bot'da esa tarmoq yo'q. Ular o'rtasidagi bog'liqlik hozircha vaqtning mos kelishidan boshqa hech narsa bilan tasdiqlanmagan.