← Todos os Posts

Por que o Safari 27 entrega 525 correções: notas do laboratório do WebKit

A coisa mais reveladora que a equipe do Safari disse na WWDC 2026 não foi sobre um recurso. Ao longo de uma hora no laboratório do grupo de Safari e Tecnologias Web, os engenheiros do WebKit ficaram rondando uma única pergunta: como uma equipe de navegador decide o que construir, e por que isso tantas vezes parece lento visto de fora? A resposta à qual eles voltavam, parafraseada do laboratório, era que eles genuinamente se importam, respaldada por um número que você pode conferir. O Safari 27 entrega 58 novos recursos e 525 correções, o que o WebKit chama de “a maior pilha de correções em qualquer lançamento do Safari na memória recente.”1 Este post é sobre o raciocínio por trás desse número, extraído do laboratório e fundamentado nas próprias notas de lançamento do WebKit.

Assista: Safari and Web Technologies Group Lab (WWDC26)

O Safari & Web Technologies Group Lab da WWDC 2026.

TL;DR

  • O Safari 27 entrega 58 novos recursos e 525 correções, a maior contagem de correções em qualquer lançamento do Safari.1 O laboratório enquadrou este ano como uma campanha contra “paper cuts”: perseguir os pequenos bugs de correção que tornam a plataforma confiável, não apenas os recursos de destaque.
  • O exemplo mais claro é uma reescrita do carregador de módulos do JavaScript. As notas do WebKit descrevem a correção de “múltiplos bugs de correção de top-level await com uma reescrita do ES module loader para conformidade com os padrões”, substituindo uma implementação baseada em uma proposta abandonada de 2016 que antecedia totalmente o top-level await.1
  • O laboratório usou o seletor :has() como seu estudo de caso sobre como os padrões realmente se destravam: um recurso que os engenheiros chamaram de impossível por anos, até que a engenharia da Igalia o tornou rápido o suficiente, e agora ele está em todos os principais mecanismos.23
  • A história dos controles de formulário amadureceu: appearance: base-select limpa a estilização nativa do <select> para que você comece de uma tela em branco, com a direção mais ampla de “estilizar todo controle de formulário” ainda sendo uma especificação não resolvida sobre a qual o painel abertamente discordou.12
  • WebKit e JavaScriptCore rodam em todo sistema operacional da Apple, incluindo o watchOS, e o SwiftUI agora tem uma WebView de primeira classe, então “o mecanismo da web” está mais perto de um serviço de sistema do que de um único aplicativo.24

O número, e o que ele significa

O enquadramento do Safari 27 pelo WebKit é incomumente quantitativo. Além dos novos recursos, o lançamento carrega 525 correções, “a maior pilha de correções em qualquer lançamento do Safari.”1 No laboratório, a equipe conectou esse número a uma postura, e não a um marco: o sentimento parafraseado era que os desenvolvedores web às vezes interpretam as escolhas de um navegador como falta de interesse pela experiência cotidiana deles, e a resposta da equipe era o oposto, que não há vantagem alguma em tornar a web pior no Safari.2 Você não precisa aceitar o sentimento por fé, porque a contagem de correções é a evidência, e a própria descrição que o laboratório fez das notas de lançamento foi que elas se estendem o suficiente para você rolar por um bom tempo.2

A melhor ilustração de todas é uma peça de encanamento que a maioria dos desenvolvedores nunca vê. O WebKit reescreveu o carregador de módulos do JavaScript. As notas de lançamento são específicas: a equipe “corrigiu múltiplos bugs de correção de top-level await com uma reescrita do ES module loader para conformidade com os padrões”, porque a implementação anterior era “baseada em uma proposta abandonada do WHATWG Loader de 2016 que antecedia totalmente o top-level await” e podia permitir que importações acessassem exportações antes de elas estarem completamente inicializadas.1 Reescrever um carregador de módulos para corrigir uma classe de bugs de ordenação de await é um esforço enorme para algo que, feito corretamente, ninguém percebe. Essa é a campanha contra “paper cuts” em um único commit.

Como um padrão realmente se destrava: a história do :has()

A narrativa mais útil do laboratório foi sobre o seletor CSS :has(), o tão desejado seletor de pai. A versão parafraseada do painel: os engenheiros de navegadores disseram não por boa parte de duas décadas, sob o argumento de que os chips não eram rápidos o suficiente para avaliá-lo sem destruir o desempenho da página, até que o trabalho para torná-lo viável finalmente aconteceu e ele foi lançado em todos os navegadores.2 A espinha verificável por trás dessa história é real. O WebKit lançou :has() no Safari 15.4, o Chromium veio em seguida no Chrome 105 com a engenharia liderada pela consultoria de código aberto Igalia, e o Firefox completou o conjunto na versão 121, então o seletor que era “impossível” por anos agora funciona em todos os principais mecanismos.3

O laboratório amarrou isso a um princípio de design que vale conhecer pelo nome. A “priority of constituencies” do projeto HTML classifica de quem são as necessidades que prevalecem quando entram em conflito: usuários acima de autores, autores acima de implementadores, implementadores acima de especificadores, e todos eles acima da pureza teórica.5 É a regra que explica por que um navegador carregará para sempre uma feia solução de compatibilidade em vez de quebrar um site, e por que um recurso que ajuda os autores ainda pode esperar anos se implementá-lo prejudicasse os usuários por meio do desempenho. O :has() é a regra se resolvendo em câmera lenta: útil aos autores, bloqueado pelo custo para o usuário de torná-lo rápido, lançado apenas quando esse custo baixou.

O projeto de controles de formulário, e uma discordância em público

O recurso de CSS mais pedido da última década está finalmente chegando: estilizar controles de formulário nativos sem reconstruí-los a partir de <div>s. O Safari 27 entrega appearance: base-select, que, nas palavras do WebKit, permite que você “limpe a estilização nativa e comece com uma paleta limpa”, para então sobrepor seu próprio CSS mantendo a semântica real do controle, o tratamento de teclado e a acessibilidade.1 Ele anda junto com ::picker(select), ::picker-icon, ::checkmark e um elemento <selectedcontent>, a superfície de select personalizável abordada em estilizando o elemento select de verdade.

O que o laboratório acrescentou foi a honestidade sobre quão inacabada está a visão mais ampla. Estender appearance: base a todo controle de formulário é uma direção declarada, não uma especificação lançada, e o painel discordou de si mesmo diante das câmeras sobre a pergunta mais difícil: como deveria ser o estado padrão sem estilo, afinal. Parafraseando a troca, uma posição era que um controle sem estilo deveria parecer um controle moderno e simples; a réplica era que “moderno” é um alvo de moda em movimento e não algo que uma especificação consiga fixar, então o estado base deveria herdar o máximo possível da página e, fora isso, sustentar o mínimo possível de opinião.2 A restrição de engenharia com a qual eles concordaram é a parte genuinamente difícil: o recurso só funciona se a renderização padrão e a estrutura do DOM forem idênticas entre os navegadores, porque os autores vão estilizar contra ambas.2 É por isso que um problema de 30 anos ainda é um trabalho em andamento, e não uma caixinha marcada.

O mecanismo da web é um serviço de sistema

Um reenquadramento útil do laboratório: o WebKit é muito mais do que o Safari. WebKit e JavaScriptCore estão presentes em todo sistema operacional da Apple, incluindo o watchOS, que não tem navegador algum, e qualquer aplicativo que execute JavaScript se apoia no JavaScriptCore.2 O próprio material da WWDC do WebKit faz a mesma observação, descrevendo interfaces de aplicativos “impulsionadas pelo HTML, CSS e JavaScript que é renderizado pelo WebKit e JavaScriptCore, os mesmos mecanismos dentro do Safari”, em todas as plataformas.1 O desdobramento prático para os desenvolvedores chegou em 2025, quando o SwiftUI ganhou uma WebView nativa e um modelo WebPage, tornando o WebKit uma view de primeira classe do SwiftUI em vez de uma WKWebView envolta em UIViewRepresentable.4 Quando o mecanismo da web está tão profundamente no SO, “isto deveria ser nativo ou web” deixa de ser uma escolha binária.

O que o WebKit está lançando primeiro, e construindo a seguir

Dois fios menores merecem a atenção de um desenvolvedor. Primeiro, o Safari continua a lançar recursos de CSS à frente de outros mecanismos: hanging-punctuation é exclusivo do Safari há anos, a função CSS filter() (distinta da propriedade filter, amplamente suportada) permanece exclusiva do WebKit, e o Safari lançou recentemente a função random(), com uma companheira random-item() para escolher entre valores discretos definida no rascunho do CSS Values.67 O reflexo de “o Safari está atrasado” deixa passar com que frequência ele é o primeiro.

Segundo, a história das extensões web está se consolidando. O esforço multinavegador do WebExtensions está migrando de um grupo comunitário de vários anos rumo a um W3C Working Group formal, com um rascunho de carta de 2025 voltado a uma especificação real de interoperabilidade.8 E a Apple anunciou uma virada voltada ao consumidor no keynote da WWDC 2026: “Describe an Extension”, que usa a Apple Intelligence para gerar e instalar uma extensão personalizada do Safari a partir de uma descrição em linguagem simples, sem Xcode e sem a ida e volta à App Store.9 Trate isso como um anúncio de keynote, e não como uma API para desenvolvedores, mas a direção é clara: a superfície das extensões está se ampliando ao mesmo tempo na camada dos padrões e na camada do usuário final.

O que tirar disso

O laboratório é uma janela para um trade-off que a maioria da cobertura de recursos pula. Uma equipe de navegador pode perseguir recursos de destaque ou perseguir a correção, e o WebKit passou este lançamento escolhendo visivelmente a segunda opção: 525 correções, um carregador de módulos reescrito por causa de uma classe de bugs de await, um seletor de pai que esperou duas décadas até o hardware acompanhar. A lição para qualquer um que constrói sobre a plataforma é ler as notas de lançamento, não o keynote, quando você quer saber o que de fato melhorou. Os recursos estão em select personalizável, CSS Grid Lanes e o elemento HTML model; o raciocínio por trás do ritmo está no laboratório.

FAQ

Quantas correções há no Safari 27?

525 correções ao lado de 58 novos recursos, o que o WebKit descreve como a maior contagem de correções em qualquer lançamento do Safari.1 O laboratório enquadrou o ano em torno da correção e dos “paper cuts”, e não dos recursos de destaque.

O que é a reescrita do carregador de módulos?

O WebKit reescreveu o ES module loader do Safari para conformidade com os padrões, corrigindo múltiplos bugs de correção de top-level await. A implementação anterior era baseada em uma proposta abandonada do WHATWG Loader de 2016 que antecedia o top-level await, e podia permitir que importações acessassem exportações antes de elas estarem completamente inicializadas.1

O appearance: base está sendo lançado?

appearance: base-select é lançado no Safari 27 para o elemento <select>, limpando a estilização nativa para que você possa aplicar seu próprio CSS mantendo a semântica do controle.1 Estender appearance: base a todos os controles de formulário é uma direção declarada, mas uma especificação não resolvida, e o painel do laboratório discordou abertamente sobre como o padrão sem estilo deveria ser.2

A Apple realmente adicionou extensões do Safari geradas por IA?

Sim. A Apple anunciou “Describe an Extension” no keynote da WWDC 2026: ele usa a Apple Intelligence para gerar e instalar uma extensão personalizada do Safari a partir de uma descrição em linguagem natural, sem Xcode ou a App Store.9 É um recurso para o consumidor, não uma API para desenvolvedores.


Os posts de recursos do Safari cobrem o o quê: estilizando o <select> de verdade, CSS Grid Lanes para masonry nativo e o elemento HTML <model>. Este aqui cobre o porquê por trás do ritmo. O hub completo da série é a Série Ecossistema Apple.

Referências


  1. WebKit, News from WWDC26: WebKit in Safari 27 beta. Fonte para os 58 novos recursos e 525 correções (“the largest pile of fixes in any Safari release”), a reescrita do ES module loader (“Fixed multiple top-level await correctness bugs with a rewrite of the ES module loader for standards compliance”, substituindo uma implementação “based on an abandoned 2016 WHATWG Loader proposal that predated top-level await entirely”), a descrição de appearance: base-select (“clear the native styling and start with a clean palette”) com ::picker(select)/::picker-icon/::checkmark/<selectedcontent>, e o enquadramento de WebKit e JavaScriptCore como os mecanismos por trás das interfaces de aplicativos nas plataformas da Apple. 

  2. Apple, WWDC 2026 sessão 8015, Safari and Web Technologies Group Lab. Parafraseado a partir de uma gravação transcrita localmente; a Apple não publica legendas oficiais para os laboratórios, então a formulação aqui é uma paráfrase, não uma citação, e o fraseado exato não é verificado. Fonte para o enquadramento da equipe sobre se importar com a plataforma, atrelado à extensão das notas de lançamento; a narrativa do :has(), em que os engenheiros resistiram a ele por cerca de duas décadas por motivos de desempenho; a discordância ao vivo sobre o estado base sem estilo de appearance: base (controle moderno vs. herdar da página) e a restrição de renderização e estrutura de DOM idênticas entre navegadores; e o ponto de que WebKit/JavaScriptCore rodam em todo sistema operacional da Apple, incluindo o watchOS. 

  3. WebKit, Using :has() as a CSS Parent Selector and much more, e o registro de lançamento entre mecanismos: Safari 15.4, Chrome 105 (engenharia liderada pela Igalia), Firefox 121. Fonte para o lançamento de :has() em todos os principais mecanismos de navegador depois de anos sendo considerado inviável. 

  4. Apple, WebKit for SwiftUI e WWDC 2025 sessão 231, Meet WebKit for SwiftUI. Fonte para a WebView nativa do SwiftUI e o modelo WebPage introduzidos nos lançamentos de 2025, tornando o WebKit uma view de primeira classe do SwiftUI. 

  5. W3C, HTML Design Principles: Priority of Constituencies. Fonte para a ordenação “users over authors over implementors over specifiers over theoretical purity.” 

  6. MDN / caniuse, hanging-punctuation e a função CSS filter(). Fonte para ambos serem suportados no Safari/WebKit e não no Chrome ou Firefox no momento da redação (a função filter() é distinta da propriedade filter, amplamente suportada). 

  7. W3C, CSS Values and Units Module Level 5, que define random() e random-item(). O Safari lançou a função random(); random-item() seleciona entre valores discretos de palavra-chave ou de propriedade. 

  8. W3C, WebExtensions Community Group e o rascunho de 2025 da carta do WebExtensions Working Group. Fonte para o esforço multinavegador do WebExtensions migrando de um grupo comunitário rumo a um Working Group formal. 

  9. A Apple anunciou “Describe an Extension” no keynote da WWDC 2026, gerando e instalando uma extensão personalizada do Safari a partir de uma descrição em linguagem natural via Apple Intelligence, sem Xcode ou a App Store. Reportado pelo MacRumors, 8 de junho de 2026. Descrito aqui como um anúncio de keynote e recurso para o consumidor, não uma API para desenvolvedores. 

Artigos relacionados

CSS Grid Lanes: masonry nativo no Safari

O CSS Grid Lanes traz o layout masonry nativo para o Safari 26.4 em três linhas de CSS, com um controle de flow-toleranc…

9 min de leitura

Customizable Select: enfim, estilize o <select> de verdade

Safari 27 e Chrome 135 deixam você estilizar o elemento select de verdade: appearance: base-select, ::picker(select), HT…

10 min de leitura

O Manifesto No-Build: Publicando Sem um Bundler

FastAPI + HTMX + CSS puro com zero ferramentas de build e pontuações perfeitas no Lighthouse. Números reais de produção,…

9 min de leitura