Ferramenta CLI baseada em Go que verifica bases de código quanto à prontidão para lançamento, detectando configuração ausente, problemas de higiene de segurança, vazamentos de segredos e lacunas de integração antes da implantação em produção.
Preflight.sh é uma ferramenta de linha de comando que verifica seu código em busca de prontidão para lançamento. Identifica configurações ausentes, problemas de integração, preocupações de segurança, lacunas de metadados SEO e outros erros comuns antes de você fazer deploy em produção.
Não se envergonhe em produção. Basta executar o comando.
brew install preflightsh/preflight/preflight
npm install -g @preflightsh/preflight
go install github.com/preflightsh/preflight@latest
docker pull ghcr.io/preflightsh/preflight
curl -sSL https://preflight.sh/install.sh | sh
Baixe a versão mais recente em GitHub Releases.
# Inicialize no diretório do seu projeto
cd seu-projeto
preflight init
# Execute todas as verificações
preflight scan
# Verifique um diretório específico
preflight scan /caminho/para/projeto
# Execute com saída detalhada (mostra quais arquivos corresponderam a cada verificação)
preflight scan --verbose
preflight scan -v # forma abreviada
# Execute em modo CI com saída JSON
preflight scan --ci --format json
# Execute apenas verificações específicas, ou pule algumas, para iteração rápida
# (pontual; ao contrário de `preflight ignore`, não altera o preflight.yml)
preflight scan --only seo_meta,og_twitter
preflight scan --skip vulnerability,secrets
# Silencie uma verificação
preflight ignore sitemap
# Reative uma verificação
preflight unignore sitemap
# Liste todos os IDs de verificação
preflight checks
Este repositório inclui uma habilidade de agente compatível com skills.sh em skills/preflight/SKILL.md. Ela fornece aos agentes de codificação um fluxo de trabalho Preflight repetível: inspecionar preflight.yml, executar verificações seguras para CI, triar descobertas, evitar ignores inseguros, reexecutar validação e relatar risco residual de lançamento.
Liste a habilidade deste repositório:
# Com Bun
bunx --yes skills add preflightsh/preflight --list
# Ou com npm
npx --yes skills add preflightsh/preflight --list
Instale apenas a habilidade Preflight:
# Com Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Ou com npm
npx --yes skills add preflightsh/preflight --skill preflight
O Preflight é totalmente utilizável pela linha de comando sem conta. O painel opcional em app.preflight.sh adiciona um histórico hospedado de suas verificações e sugestões de correção geradas por IA para cada descoberta. Seu código nunca sai da sua máquina: a verificação é executada localmente, e apenas um resumo editado dos resultados (IDs de verificação, status e mensagens, nunca valores secretos ou conteúdos de arquivos) é enviado quando você publica.
Crie uma conta gratuita e conecte a CLI:
preflight auth login # abre seu navegador para autorizar esta CLI
preflight auth status # mostra com quem você está logado
preflight auth logout # remove as credenciais armazenadas
Publique uma verificação no seu painel com --publish. Ele imprime um link para visualizar a execução. A publicação é de melhor esforço: se você estiver offline ou não logado, a verificação ainda é executada e sai normalmente.
preflight scan --publish
No painel, você obtém o detalhamento de aprovação/aviso/falha de cada execução, a lista completa de descobertas e um histórico por projeto para que possa ver o que mudou entre deploys.
Você também pode ler esse histórico pelo terminal com preflight history:
preflight history # execuções recentes em seus projetos
preflight history --here # apenas as execuções do projeto atual
preflight history <run-id> # resultados completos de verificação de uma execução
preflight history --here --format json # legível por máquina, para agentes
Requer preflight auth login. --here corresponde as execuções ao repositório atual pelo seu git remote, a mesma chave usada ao publicar.
Abra qualquer verificação com falha ou aviso em uma execução publicada para gerar uma correção passo a passo adaptada à sua stack detectada, com comandos e código prontos para copiar.
| Verificação | Descrição |
|---|---|
| Paridade de ENV | Compara .env e .env.example em busca de variáveis ausentes |
| Endpoint de Saúde | Verifica se o site está acessível; detecta automaticamente /health, /healthz, /api/health ou recorre à raiz |
| Verificação de Vulnerabilidades | Verifica vulnerabilidades de dependências (bundle audit, npm audit, etc.) |
| Metadados SEO | Verifica title, description e tags Open Graph |
| OG & Twitter Cards | Valida og:image, twitter:card e metadados de compartilhamento social |
| URL Canônica | Verifica se a tag de link canônico está presente |
| Viewport | Verifica a tag meta viewport adequada para dispositivos móveis |
| Atributo Lang | Valida o atributo html lang para acessibilidade |
| Dados Estruturados | Verifica marcação JSON-LD Schema.org |
| Cabeçalhos de Segurança | Valida HSTS, CSP, X-Content-Type-Options em produção e staging |
| Certificado SSL | Verifica a validade do SSL e alerta antes da expiração |
| Redirecionamento WWW | Verifica o redirecionamento www/não-www para a URL canônica |
| Autenticação de Email | Verifica registros DNS SPF/DMARC para entregabilidade de email (opt-in) |
| Verificação de Segredos | Encontra chaves de API e credenciais vazadas no código |
| Declarações de Debug | Detecta console.log, var_dump, debugger deixados no código |
| Páginas de Erro | Verifica páginas de erro personalizadas 404/500 |
| Otimização de Imagens | Encontra imagens grandes (>500KB) que prejudicam os tempos de carregamento |
| Páginas Legais | Verifica páginas de política de privacidade e termos de serviço |
| Consentimento de Cookies |
O Preflight detecta automaticamente e valida a configuração destes serviços:
Pagamentos
Rastreamento de Erros & Monitoramento
Email & Newsletters
Analytics
Autenticação
Chat
Notificações
Infraestrutura
Armazenamento & CDN
Busca
SEO
IA / LLMs
O Preflight usa um arquivo preflight.yml na raiz do seu projeto:
projectName: my-app
stack: rails # rails, next, react, vite, laravel, etc.
urls:
staging: "https://staging.example.com"
production: "https://example.com"
services:
stripe:
declared: true
sentry:
declared: true
checks:
envParity:
enabled: true
envFile: ".env"
exampleFile: ".env.example"
healthEndpoint:
enabled: true
path: "/health" # opcional - detecta automaticamente caminhos comuns se não definido
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe" # opcional - sondado com GET; um 404 ou nenhuma resposta é relatado
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# Lista de permissões por arquivo para a verificação de segredos. Use isto para suprimir uma
# descoberta individual (ex.: uma chave pública restrita por referrer) sem
# desabilitar toda a verificação.
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # recomendado — fixa o segredo exato
reason: "Chave Google Timezone restrita por referrer HTTP"
- path: "web/tools/**/*.php" # globs doublestar são suportados
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # opt-in, verifica SPF/DMARC no domínio de produção
humansTxt:
enabled: false # opt-in, credita a equipe
license:
enabled: false # opt-in, para projetos de código aberto
# Silencie verificações ou serviços específicos por ID
ignore:
- sitemap
- llms_txt
- google_analytics
Silencie verificações ou serviços específicos usando preflight ignore <id>:
preflight ignore sitemap # Ignora a verificação de sitemap
preflight ignore sentry # Ignora a validação do serviço Sentry
preflight unignore sitemap # Reativa a verificação de sitemap
preflight checks # Lista todos os IDs ignoráveis
Prefira adicionar uma descoberta individual à lista de permissões em vez de silenciar toda a
verificação secrets. Adicione exceções pontuais pela linha de comando:
preflight ignore secrets web/js/golden-hour.js
Isso anexa uma entrada de caminho sob checks.secrets.allowlist no seu
preflight.yml. O campo path é um glob doublestar
(** corresponde entre diretórios) resolvido em relação ao caminho do arquivo relativo ao projeto.
Fixe a impressão digital. Uma lista de permissões apenas por caminho aceita silenciosamente qualquer
segredo futuro colocado nesse arquivo. Edite a entrada e adicione um
fingerprint: "sha256:<hex>" — o SHA-256 do valor do segredo detectado.
Agora, se a chave for rotacionada ou um segredo diferente aparecer no
mesmo arquivo, o preflight re-alerta.
As descobertas são correspondidas por caminho + impressão digital, não por arquivo inteiro. Uma impressão digital na lista de permissões em um arquivo não suprime outros segredos em outras linhas do mesmo arquivo.
SEO & Social:
seo_meta, canonical, structured_data, index_now (opt-in), og_twitter, viewport, lang
Segurança & Infraestrutura:
security_headers, ssl, www_redirect, email_auth (opt-in), secrets
Ambiente & Saúde:
env_parity, health_endpoint
Qualidade de Código & Desempenho:
vulnerability, debug_statements, error_pages, image_optimization
Legal & Conformidade:
legal_pages
Arquivos Padrão da Web:
favicon, robots_txt, sitemap, llms_txt, ads_txt (opt-in), humans_txt (opt-in), license (opt-in)
Todo ID de verificação agora é snake_case. Os antigos nomes camelCase continuam funcionando
em qualquer lugar onde um ID é aceito (listas ignore:, --only, --skip,
preflight ignore) ao longo da linha 1.x, com uma nota no stderr, e
desaparecem na 2.0. preflight ignore escreve o novo nome. As chaves sob
checks: no preflight.yml (healthEndpoint, seoMeta, ...) são um
esquema separado e não mudaram.
| Antigo | Novo |
|---|---|
seoMeta | seo_meta |
ogTwitter | og_twitter |
securityHeaders | security_headers |
envParity | env_parity |
healthEndpoint | health_endpoint |
robotsTxt | robots_txt |
llmsTxt | llms_txt |
adsTxt | ads_txt |
humansTxt | humans_txt |
indexNow | index_now |
Toda verificação lê arquivos; uma executa um programa. A verificação vulnerability
executa o gerenciador de pacotes do seu próprio projeto (npm audit, yarn audit,
composer audit, bundle audit, pip-audit, govulncheck, cargo audit)
dentro do diretório do projeto, com um ambiente limpo e um home temporário
para que não possa ler seus tokens. Os gerenciadores de pacotes ainda honram
a configuração local do projeto, e parte dessa configuração pode executar código
do repositório (um yarnPath do Yarn, um alias do Cargo, um plugin do Composer).
Verificar seus próprios projetos é para isso que o Preflight existe. Ao verificar um
repositório que você não confia, como um pull request de um fork em CI, adicione
--skip vulnerability.
Todos os serviços têm verificações de validação que confirmam a integração adequada (variáveis de ambiente, padrões de SDK, arquivos de configuração):
Pagamentos: stripe, paypal, braintree, paddle, lemonsqueezy
Rastreamento de Erros: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Email Transacional: postmark, sendgrid, mailgun, aws_ses, resend
Email Marketing: mailchimp, convertkit, beehiiv, aweber, activecampaign, campaignmonitor, drip, klaviyo, buttondown
Analytics: plausible, fathom, google_analytics, fullres, datafast, posthog, mixpanel, amplitude, segment, hotjar
Autenticação: auth0, clerk, workos, firebase, supabase
Comunicação: twilio, slack, discord, intercom, crisp
Infraestrutura: redis, sidekiq, rabbitmq, elasticsearch, convex
Armazenamento & CDN: aws_s3, cloudinary, cloudflare
Busca: algolia
IA: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: index_now
Consentimento de Cookies: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
| Código | Significado |
|---|---|
| 0 | Todas as verificações passaram |
| 1 | Apenas avisos |
| 2 | Erros encontrados |
| 64 | O Preflight não pôde ser executado (caminho inválido, configuração ilegível, ID de verificação desconhecido) |
| 130 | Verificação cancelada (Ctrl-C / SIGTERM) |
Os códigos 1 e 2 significam que a verificação foi executada e relatou algo. O código 64 significa que ela nunca chegou a esse ponto, então o CI pode distinguir "este projeto tem problemas" de "esta invocação estava errada".
Completamento por tab para comandos, flags e IDs de verificação (incluindo valores de --only e --skip):
# bash (adicione ao ~/.bashrc)
source <(preflight completion bash)
# zsh (adicione ao ~/.zshrc)
source <(preflight completion zsh)
# fish
preflight completion fish | source
A saída também respeita a variável de ambiente NO_COLOR.
Frameworks Backend
Frameworks Frontend
CMS Tradicionais
Geradores de Sites Estáticos
CMS Headless
Outros
# Exemplo GitHub Actions (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# Exemplo GitHub Actions (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
MIT
| Detecta solução de consentimento de cookies (conformidade GDPR/CCPA) |
| Favicon & Ícones | Verifica favicon, apple-touch-icon (.png, .webp, .svg) e web manifest |
| robots.txt | Verifica se robots.txt existe e tem conteúdo |
| sitemap.xml | Verifica a presença de sitemap ou gerador |
| llms.txt | Verifica o arquivo de orientação para rastreadores de LLM |
| ads.txt | Valida ads.txt para sites com suporte a anúncios (opt-in) |
| humans.txt | Verifica humans.txt para creditar a equipe (opt-in) |
| IndexNow | Verifica o arquivo de chave IndexNow para indexação de busca mais rápida (opt-in) |
| LICENSE | Verifica o arquivo de licença (opt-in, para projetos de código aberto) |