KasyKasy

Publicar na Web

Build de produção, Firebase Hosting, Vercel, domínio próprio e PWA.

Implementação

Pelo MCP: pra Auth na web com domínio próprio, peça "lista os domínios autorizados" ou "adiciona app.suamarca.com nos domínios" (manage_domain). Favicon: set_favicon. O build/hosting estático ainda é pelo terminal (abaixo). Veja MCP do Kasy.

  1. Gere o build de produção:

    flutter build web --release --dart-define=ENV=prod

    O site pronto fica na pasta build/web. É um site estático: qualquer hospedagem serve.

    --dart-define=ENV=prod é obrigatório. Sem isso o build usa a configuração de desenvolvimento.

    Opcional: compilar para WebAssembly. flutter build web --wasm --release --dart-define=ENV=prod compila pra WebAssembly em vez de JavaScript, com fallback automático pra JavaScript em navegadores sem suporte (nenhum usuário fica sem app). Testado e funcionando no Kasy a partir do Flutter 3.47. Detalhes e o motivo de não ser o padrão em WebAssembly (Wasm), abaixo.

  2. Escolha a hospedagem:

    Opção 1: Firebase Hosting (backend Firebase)

    Se o seu backend é Firebase, o projeto já vem configurado: o firebase.json aponta para build/web, com rewrites de SPA e headers de cache corretos. Publicar é só:

    flutter build web --release --dart-define=ENV=prod
    firebase deploy --only hosting

    No final, o terminal mostra a URL (https://seu-projeto.web.app).

    Para domínio próprio:

    1. Firebase Console → Hosting → Adicionar domínio personalizado
    2. Digite o domínio (ex.: app.suamarca.com)
    3. Crie os registros DNS que o console mostrar (no seu provedor de domínio)
    4. Aguarde a verificação: o certificado HTTPS é automático

    Opção 2: Vercel (qualquer backend)

    Funciona com Firebase, Supabase ou API REST, porque o build é estático.

    1. Crie a conta em vercel.com
    2. Rode o build de produção (comando acima)
    3. Publique a pasta:
    npm i -g vercel
    cd build/web
    vercel --prod

    Domínio próprio: painel da Vercel → seu projeto → Settings → Domains.

    Netlify, Cloudflare Pages ou qualquer host estático também funcionam: o processo é o mesmo, build e subir a pasta build/web.

  3. Depois de publicar, libere o login:

    Google Sign-In

    Adicione o domínio de produção e http://localhost:5555 como origins autorizadas: Google Cloud Console → Credenciais → seu OAuth Client → Authorized JavaScript origins.

    Firebase Auth (domínios autorizados)

    Firebase Console → Authentication → Settings → Authorized domains → adicione o domínio de produção. Sem isso, o login social falha com auth/unauthorized-domain.

    Supabase Auth (domínios autorizados)

    Painel do Supabase → Authentication → URL Configuration → adicione o domínio de produção (e http://localhost:5555, se ainda estiver testando) em Site URL / Redirect URLs. Sem isso, o login social redireciona de volta pro domínio errado ou falha silenciosamente.

Informações

Desenvolvimento

kasy run --web                              # imprime localhost:5555
kasy run --web --open-browser               # abre no seu navegador (conta Google, extensões)
kasy run --web --open-browser --fresh       # mesmo lugar, limpa storage de dev (onboarding)
kasy clear-web                              # só limpa storage (app já rodando)
kasy run --web --open                       # Chrome isolado do Flutter (perfil zerado, sem conta)
ComandoOnde abre
--open-browserNavegador padrão do sistema, no perfil onde você já está logado
--openJanela Chrome separada do Flutter, sem contas nem extensões

Porta 5555 fixa para a sessão Firebase Auth persistir entre runs. Detalhes em Rodar o app.

WebAssembly (Wasm)

flutter build web --wasm compila o app pra WebAssembly em vez de JavaScript. Ganho real, medido pelo próprio time do Flutter: até 2x mais rápido em tela com muita animação/reconstrução de widgets, com menos engasgo (jitter). Navegador sem suporte a Wasm carrega a versão JavaScript normalmente, de forma automática, sem configuração extra.

Ainda não é o comando padrão recomendado por um motivo: o ganho de desempenho completo (renderização em paralelo, não só a compilação) exige que o servidor mande os headers Cross-Origin-Opener-Policy e Cross-Origin-Embedder-Policy. Esses headers isolam a aba do navegador e podem quebrar login social feito via popup (Google, Facebook). Sem eles, o app em Wasm funciona normalmente, só sem o ganho extra de multithread.

Se quiser ativar:

  1. Troque o build por flutter build web --wasm --release --dart-define=ENV=prod.
  2. Publique normalmente (Firebase Hosting, Vercel, etc.).
  3. Só adicione os headers COOP/COEP se for testar o ganho de multithread, e teste o login social depois, numa aba anônima, antes de confirmar em produção.

Mais detalhes técnicos: docs.flutter.dev/platform-integration/web/wasm.

PWA

O app web já é instalável como PWA. Personalize:

  • Ícones e cores: web/manifest.json (background_color, theme_color)
  • Favicon: kasy favicon --image seu-icone.png (guia)

Atualizado em 03/11/2026