Show HN: htmz – uma ferramenta de baixo consumo para HTML
Um minúsculo “microframework” HTML de 181 bytes chamado htmz, que usa um iframe e o atributo `target` para trocar fragmentos de página sem AJAX tradicional ou frameworks de front-end, está impressionando muitos desenvolvedores como uma forma engenhosa e minimalista de construir páginas interativas. Comentadores o comparam ao htmx e a técnicas mais antigas como pjax, ponderando sua elegância e baixa complexidade em contraste com desvantagens práticas como comportamento quebrado do botão Voltar, falta de degradação elegante sem JavaScript, compatibilidade com CSP e latência para UIs altamente interativas. O sentimento geral é que o htmz é melhor visto como uma prova de conceito afiada que destaca o quão perto os navegadores estão de suportar nativamente apps declarativas, orientadas por hipertexto, em vez de uma solução pronta para produção.
Reação geral & intenção
- Muitos acham o htmz impressionantemente pequeno, elegante e uma demonstração engenhosa de profundo conhecimento da plataforma.
- Ele é repetidamente descrito como um “hack divertido”, “experimento” ou até paródia de frameworks mais pesados, embora alguns ainda o considerariam para pequenos projetos reais.
- Outros o veem como tecnicamente interessante, mas confuso ou frágil para depurar, e não como algo que gostariam de herdar em código de produção.
Relação com htmx e outras ferramentas
- O htmz é amplamente descrito como um subconjunto / reimplementação em uma linha do comportamento central do htmx (fragmentos renderizados no servidor trocados no DOM).
- O htmx é apontado como mais pesado porque adiciona suporte a histórico, sistemas de eventos/callbacks, morphing do DOM, SSE, coleta de inputs e degradação elegante; isso é apresentado tanto como recurso quanto como custo.
- Fazem-se comparações com pjax, Vue (frequentemente elogiado por “reduzir de escala”), Alpine, hyperscript e outros frameworks “HTML-first” ou micro.
Mecanismo & semântica HTML
- Truque central: usar
<base target>e um<iframe>oculto como proxy; links/formulários apontam para o iframe, cujo fragmento carregado é movido para o DOM principal com base no hash da URL. - Alguns veem a reutilização de identificadores de fragmento (
#id) e o uso original de<slot>como abuso semântico; outros argumentam que isso é um hack aceitável, consistente com o comportamento de iframe. - Sugestões incluem usar elementos inertes como
<div>ou<output>, e padrões alternativos de seletores CSS para reduzir ainda mais o snippet.
Histórico / comportamento do botão Voltar
- Vários comentaristas observam que cada clique adiciona uma entrada no histórico do navegador, quebrando o comportamento esperado do Voltar e poluindo o histórico.
- Propostas: usar botões em vez de links, usar
replaceState, ou uma “extensão” para gerenciar o histórico; alguns acham que peculiaridades de histórico são aceitáveis para demos, mas ruim de UX para apps reais.
Dependência de JavaScript & degradação elegante
- O htmz quebra completamente sem JS; ele também se comporta mal quando usuários abrem links em novas abas ou copiam destinos de links.
- Há um debate extenso sobre se o suporte sem JS ainda importa:
- Um lado insiste que progressiva melhoria e “HTML-first, JS como atualização” são importantes para acessibilidade, privacidade e dispositivos legados/de baixa potência.
- Outro lado argumenta que desativar JS equivale a desativar parte do navegador, então falhas são aceitáveis.
- Variadas estratégias são propostas: inserção dinâmica da tag base, parâmetros de query especiais, cookies e o novo cabeçalho
Sec-Fetch-Dest: iframepara distinguir páginas completas de fragmentos.
Desempenho & trade-offs de UX
- Alguns se preocupam com a latência de ida e volta para cada interação (por exemplo, alternar abas) e dizem que tais interações deveriam ser puramente no cliente.
- Outros respondem que pequenos fragmentos HTML pela rede podem superar grandes bundles de JS, e que atrasos modestos são aceitáveis em muitas regiões e casos de uso.
- Surgem ideias híbridas: HTML renderizado no servidor para a maioria dos fluxos, com pequenos scripts no cliente (ou coisas como hyperscript/Alpine) para interações locais de latência zero.
Segurança, CSP & preocupações entre origens
onloadinline e iframes podem entrar em conflito com uma Content-Security-Policy estrita; são mencionadas alternativas como nonces ou hashes.- Variantes entre origens usando
postMessagesão sugeridas, mas apontadas como perigosas setargetOrigin: '*'for usado, já que isso pode vazar conteúdo do iframe.
Discussão mais ampla sobre a plataforma
- Vários comentaristas veem o htmz como evidência de que “AJAX nativo em HTML” ou carregamento de fragmentos deveria ser padronizado.
- Há referências a propostas existentes (por exemplo, um elemento
html-include) e à ideia de um novo tipo MIME de fragmento. - Há nostalgia pelos hacks de iframe/XHR pré-SPA e a sensação de que stacks modernas de UI complicam em excesso o que a hiper mídia básica já faz bem.