8 अक्टूबर को जारी बीटा बिल्ड 12.10.283300 से, macOS के लिए Telegram क्लाइंट में HTMLBubbles मॉड्यूल शामिल है। ये HTML और CSS में बनाए गए संदेश हैं, जिनमें एम्बेडेड JavaScript होता है, जो मिनी-ऐप विंडो के बिना सीधे चैट बबल में रहते हैं। 11 अक्टूबर को, बिल्ड 13.0.283309 में, इसमें three.js लाइब्रेरी और तीर कुंजियों से नियंत्रित होने वाले तीन 3D गेम जोड़े गए। यह फिलहाल केवल उन लोगों पर लागू होता है जो macOS के बीटा चैनल पर हैं: यह मॉड्यूल बिल्ड में ही एम्बेडेड डेमो चैट पर काम करता है, और API स्कीम में इसके लिए कोई सर्वर-साइड संदेश प्रकार नहीं है।

The post on Telegram — @gramnews
macOS के लिए Telegram बीटा में HTML संदेश

बिल्ड में क्या है

macOS बीटा अपडेट फ़ीड mac-updates.telegram.org के माध्यम से वितरित किया जाता है, और प्रत्येक बिल्ड ऐप के साथ एक सामान्य ज़िप फ़ाइल होती है। 12.10.283299 में मॉड्यूल नहीं है, जबकि 12.10.283300 में संसाधनों के बगल में HTMLBubbles_HTMLBubbles.bundle पैकेज दिखाई देता है। बिल्ड को उसी दिन डिसेम्बल किया गया था।

पैकेज के अंदर बारह .chat फ़ाइलें हैं। ये सर्वर से डेटा नहीं हैं, बल्कि डेमो चैट के स्क्रिप्ट हैं: एक शीर्षक, अवतार रंगों के साथ प्रतिभागियों की सूची, और संदेश, जिनमें से प्रत्येक अपने <style> और <script> के साथ HTML का एक टुकड़ा है। नाम खुद ही कार्य बताते हैं: «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» का कैप्शन सीधे इंजन का नाम बताता है — «what litehtml pulls off and what it doesn't»।

निष्पादन योग्य फ़ाइल की स्ट्रिंग्स में डेमो संदेशों की एक सूची है, जिसमें लगभग पचास कार्ड हैं: दिनों के अनुसार टैब वाला एक बोर्डिंग पास, आकार और रंग चयन वाला एक उत्पाद पृष्ठ, एक रूपांतरण फ़नल, कोहोर्ट रिटेंशन, अप्रूव बटन वाला एक पुल-रिक्वेस्ट, प्रमोट और रोल बैक बटन वाला एक CI बिल्ड, बॉट के खिलाफ टिक-टैक-टो, पासे «जो वास्तव में लुढ़कते हैं», एक लाइव इक्वलाइज़र वाला एक म्यूजिक प्लेयर, और एक जवाब «जो AI की तरह खुद ही टाइप करता है»।

एक अलग बॉट-इंटरलोक्यूटर, HTML Bot, खुद को इस प्रकार प्रस्तुत करता है: प्रत्येक उत्तर HTML और CSS है, कोई नेटवर्क नहीं है; संदेश चुनने के लिए / टाइप करें। इसमें अपने कोड के लिए एक नियम भी है: कोई भी HTML जिसमें स्टाइल और स्क्रिप्ट हों, वह बिना बबल के पूरी चौड़ाई में प्रदर्शित होता है, और यदि <div class="widget"> में लपेटा गया हो, तो वह बबल के अंदर प्रदर्शित होता है।

11 अक्टूबर के बिल्ड में क्या जोड़ा गया

13.0.283309 में पैकेज में दो चीजें दिखाई दीं। पहली — 1.27 MB की lib/three.js: MIT लाइसेंस के तहत three.js लाइब्रेरी का r160 रिविजन, जिसे फ़ाइल की पहली पंक्ति में टिप्पणी के अनुसार «HTML संदेशों के लिए» फिर से बनाया गया है — मॉड्यूल एक स्क्रिप्ट के रूप में निष्पादित होता है और खुद को वैश्विक ऑब्जेक्ट THREE में रखता है। संदेश इसे नेटवर्क पते से नहीं, बल्कि आंतरिक लिंक app:three से जोड़ता है।

दूसरी — तेरहवीं चैट, «3D Lab», जिसका कैप्शन है «three.js scenes rendered by the app's Metal renderer»। इसमें तीन संदेश हैं: आर्केड गेम Chicken Cross, जहाँ एक मुर्गी सड़कों को पार करती है, एक डेमो सीन «three.js on Metal», और बॉट के खिलाफ शतरंज। Chicken Cross में नियंत्रण तीर कुंजियाँ या WASD हैं, फ़ील्ड पर क्लिक करने के बाद, Esc फ़ोकस छोड़ देता है; फ़ील्ड के नीचे माउस के लिए डुप्लिकेट बटन हैं।

The post on Telegram — @gramnews
macOS के लिए Telegram बीटा के संदेशों में three.js और 3D गेम

वहीं ported फ़ोल्डर भी दिखाई दिया, जिसमें सौ से अधिक अलग HTML फ़ाइलें हैं — वही डेमो संदेश, चैट के अनुसार व्यवस्थित। बाइनरी में «twidget has no port of this card» स्ट्रिंग उद्देश्य का संकेत देती है: कार्ड को दूसरे रेंडरिंग इंजन के तहत पोर्ट किया जाता है और यह जांचा जाता है कि कौन से पोर्ट किए गए हैं।

उपयोगकर्ताओं और बॉट डेवलपर्स के लिए इसका क्या अर्थ है

स्थिर Telegram for macOS, Telegram Desktop, iOS और Android ऐसे संदेश प्रदर्शित नहीं करते हैं। बीटा में मॉड्यूल अपने स्वयं के डेमो चैट पर काम करता है: सर्वर के माध्यम से स्क्रिप्ट के साथ HTML संदेश भेजना संभव नहीं है — API स्कीम (लेयर 230) में ऐसा कोई संदेश प्रकार नहीं है जो प्राप्तकर्ता को मूल मार्कअप को स्टाइल और स्क्रिप्ट के साथ वितरित करे।

निकटतम सार्वजनिक सुविधा Rich Messages है, जो 11 जून 2026 को Bot API 10.1 में दिखाई दी थी। एक बॉट sendRichMessage के माध्यम से HTML या Markdown में संदेश भेज सकता है, लेकिन डॉक्यूमेंटेशन HTML को केवल लिखने के तरीके के रूप में वर्णित करता है: प्रत्येक टैग एक निश्चित सेट के ब्लॉक में बदल जाता है — पैराग्राफ, शीर्षक, सूची, तालिका, उद्धरण, विस्तार योग्य ब्लॉक, सूत्र, फोटो, वीडियो। API स्कीम में यह प्रकारों से स्पष्ट है: इनपुट के रूप में inputRichMessageHTML को मार्कअप स्ट्रिंग के साथ स्वीकार किया जाता है, और प्राप्तकर्ता को richMessage ब्लॉक की सूची के साथ दिखाई देता है — वही ब्लॉक जिनसे Instant View पेज बनाए जाते हैं। Bot API द्वारा समर्थित टैगों में <script> या <style> सूचीबद्ध नहीं हैं।

HTMLBubbles का Rich Messages से संबंध बिल्ड में नहीं दिखाया गया है: डेमो चैट ऐप के अंदर पैकेज से लोड होते हैं, न कि सर्वर संदेशों से। डेमो के टेक्स्ट बाइनरी में अंग्रेजी में एम्बेडेड हैं, macOS अनुवाद प्लेटफॉर्म पर वे उपलब्ध नहीं हैं।

बबल में संदेश कैसे रेंडर होता है

मुख्य तरीका ब्राउज़र के बिना काम करता है। मार्कअप को litehtml द्वारा पार्स किया जाता है — एक ओपन-सोर्स HTML और CSS लेआउट इंजन जो BSD लाइसेंस के तहत है, जो खुद कुछ भी नहीं बनाता है: यह तत्वों को निर्देशांक के अनुसार व्यवस्थित करता है, और रेंडरिंग ऐप को सौंपता है। यह Gumbo पार्सर का उपयोग करके HTML पढ़ता है, और Gumbo की डीबग स्ट्रिंग्स («Entering adoption agency algorithm», «Noah's ark clause») इसके साथ बाइनरी में शामिल हो गईं। ऐप खुद रेंडरिंग करता है, और HTML Bot में तीन तुलना मोड हैं: litehtml, litehtml-gpu — Metal के माध्यम से आउटपुट के साथ वही लेआउट — और twidget (WebKit)।

ऐसे संदेश में स्क्रिप्ट सीधे मार्कअप को संशोधित नहीं करती है। यह एक फ़ंक्शन render() घोषित करती है, जो वर्तमान स्थिति के लिए HTML स्ट्रिंग लौटाती है, और हैंडलर: onAction(name, value) — data-action विशेषता वाले तत्व पर क्लिक करने के लिए, onKey, onPointer और onFocus — गेम के लिए। प्रत्येक घटना के बाद क्लाइंट render() को कॉल करता है और बबल को उसी स्थान पर फिर से बनाता है। इसके ऊपर — एनिमेशन के लिए सहायकों का एक सेट: tween(), animate(), ease.* कर्व्स, नेटिव सामग्री बदलने के लिए transition('pop')। <script> के आसपास का स्थिर HTML एक बैकअप दृश्य के रूप में कार्य करता है, यदि स्क्रिप्ट शुरू नहीं होती है।

डेमो «Live Scripts» के टेक्स्ट के अनुसार, प्रत्येक स्क्रिप्ट अपने स्वयं के JavaScriptCore सैंडबॉक्स में निष्पादित होती है — macOS के JavaScript इंजन का एक हिस्सा। कार्ड पर राइट-क्लिक करने से «Script Log…» खुलता है, जिसमें उसका कंसोल होता है, और HTML Bot के साथ चैट में /stats कमांड प्रत्येक संदेश के ऊपर फ़्रेम रेंडरिंग समय, फ़्रेम दर, CPU और मेमोरी को सक्षम करता है — यह माप के लिए एक उपकरण है, उपयोगकर्ता के लिए नहीं।

सैंडबॉक्स और नेटवर्क

डेमो «Runaway scripts the sandbox stops» कार्ड में ही सीमाएं दिखाता है: उनके टेक्स्ट के अनुसार, लोडिंग पर एक अनंत लूप को JavaScriptCore 50 ms के बाद बाधित करता है और स्थिर HTML छोड़ देता है; Hang बटन वाला एक कार्ड onAction के अंदर ऐसा ही एक लूप शुरू करता है; एक टाइमर, जो हर 100 ms में 40 ms के लिए CPU को व्यस्त रखता है, प्रति सेकंड 200 ms के CPU समय के बजट से बाहर हो जाता है।

WebKit मोड एक अलग WidgetSandbox मॉड्यूल में रहता है और तीन परतों द्वारा नेटवर्क से बंद है। पेज को connect-src 'none' के साथ सामग्री सुरक्षा नीति मिलती है और स्क्रिप्ट केवल एक बार के कुंजी द्वारा; WebView से नियमों की एक सूची जुड़ी हुई है, जो सभी http, https, ws, wss और ftp पतों को ब्लॉक करती है; संदेश कोड से पहले fetch, XMLHttpRequest, WebSocket, EventSource, RTCPeerConnection, वर्कर्स और window.open को विंडो से हटा दिया जाता है। चित्र और मीडिया केवल data: और blob: से अनुमत हैं, three.js जैसी फ़ाइलें आंतरिक स्कीम हैंडलर द्वारा दी जाती हैं।

3D सीन कैसे बनाए जाते हैं

«3D Lab» के गेम सामान्य three.js कोड में लिखे गए हैं: सीन, ऑर्थोग्राफिक कैमरा, शैडो के साथ लाइट, क्यूब्स से बनी ज्यामिति। रेंडरर को THREE.WebGLRenderer के रूप में बनाया जाता है, लेकिन cornerRadius पैरामीटर के साथ, जो three.js में नहीं होता है — इसे केवल ऐप का रैपर ही समझता है। बाइनरी में WebKit के पेज मोड के लिए रैपर होता है: यह WebGLRenderer को एक इनहेरिटर से बदल देता है, उसके कैनवास को data-3d विशेषता वाले तत्व में डालता है, आकार पर नज़र रखता है और तीर कुंजियों, WASD, स्पेसबार और एंटर को गेम के onKey में पास करता है — Cmd, Ctrl या Alt के साथ कुंजियाँ ऐप को चली जाती हैं।

बबल में, चैट के कैप्शन के अनुसार, वही सीन ऐप के Metal रेंडरर द्वारा बनाया जाता है; मॉड्यूल में HTMLBubbleGPU, HTMLBubbleGPUPool और Metal संसाधनों के लिए बफ़र्स हैं। Metal के बिना Mac पर गेम «3D needs a Mac with Metal» का प्लेसहोल्डर दिखाता है।

Telegram Serverless और tgcloud.ai

HTMLBubbles पैकेज में, बाइनरी स्ट्रिंग्स में, या API स्कीम में Telegram Serverless, tgcloud.ai या किसी अन्य सर्वर-साइड निष्पादक के कोई संदर्भ नहीं हैं: डेमो संदेश स्थानीय रूप से स्थित हैं, और HTML Bot के पास डिज़ाइन के अनुसार कोई नेटवर्क नहीं है। इनके बीच का संबंध अभी तक समय के संयोग के अलावा किसी भी चीज़ से पुष्टि नहीं होता है।