Como implantar um app Vite no Cloudflare Workers com Void (testamos)

Void, o toolkit full-stack que Cloudflare e VoidZero liberaram como open source em 15 de outubro de 2026, converte uma app Vite em uma app de Cloudflare Workers e deduz os bindings que você precisa a partir dos seus imports. Instalamos e compilamos um starter: importar void/db gerou um binding de D1 e importar void/kv gerou um de KV, sem escrever manualmente nenhuma configuração de Wrangler.

:white_check_mark: yoDEV Tested · 21 de outubro de 2026 Instalamos void 1.1.12 em Node 24.22 (Linux), geramos o starter Vite + React + D1, executamos em local e compilamos para produção; não executamos void deploy. Os resultados que reportamos como nossos saem dessa prova.

O que é Void do Cloudflare?

Void são três produtos open source distribuídos como um único pacote de JavaScript com plugin de Vite, que se instala com npm install void. É desenvolvido por VoidZero, o time por trás de Vite, Vitest, Rolldown e Oxc, que agora faz parte do Cloudflare:

  • Void SDK: um SDK componível para apps full-stack com Vite. Inclui rotas de API baseadas em arquivos, loaders e actions do lado do servidor, pré-renderização, cache, islands e tipos que viajam do banco de dados até a interface. Tem adaptadores para React, Vue, Svelte e Solid (as quatro opções que oferece seu assistente), e segundo Cloudflare também convive com Vinext, React Router, SvelteKit, Nuxt, TanStack Start e Astro.
  • Void CLI: provisiona recursos e faz deploy em Cloudflare. É construído sobre o novo CLI cf do Cloudflare.
  • Void Platform: uma plataforma de deploy auto-hospedável para que um time publique apps em uma conta compartilhada do Cloudflare sem dar acesso à nuvem para cada funcionário.

O registro do npm publica o pacote com licença MIT; o post do Cloudflare não menciona nenhuma licença. Um detalhe que convém deixar claro: void não é novo no npm. VoidZero publica desde a versão 0.7.0, de 7 de maio de 2026. O que chegou em 15 de outubro, junto com o anúncio, é a linha 1.x. No momento de publicar esta nota, a versão mais recente é a 1.1.12, de 19 de outubro.

A promessa, em resumo: converter uma app Vite em uma app full-stack de Cloudflare Workers. O que importa no dia a dia é que você não declara seus bancos de dados, namespaces de KV nem filas. Void os deduz do que seu código importa e os provisiona ao fazer deploy.

Como se instala Void em uma app Vite?

Em uma pasta vazia, o quickstart oficial usa dois comandos:

npm install -D void
npx void init

Os equivalentes são pnpm add -D void / pnpm void init, yarn add -D void / yarn void init e bun add -D void / bunx void init. Com pnpm você também pode executar pnpm create void my-app.

void init é um assistente interativo. Em nossa prova fez quatro perguntas:

  1. Toolchain: Vite+ (o toolchain de VoidZero, opção padrão) ou Vite puro. Escolhemos Vite.
  2. Framework: React, Vue, Svelte ou Solid. Escolhemos React.
  3. Starter: D1 (SQLite, o recomendado), PostgreSQL, MySQL ou Static Pages. Escolhemos D1.
  4. Destino do deploy: sua própria conta do Cloudflare, uma Void Platform ou omitir. Omitimos porque não fizemos login no Cloudflare.

Como o assistente precisa de um terminal interativo, ele se detém na primeira pergunta se você o executar sem um. Tenha isso em mente se quiser automatizá-lo.

Depois:

npm run dev

e abra http://localhost:5173.

Quais arquivos o starter gera?

O starter de D1 criou vite.config.ts, void.config.ts, uma página (pages/index.tsx) com seu arquivo de servidor (pages/index.server.ts), uma rota de API (routes/api/hello.ts), um schema de Drizzle (db/schema.ts), um arquivo de seed (db/seed.ts), tsconfig.json, um AGENTS.md com instruções para agentes de código e uma migração inicial em db/migrations/. Também copia toda a documentação de Void em node_modules/void/docs/, algo útil sem conexão e para os agentes.

A configuração de Vite é toda a integração:

import { defineConfig } from "vite";
import { voidPlugin } from "void";
import { voidReact } from "@void/react/plugin";

export default defineConfig({
  plugins: [
    voidPlugin(),
    voidReact({ react: { compiler: true } }),
  ],
});

void.config.ts contém apenas uma compatibility_date de Workers fixada. Não há nenhum wrangler.jsonc no projeto.

O que aconteceu quando executamos?

O servidor de desenvolvimento iniciou em cerca de nove segundos e aplicou a migração local automaticamente. GET /api/hello retornou o JSON do starter, e a página inicial mostrou sua mensagem de lista vazia até que carregamos a linha de exemplo com:

npx void db seed

O CLI pede para reiniciar o servidor de desenvolvimento depois do seed; após fazer isso, a linha apareceu.

A página do starter inclui ainda um formulário respaldado por uma action em pages/index.server.ts, validada com um schema derivado da tabela de Drizzle. Ao enviar uma mensagem, a linha foi inserida e o loader foi executado novamente, então a página retornou com a lista atualizada. Ao enviar apenas espaços nada foi inserido e a resposta trouxe um erro tipado no campo text: o validador recorta o texto antes de verificar seu comprimento mínimo.

Void cria apenas os bindings de Cloudflare D1 e KV?

Sim, pelo menos até onde o resultado da compilação mostra. npm run build terminou em menos de cinco segundos e gerou dist/ssr/wrangler.json para o Worker. Esse arquivo continha um binding de D1 chamado DB, que saiu unicamente do import { db } from 'void/db' do starter.

Para verificar que não era um template fixo, adicionamos uma rota própria com a API de KV que a documentação incluída no pacote descreve:

// routes/api/visits.ts
import { defineHandler } from 'void';
import { kv } from 'void/kv';

export const GET = defineHandler(async () => {
  const visits = ((await kv.get<number>('visits')) ?? 0) + 1;
  await kv.put('visits', visits);
  return { visits };
});

Após recompilar, a configuração gerada adicionou um binding de KV chamado KV. Localmente, o contador se manteve entre requisições: 1, 2, 3. Nunca editamos um arquivo de Wrangler.

O que não pudemos verificar é a outra metade da promessa: que void deploy converta esses bindings em recursos reais de D1 e KV em sua conta. Esse passo exige fazer login no Cloudflare e aí nos detemos.

Como se faz deploy em Cloudflare Workers com void deploy?

Segundo a documentação de deploy de Void, se você escolheu Cloudflare durante a configuração o comando é:

npx void deploy

Se omitiu esse passo:

npx void deploy --platform cloudflare

O primeiro deploy abre o navegador para fazer login e pergunta qual conta do Cloudflare usar; os seguintes reutilizam o destino salvo. Segundo o post do Cloudflare, o deploy compila a app com Vite, aplica as migrações, provisiona os recursos e publica. A documentação adiciona uma rede de segurança: antes de aplicar migrações, salva um ponto de restauração de D1 Time Travel, e se não conseguir salvá-lo se detém antes de migrar.

Para CI, a documentação indica adicionar CLOUDFLARE_API_TOKEN aos segredos do repositório; void init --github gera um workflow de GitHub Actions.

Se você já tem um Worker com um wrangler.jsonc ou wrangler.json na raiz, a documentação diz que Void pode vinculá-lo e preservar seus recursos.

Void é gratuito?

O toolkit tem licença MIT, e a documentação de Void indica que as apps nativas executam no plano gratuito de Workers dentro de suas quotas. Há duas exceções documentadas: os sandboxes requerem Workers Paid e acesso a Containers, e os pontos de restauração de D1 se salvam 7 dias em Workers Free contra 30 dias em Workers Paid. No momento de publicar esta nota, nem o post nem a documentação que revisamos forneciam preços para uma Void Platform auto-hospedável além dos produtos do Cloudflare que ela precisa.

Void substitui Wrangler?

Não exatamente: trabalham em camadas distintas. Wrangler é o CLI do Cloudflare em que você mesmo declara os bindings em um arquivo de configuração. Void gera essa configuração a partir do seu código (o wrangler.json que encontramos em dist/ foi escrito pela compilação) e seu CLI é construído sobre o CLI cf, mais recente. Se você já tem um Worker gerenciado com Wrangler, Void pode vinculá-lo em vez de substituí-lo. Contamos o passo de Wrangler para cf em nosso guia de migração.

Qual versão de Node.js o Void precisa?

O pacote declara Node 24.21.0 ou superior. Fizemos a prova em Node 24.22. Como verificação adicional, em Node 22.22 o CLI, a compilação de produção e o servidor de desenvolvimento funcionaram sobre o projeto já instalado, mas não testamos uma instalação do zero em Node 22. O recomendável é respeitar o mínimo declarado.

Se pode auto-hospedar Void Platform?

Sim, embora seja um projeto em si mesmo e não faça parte do quickstart. Cloudflare enumera o que você precisa:

  • Uma conta do Cloudflare com Workers for Platforms e R2 habilitados
  • Um banco de dados PostgreSQL
  • Uma conta no provedor de login que você escolher
  • Um domínio para suas apps

Uma vez em funcionamento, um administrador controla o acesso, fixa limites de recursos e revisa deploys e consumo desde o CLI ou um painel de administração. Os desenvolvedores se conectam com void connect <url-da-sua-plataforma> e fazem deploy com void deploy --platform void --project <nome>. O caso de uso que Cloudflare apresenta são empresas que querem que seus times, incluindo pessoas que não programam e trabalham com agentes de código, publiquem apps internas em um ambiente compartilhado e governado. Cloudflare sustenta que isso reduz o tempo para publicar uma app interna de dias ou semanas para minutos; é um número do provedor, não algo que tenhamos medido. VoidZero diz que usa o SDK, o CLI e a plataforma em produção há vários meses.

Para a maioria, a porta de entrada prática é o SDK e o CLI contra sua própria conta do Cloudflare. Vale a pena avaliar a plataforma se você gerencia ferramentas internas para um time.

O que não testamos?

  • void deploy e o aprovisionamento real de recursos (requer login no Cloudflare)
  • Void Platform auto-hospedável
  • Windows e macOS
  • O toolchain Vite+, os adaptadores de Vue, Svelte e Solid, e os starters de PostgreSQL e MySQL

Uma nota se você reproduz em um ambiente com rede restrita: o servidor de desenvolvimento alertou que não conseguia obter os metadados Request.cf do Cloudflare e usou um valor padrão. Isso se deveu ao fato de que nosso sandbox bloqueia essa conexão, não a Void.


E você? O que te impede hoje de fazer deploy de suas apps em Cloudflare Workers?

Onde você faz deploy de suas apps Vite hoje?
  • Cloudflare Workers ou Pages
  • Vercel ou Netlify
  • Meu próprio servidor ou VPS
  • Prefiro outra opção (nos conte qual)
0 votantes

Comente abaixo ou, se este artigo chegou até você por email, responda diretamente ao email: sua resposta é publicada aqui.

Relacionado: Cloudflare Comprou Vite: O Frontend Enfim Entrou Oficialmente na Guerra do Edge