
preflight v0.22.0
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
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.
Instalação
Homebrew (macOS/Linux)
brew install preflightsh/preflight/preflight
npm
npm install -g @preflightsh/preflight
Go
go install github.com/preflightsh/preflight@latest
Docker
docker pull ghcr.io/preflightsh/preflight
Script Shell
curl -sSL https://preflight.sh/install.sh | sh
Download Manual
Baixe a versão mais recente em GitHub Releases.
Início Rápido
# 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
Habilidade de Agente
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
Painel & Sugestões de IA
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.
- Grátis inclui 5 execuções publicadas por mês.
- Traga sua própria chave: adicione uma chave de API OpenAI ou Anthropic nas configurações do seu painel e a publicação permanece gratuita e ilimitada (você paga ao seu provedor diretamente).
- Gerenciado ($5/mês): nós cobrimos os custos de IA e as execuções são ilimitadas, sem necessidade de chave de API.
O Que Ele Verifica
| 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 | 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) |
Serviços Suportados (72)
O Preflight detecta automaticamente e valida a configuração destes serviços:
Pagamentos
- Stripe, PayPal, Braintree, Paddle, LemonSqueezy
Rastreamento de Erros & Monitoramento
- Sentry, Bugsnag, Rollbar, Honeybadger, Datadog, New Relic, LogRocket
Email & Newsletters
- Postmark, SendGrid, Mailgun, AWS SES, Resend, Mailchimp, Kit, Beehiiv, AWeber, ActiveCampaign, Campaign Monitor, Drip, Klaviyo, Buttondown
Analytics
- Plausible, Fathom, Umami, Fullres Analytics, Datafa.st Analytics, Google Analytics, PostHog, Mixpanel, Amplitude, Segment, Hotjar
Autenticação
- Auth0, Clerk, WorkOS
Chat
- Intercom, Crisp
Notificações
- Slack, Discord, Twilio
Infraestrutura
- Firebase, Supabase, Redis, Sidekiq, RabbitMQ, Elasticsearch, Convex
Armazenamento & CDN
- AWS S3, Cloudinary, Cloudflare
Busca
- Algolia
SEO
- IndexNow
IA / LLMs
- OpenAI, Anthropic Claude, Google AI (Gemini), Mistral, Cohere, Replicate, Hugging Face, Grok (X/Twitter), Perplexity, Together AI
Configuração
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
Ignorando Verificações & Serviços
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
Adicionando uma única descoberta de segredo à lista de permissões
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.
IDs de Verificação Ignoráveis
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)
IDs de Verificação renomeados na 0.22
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 |
Uma nota sobre verificar código que você não confia
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.
IDs de Serviço Ignoráveis
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ódigos de Saída
| 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".
Completions de Shell
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.
Stacks Suportadas
Frameworks Backend
- Ruby on Rails, Laravel, PHP, Go, Python/Django, Rust, Node.js
Frameworks Frontend
- Next.js, Nuxt, Remix, React, Vue.js, Vite, Svelte, Angular
CMS Tradicionais
- WordPress, Craft CMS, Drupal, Ghost
Geradores de Sites Estáticos
- Hugo, Jekyll, Gatsby, Eleventy (11ty), Astro
CMS Headless
- Strapi, Sanity, Contentful, Prismic
Outros
- Sites estáticos
Integração com CI
# 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
Licença
MIT