Desde a build beta 12.10.283300 de 8 de outubro, o cliente Telegram para macOS inclui o módulo HTMLBubbles: mensagens renderizadas em HTML e CSS, com JavaScript integrado, que residem diretamente no balão de chat, sem a necessidade de uma janela de miniaplicativo. Em 11 de outubro, na build 13.0.283309, a biblioteca three.js e três jogos 3D controlados por setas foram adicionados a ele. Por enquanto, isso afeta apenas aqueles que estão no canal beta do macOS: o módulo funciona com conversas de demonstração embutidas na própria build, e não há um tipo de mensagem de servidor correspondente para ele no esquema da API.
O que está incluído na build
A versão beta do macOS é distribuída através do feed de atualizações mac-updates.telegram.org, e cada build é um arquivo zip comum com o aplicativo. Na 12.10.283299, o módulo não está presente; na 12.10.283300, o pacote HTMLBubbles_HTMLBubbles.bundle aparece ao lado dos recursos. A build foi dissecada no mesmo dia.
Dentro do pacote, há doze arquivos .chat. Estes não são dados do servidor, mas sim roteiros de conversas de demonstração: um cabeçalho, uma lista de participantes com cores de avatar e mensagens, cada uma sendo um pedaço de HTML com seus próprios <style> e <script>. Os nomes falam por si sobre a tarefa: «Design Crew», «Deploy Bot», «Stress Test», «Playground», «Long Reads», «Trip to Lisbon», «Shop Assistant», «Analytics», «Live Scripts», «Code Review», «Game Night», «Motion Lab». A descrição de «Stress Test» menciona diretamente o motor: «o que litehtml suporta e o que não suporta».
Nas strings do arquivo executável, há um catálogo de mensagens de demonstração, cerca de cinquenta cartões: um cartão de embarque com abas por dia, uma página de produto com seleção de tamanho e cor, um funil de conversão, retenção de coorte, um pull request com um botão Approve, uma build de CI com botões Promote e Roll back, jogo da velha contra um bot, dados «que realmente rolam», um reprodutor de música com um equalizador ao vivo e uma resposta «que se digita sozinha, como uma IA».
Um bot de chat separado, o HTML Bot, se apresenta assim: cada resposta é HTML e CSS, sem rede; digite / para selecionar uma mensagem. Há também uma regra para código próprio: qualquer HTML com estilos e script é exibido em largura total sem balão, e se estiver envolvido em <div class="widget">, é exibido dentro do balão.
O que a build de 11 de outubro adicionou
Na 13.0.283309, duas coisas apareceram no pacote. A primeira é lib/three.js com 1,27 MB: a biblioteca three.js da revisão r160 sob licença MIT, recompilada, de acordo com o comentário na primeira linha do arquivo, "para mensagens HTML" — o módulo é executado como um único script e se coloca no objeto global THREE. A mensagem a conecta não por um endereço de rede, mas por um link interno app:three.
A segunda é a décima terceira conversa, «3D Lab», com a descrição «cenas three.js renderizadas pelo renderizador Metal do aplicativo». Nela, há três mensagens: o arcade Chicken Cross, onde uma galinha atravessa estradas, uma cena de demonstração «three.js on Metal» e xadrez contra um bot. O controle em Chicken Cross é feito com as setas ou WASD após clicar no campo, Esc libera o foco; botões duplicados para o mouse estão abaixo do campo.
Também apareceu uma pasta ported com mais de cem arquivos HTML separados — as mesmas mensagens de demonstração, organizadas por conversas. A string «twidget has no port of this card» no binário sugere o propósito: os cartões são portados para um segundo motor de renderização para verificar quais foram migrados.
O que isso significa para usuários e desenvolvedores de bots
O Telegram estável para macOS, Telegram Desktop, iOS e Android não exibem tais mensagens. Na versão beta, o módulo funciona com suas próprias conversas de demonstração: não há como enviar uma mensagem HTML com script para um interlocutor via servidor — no esquema da API (camada 230), não existe um tipo de mensagem que entregaria a marcação original com estilos e script ao destinatário.
O mais próximo publicamente são as Rich Messages, que apareceram na Bot API 10.1 em 11 de junho de 2026. Um bot pode enviar uma mensagem em HTML ou Markdown via sendRichMessage, mas a documentação descreve HTML apenas como um método de escrita: cada tag é reduzida a um bloco de um conjunto fixo — parágrafo, título, lista, tabela, citação, bloco expansível, fórmula, foto, vídeo. No esquema da API, isso é visível pelos tipos: inputRichMessageHTML é aceito como entrada com uma string de marcação, e o destinatário vê richMessage com uma lista de blocos — os mesmos dos quais as páginas do Instant View são montadas. Nem a tag <script> nem <style> estão listadas entre as suportadas pela Bot API.
A build não mostra conexão entre HTMLBubbles e Rich Messages: as conversas de demonstração são carregadas do pacote dentro do aplicativo, e não de mensagens do servidor. Os textos das demos estão embutidos no binário em inglês, e não estão na plataforma de traduções do macOS.
Como a mensagem é renderizada no balão
O caminho principal dispensa o navegador. A marcação é analisada por litehtml — um motor de layout HTML e CSS de código aberto sob licença BSD, que não renderiza nada por si só: ele organiza os elementos por coordenadas e delega a renderização ao aplicativo. Ele lê HTML com o parser Gumbo, e as strings de depuração do Gumbo («Entering adoption agency algorithm», «Noah's ark clause») foram incluídas no binário junto com ele. O aplicativo faz a renderização por conta própria, e o HTML Bot tem três modos de comparação nas strings: litehtml, litehtml-gpu — o mesmo layout com saída via Metal — e twidget (WebKit).
O script em tal mensagem não modifica a marcação diretamente. Ele declara uma função render() que retorna uma string HTML para o estado atual, e manipuladores: onAction(name, value) — para cliques em elementos com o atributo data-action, onKey, onPointer e onFocus — para jogos. Após cada evento, o cliente chama render() e redesenha o balão no lugar. Além disso, há um conjunto de auxiliares para animação: tween(), animate(), curvas ease.*, transition('pop') para mudança nativa de conteúdo. O HTML estático ao redor de <script> serve como uma visualização de fallback, caso o script não seja executado.
De acordo com o demo «Live Scripts», cada script é executado em sua própria sandbox JavaScriptCore — o motor JavaScript do macOS. Clicar com o botão direito em um cartão abre «Script Log…» com seu console, e o comando /stats no chat com o HTML Bot ativa, sobre cada mensagem, o tempo de renderização do frame, a taxa de quadros, o processador e a memória — uma ferramenta para medições, não para o usuário.
Sandbox e rede
O demo «Runaway scripts the sandbox stops» mostra os limites diretamente nos cartões: um loop infinito ao carregar, segundo o texto deles, é interrompido pelo JavaScriptCore após 50 ms e deixa o HTML estático; um cartão com o botão Hang inicia um loop semelhante dentro de onAction; um timer que a cada 100 ms ocupa o processador por 40 ms excede o orçamento de 200 ms de tempo de processador por segundo.
O modo WebKit reside em um módulo separado, WidgetSandbox, e é isolado da rede por três camadas de uma vez. A página recebe uma política de segurança de conteúdo com connect-src 'none' e scripts apenas por uma chave única; uma lista de regras é conectada ao WebView, que bloqueia todos os endereços http, https, ws, wss e ftp; antes do código da mensagem, fetch, XMLHttpRequest, WebSocket, EventSource, RTCPeerConnection, workers e window.open são removidos da janela. Imagens e mídias são permitidas apenas de data: e blob:, arquivos como three.js são entregues por um manipulador de esquema interno.
Como as cenas 3D são estruturadas
Os jogos do «3D Lab» são escritos com código three.js comum: cena, câmera ortogonal, luz com sombras, geometria de cubos. O renderizador é criado como THREE.WebGLRenderer, mas com um parâmetro cornerRadius, que não existe no three.js — ele é entendido apenas pelo wrapper do aplicativo. O binário contém o wrapper para o modo de página WebKit: ele substitui WebGLRenderer por um herdeiro, insere seu canvas em um elemento com o atributo data-3d, monitora o tamanho e passa as setas, WASD, espaço e Enter para o onKey do jogo — com Cmd, Ctrl ou Alt, as teclas são enviadas para o aplicativo.
No balão, de acordo com a descrição da conversa, a mesma cena é renderizada pelo renderizador Metal do aplicativo; o módulo possui as classes HTMLBubbleGPU, HTMLBubbleGPUPool e buffers para recursos Metal. Em Macs sem Metal, o jogo exibe um placeholder «3D needs a Mac with Metal».
Telegram Serverless e tgcloud.ai
Nem no pacote HTMLBubbles, nem nas strings do binário, nem no esquema da API há referências a Telegram Serverless, tgcloud.ai ou qualquer outro executor de servidor: as mensagens de demonstração estão localmente, e o HTML Bot não tem rede por design. A conexão entre eles ainda não é confirmada por nada além da coincidência de tempo.




