O Ladybird é financiado inteiramente pelo apoio generoso de empresas e indivíduos que acreditam na web aberta. Este mês, o projeto recebeu os seguintes patrocínios:
- Paul Copplestone – $10 000 (patrocínio renovado)
- SerpApi – $5 000 (patrocínio renovado)
- Zeroramp – $5 000
- Kinde – $5 000
- Sjors Witteveen – $1 000 (patrocínio renovado)
- publicqi – $1 000
- All Things Secured – $1 000
O projeto agradece profundamente a todos os patrocinadores. Quem quiser apoiar o desenvolvimento pode entrar em contato.
Downloads
O Ladybird agora suporta downloads de arquivos. Uma barra de ferramentas exibe um popover com os downloads ativos e o progresso, existe uma página about:downloads, cancelamento de downloads e um pedido de confirmação ao tentar sair com operações em andamento (problema #10335).
Os downloads são gerenciados no processo de interface do usuário, permitindo que uma transferência continue mesmo se a aba que a iniciou for fechada.
Histórico de navegação
Uma nova página about:history lista o histórico local de navegação, com pesquisa e capacidade de excluir entradas (problema #10038). Internamente, o histórico de navegação agora reside no processo de interface do usuário (problema #10085).
Clicar com o botão direito ou pressionar longamente os botões de voltar e avançar exibe um menu nativo de histórico, mostrando títulos salvos e favicons (problema #10128). Também existe um atalho de teclado para limpar dados de navegação, com links diretos para os respectivos diálogos de configuração (problema #10262).
DevTools: armazenamento, estilos e scripts
Os DevTools ganharam uma aba Armazenamento. É possível inspecionar e modificar cookies (problema #10035), navegar e editar localStorage e sessionStorage (problema #10055) e inspecionar bancos de dados IndexedDB (problema #10143).
A inspeção de regras CSS também foi implementada, exibindo as declarações individuais por trás de um valor computado, com regras sobrescritas tachadas, inválidas destacadas e links funcionais “ir para fonte”, incluindo para estilos do agente do usuário (problema #9869).
Existe também uma nova visualização de fontes de script com pretty‑printing, dobramento, pesquisa e “ir para definição” (problema #10195).
Mídia: velocidade de reprodução e autoplay com silêncio
A velocidade de reprodução de mídia pode ser alterada (problema #9925). O áudio é alongado no tempo usando o algoritmo WSOLA do Chromium, mantendo o pitch e a inteligibilidade da fala ao acelerar ou desacelerar um clipe.
Mídia silenciada agora pode autoplay por padrão (problema #10014). A antiga configuração de autoplay era tudo‑ou‑nada e bloqueava todo o conteúdo, incluindo vídeos de fundo silenciosos, o que deixava muitos sites com aparência quebrada. Agora existe uma política de três estados que permite que mídia inaudível seja reproduzida automaticamente, mantendo a reprodução audível bloqueada até interação do usuário, impedindo que unmute ou play() executem áudio sem permissão.
Segurança e endurecimento
Junho foi dedicado a tornar o Ladybird mais difícil de atacar.
-
Serviços em sandbox: Processos auxiliares agora rodam dentro de verdadeiros sandboxes no Linux e macOS, usando
seccomp/Landlockno Linux e perfis Seatbelt no macOS (problemas #10001, #10042). O sandboxing está ativado por padrão (problema #10132). -
Particionamento de heap: Dados de strings, stores de
ArrayBuffere armazenamento de propriedades de objetos JS agora residem em partições dedicadas de heap, mantendo dados não relacionados longe de estado sensível a segurança (problemas #10041, #10025, #10033). -
Correções de fuzzing: Um conjunto de travamentos encontrados por fuzzers e problemas de comportamento indefinido foram corrigidos em DOM, layout, decodificação de imagens e matemática de pixels CSS (problemas #9959, #10100, #10110, #10217, #10249).
-
Decodificação segura e sem memória: Decodificação e codificação de texto foi movida para o
encoding_rsdo Firefox (Rust), e decodificação GIF foi movida para o Wuffs (problemas #10204, #10031). -
Isolamento de canvas: Dados de imagem de origem cruzada são agora rastreados para tingimento de canvas, e
toDataURL()/toBlob()são rejeitados em canvases tingidos (problemas #10094, #10013).
GPU agora no compositor em sandbox
No mês passado, o compositor (a parte do navegador que monta e pinta os pixels finais na tela) foi movido para seu próprio processo. Este mês, renderização de canvas 2D e WebGL cruzou a mesma fronteira.
Listas de comandos de canvas 2D são agora reprodutíveis e rasterizadas no compositor (problemas #10086, #10133), contextos aninhados rasterizam durante reprodução (problema #10194), e comandos WebGL são transmitidos sobre memória compartilhada (problema #10269).
O resultado é tanto segurança quanto arquitetura: processos WebContent não precisam mais de acesso direto à GPU (problemas #10154, #10156). Zoom com pinça também é tratado de forma assíncrona no compositor, mantendo a responsividade mesmo quando a thread principal está ocupada (problema #10120).
Um único interpretador JavaScript
O LibJS agora roda seu interpretador de assembly otimizado em todas as plataformas, após ter sido habilitado no Windows (problema #10093). Isso permitiu a remoção do antigo interpretador genérico de bytecode e a consolidação em um único interpretador (problema #10099), deixando um único caminho de código para otimizar e manter.
Strings JavaScript também foram movidas para UTF‑16 em todo o lugar, coincidindo com a definição da linguagem e removendo muita conversão desnecessária (problema #10231).
WebAssembly GC
O LibWasm ganhou suporte para WebAssembly GC, junto com algumas propostas de tratamento de exceções (problema #10130). Wasm GC adiciona tipos de referência de struct e array com garbage collection, que um número crescente de ferramentas (para linguagens como Kotlin, Dart e Java) visam ao compilar para WebAssembly.
O JIT baseado em Cranelift do mês passado também recebeu uma rodada de correções, incluindo correções de correção de erros e fazendo-o funcionar sob nosso conjunto de testes (problemas #9813, #9878, #9906).
Recursos CSS
-
Unidades relativas a container:
cqw,cqh,cqi,cqb,cqminecqmaxsão agora suportadas, construindo sobre consultas de container do mês passado (problema #9721). -
contrast-color(): A funçãocontrast-color()está implementada, escolhendo preto ou branco para legibilidade contra um dado fundo (problema #9920). -
Propriedades personalizadas registradas:
@property‑registeredcustom properties agora são computadas de acordo com sua sintaxe declarada (problema #10254). -
progress(): A função matemáticaprogress()está implementada (problema #10181). -
anchor()emcalc():anchor()pode agora ser usado dentro de expressõescalc()(problema #10108).
Interface do navegador
-
Pré-visualizações de aba ao pairar: Pairar sobre uma aba em segundo plano agora mostra uma pré-visualização em miniatura, construída a partir do bitmap em cache de WebContent, sem acionar um repaint (problema #10049).
-
IME no macOS: Suporte a editor de método de entrada agora funciona em conteúdo web no macOS, então entrada composta CJK e outras se comporta como esperado (problema #9756).
-
Autocomplete e comportamento de janela: Um conjunto de correções em torno do editor de localização e tratamento de janelas no macOS, incluindo melhor descarte de autocomplete e redimensionamento de janelas sem bordas (problema #10220).
-
Abas verticais: A tira de abas verticais agora pode ser posicionada à direita (problema #10198), e mostra ícones de áudio e fechar em abas recolhidas (problema #9829).
Sites que funcionam melhor
-
tweakers.net: Implementação de
contrast-color()corrigiu texto ilegível em banner laranja (problema #9920). -
rubyllm.com: O logo do site usa uma imagem de conteúdo CSS que só aparece em modo escuro, agora renderiza corretamente (problema #10273).
-
rightmove.co.uk: Permitir transformações em pseudo-elementos limpa artefatos de caixa na navbar, que são supostamente transformados em formas de seta (problema #10116).
-
Correção de layout de tabela em crossword online limpou sobreposição indesejada de células (problema #10306).
Outros ajustes:
-
WhatsApp Web não mostra mais o diálogo “navegador não suportado” e reacha a tela de login QR (problema #10297).
-
Transfermarkt não trava mais em navegação (problema #10291).
-
npmx.dev: Dois ajustes de layout de grade (problema #10190).
-
chatgpt.com: Redução de trabalho redundante de invalidação de estilo (problema #10067).
-
GitHub: Mais rápida pairagem sobre links em longas listas de pull requests (problema #9979).
Testes da plataforma web
A pontuação WPT subiu de 2 075 546 para 2 078 912 este mês, um ganho de 3 366 subtestes.
Outras alterações notáveis
-
Web Locks API: Suporte inicial para a API Web Locks API landed (problema #10261).
-
Fontes de emoji conscientes de apresentação: Fallback de fonte de emoji agora respeita
font‑variant‑emoji, e text‑shadows de emoji pintam na cor da sombra (problemas #10192, #10168).
Nota sobre o processo de desenvolvimento
Em junho, também mudamos como o código entra no Ladybird: agora é apenas para maintainers, e não estamos mais aceitando contribuições públicas de código. O Ladybird permanece de código aberto, e envolvimento externo ainda importa através de relatórios de bugs, reduções, testes de site, discussão de padrões e relatórios de segurança. O raciocínio completo está documentado em Changing How We Develop Ladybird.
Leia o relatório completo em ladybird.org/newsletter/2026-06-30.