
Dynamic Workers da Cloudflare permitem apps programáveis por usuários
O que são Dynamic Workers
A Cloudflare lançou Dynamic Workers, um primitivo mais leve que Workers for Platforms. O marketing oficial focou em agentes de IA e no modo code, que permite a um agente LLM executar código arbitrário em sandboxes efêmeras. Jeremy Morrell, porém, destaca outro uso: tornar aplicações web programáveis pelo usuário final.
Dynamic Workers permitem criar um novo Worker com uma única chamada. São baratos, iniciam rápido e oferecem isolamento de segurança adequado para executar código arbitrário. Milhões de instâncias podem ser criadas conforme a necessidade.
Diferenças em relação a eval
Embora pareçam equivalentes a eval, os Dynamic Workers resolvem problemas fundamentais: código eval'd compartilha a mesma thread de execução (um loop infinito derruba o servidor), compartilha memória com o código principal, tem acesso ao escopo local e à rede. Dynamic Workers herdam anos de endurecimento da infraestrutura Cloudflare Workers.
Arquitetura de exemplo: scraper programável
Morrell demonstra um aplicativo de scraping onde o usuário fornece uma função transform que recebe o conteúdo de uma página e retorna markdown ou JSON. Um harness envolve o código do usuário e controla o que ele pode fazer.
Limites e controle de capacidade
É possível desabilitar fetch inteiramente (globalOutbound: null) e impor limites de CPU (ex.: 50ms). O autor explora o conceito de capacidades (OCaps): em vez de expor fetch diretamente, o sistema parseia URLs da página solicitada e fornece objetos ResourceCapability ao usuário, permitindo navegação apenas dentro do que a plataforma controla.
Observabilidade
Logs do usuário são capturados via tail workers, sem alterar o código do usuário. Para tracing, como o Automatic Tracing ainda não suporta spans em tail workers, o autor instrumenta manualmente cada operação de I/O com uma função traceIO que mede duração e captura erros.
WebAssembly
Dynamic Workers suportam wasm nativamente via V8. Exemplos incluem processamento de imagens com @cf-wasm/photon e extração de texto de PDFs com liteparse.
Armazenamento com Durable Object facets
Cada Dynamic Worker pode ter seu próprio banco SQLite isolado via facets de Durable Objects. O supervisor controla o DO principal e cada facet recebe um banco separado. É possível impor limites de tamanho (o autor usa 128 KiB) revertendo transações que excedam a cota. O estado persiste entre invocações, mas fica escopado ao navegador e ao script.
Conclusão
Morrell argumenta que nem todo app precisa de um editor de código embutido, mas que estamos no início do que o software web pode ser agora que LLMs conseguem gerar funcionalidades sob demanda. Com pontos de extensão bem projetados, é possível deixar usuários personalizarem aplicações com segurança.