O projeto Fugu está "concluído"?

Um dos objetivos da equipe do Project Fugu é permitir que os desenvolvedores façam tudo na Web que os apps específicos da plataforma podem fazer. Por isso, a equipe tem se dedicado a adicionar recursos ausentes que os desenvolvedores da Web precisam para preencher essa lacuna. Se você não acredita em mim, basta olhar a seção "Shipped" do rastreador de API do Fugu. Estas são as 55 APIs enviadas, em ordem de envio mais recente para menos recente:

Nome da API Enviado em
API Web BluetoothChrome 56
API WebUSBChrome 61
Meta de compartilhamento da WebChrome 71
API Web Share de nível 2Chrome 75
Área de transferência assíncrona: ler e gravar imagensChrome 76
Nível 2 do Compartilhamento da WebChrome 76
Digitar dica de chaveChrome 77
Ampliar a cota de armazenamentoChrome 78
API Get Installed Related AppsChrome 80
Sincronização periódica em segundo planoChrome 80
desktop-pwas: suporte ao modo de exibição "minimal-ui"Chrome 80
Codecs de compactaçãoChrome 80
API ContactsChrome 80
API BadgingChrome 81
Permitir que a API Badging seja usada por um worker de serviço por pushChrome 81
API Barcode DetectionChrome 83
API Content IndexingChrome 84
WebOTPChrome 84
API Screen Wake LockChrome 84
API Streams: streams transferíveisChrome 85
Atalhos de appsChrome 85
Acesso ao sistema de arquivosChrome 86
Suporte a text/html para a API Async ClipboardChrome 86
Suporte para inclinação panorâmica/zoom da câmeraChrome 87
FUGU Implementar a captura de saída de áudio do sistema e do aplicativo para fones de ouvido e alto-falantes Chrome 88
PointerLock unadjustedMovementChrome 88
Criar um seletor de fotos/vídeos semelhante ao seletor de fotos do AndroidChrome 88
Integração do Compartilhamento na Web (navigator.share) com o Windows 10Chrome 88
NFC da WebChrome 89
WebHID (dispositivo de interface humana)Chrome 89
API Web SerialChrome 89
Compartilhar na Web no computadorChrome 89
API Handwriting RecognitionChrome 90
Configuração gerenciada para aplicativos da WebChrome 91
Executar o PWA no Login do SOChrome 91
WebCodecsChrome 93
Detecção de inatividadeChrome 94
API EyeDropperChrome 95
Menu de atalhos de apps para PWAs no macOS e LinuxChrome 96
Registro do gerenciador de protocolos de URL para PWAs Chrome 96
WebTransportChrome 97
Área de transferência: colar imagens Retina perde os metadados de pHYs.Chrome 98
O PWA precisa ser desinstalado da mesma forma que um "app real"Chrome 99
NFC da Web: NDEFReader makeReadOnly()Chrome 100
Posição da janela em várias telasChrome 100
HIDDevice forget()Chrome 100
USBDevice forget()Introdução ao Chrome
Comportamento do mesmo objeto do USB da WebIntrodução ao Chrome
Sobreposição de controles de janela para apps da Web para computador instaladosChrome 102
Processamento de arquivosChrome 102
A API chrome.management não pode mais interagir com apps PWAChrome 102
SerialPort forget()Chrome 103
Acesso à fonte localChrome 103
Solicitação de Fugu: atalhos de apps dinâmicos (Shortcuts v2)Chrome 104
Formatos personalizados da Web para a API Async ClipboardChrome 104
Todas as APIs do Fugu enviadas até o momento.

É uma lista longa, e temos mais coisas para fazer. Ainda há algumas APIs e recursos em teste de desenvolvedor (ou seja, implementados, mas com uma flag de recurso), alguns que iniciamos a trabalhar e muitos em consideração. Como você pode ver, ainda não é hora de relaxar e dizer que terminamos.

Métodos de arquivo síncronos para o sistema de arquivos particular de origem

Pelo contrário, em vez de declarar nosso esforço como concluído, estamos apenas começando. Por exemplo, considere o gráfico abaixo, que mostra o crescimento relativo do uso do método navigator.storage.getDirectory(), usado como ponto de entrada para o sistema de arquivos particular de origem (OPFS, na sigla em inglês). Esse método é usado, por exemplo, para necessidades de armazenamento de alto desempenho do Photoshop, e a comunidade de armazenamento está muito interessada desde o início da descontinuação do Web SQL e até antes.

Gráfico mostrando o uso relativo do método navigator.storage.getDirectory.

Agora que mais pessoas usam o OPFS, outros requisitos surgiram. Por exemplo, a necessidade de um conjunto totalmente síncrono de métodos de arquivo em um contexto de worker (consulte whatwg/fs#7 para mais detalhes). Embora as novas APIs da Web sejam geralmente assíncronas, ter métodos síncronos tornaria o trabalho com o OPFS muito mais simples em um contexto Wasm. Como isso está acontecendo em um worker, a linha de execução principal não pode ser bloqueada.

Melhorias de privacidade para as APIs de hardware

Outro exemplo são as APIs de hardware que permitem a conexão com dispositivos HID, seriais, USB, Bluetooth e NFC. Embora algumas dessas APIs existam há algum tempo, até recentemente não havia como esquecer um dispositivo que você já tinha conectado. Agora há, graças aos métodos forget() para algumas das APIs. Por exemplo, confira como esquecer um dispositivo serial conectado anteriormente, o que melhora a privacidade da API.

// Request a serial port.
const port = await navigator.serial.requestPort();
// Then later revoke permission to the serial port.
await port.forget();

Refinamentos para a API Multi-Screen Window Placement

Um exemplo final é a API Multi-Screen Window Placement, em que, com base no feedback dos desenvolvedores, os rótulos de tela genéricos anteriores, como "Internal Display 1", foram substituídos por rótulos mais significativos, como "Built-in Retina Display", para que os usuários possam associar esses rótulos com mais facilidade às telas da configuração multitela.

Conclusões

Como você pode ver nesses três exemplos, o Projeto Fugu está longe de terminar. Continue ou comece a usar nossas APIs e envie feedback. Como todas as especificações do Fugu são desenvolvidas abertamente no GitHub, você pode registrar um problema de especificação no repositório correspondente do GitHub ou adicionar suas ideias a um problema existente. Se você encontrar um bug na implementação do Chrome ou descobrir que ela é diferente da especificação, registre um bug em new.crbug.com. Inclua o máximo de detalhes possível e forneça instruções simples para reproduzir o problema.

E, se você está preocupado com o suporte do navegador, muitas APIs do Fugu são ótimas melhorias progressivas. Consulte meu artigo SVGcode: um PWA para converter imagens raster em gráficos vetoriais SVG para inspiração. Também não consideramos nosso trabalho concluído até que essas APIs sejam interoperáveis. Vamos continuar pressionando para que outras empresas de navegadores façam a padronização, os testes e a adoção.