
preflight v0.20.0
Herramienta CLI basada en Go que escanea bases de código para verificar la preparación para el lanzamiento, detectando configuraciones faltantes, problemas de higiene de seguridad, fugas de secretos y brechas de integración antes del despliegue en producción.
Preflight.sh
Preflight.sh es una herramienta de línea de comandos que escanea tu código base para verificar la preparación para el lanzamiento. Identifica configuraciones faltantes, problemas de integración, preocupaciones de seguridad, brechas de metadatos SEO y otros errores comunes antes de desplegar en producción.
No te avergüences en producción. Solo ejecuta el comando.
Instalación
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
Descarga manual
Descarga la última versión desde GitHub Releases.
Inicio rápido
# Initialize in your project directory
cd your-project
preflight init
# Run all checks
preflight scan
# Scan a specific directory
preflight scan /path/to/project
# Run with verbose output (shows which files matched each check)
preflight scan --verbose
preflight scan -v # short form
# Run in CI mode with JSON output
preflight scan --ci --format json
# Run only specific checks, or skip some, for fast iteration
# (one-off; unlike `preflight ignore` it doesn't change preflight.yml)
preflight scan --only seoMeta,ogTwitter
preflight scan --skip vulnerability,secrets
# Silence a check
preflight ignore sitemap
# Unsilence a check
preflight unignore sitemap
# List all check IDs
preflight checks
Habilidad para agentes
Este repositorio incluye una habilidad de agente compatible con skills.sh en skills/preflight/SKILL.md. Proporciona a los agentes de codificación un flujo de trabajo Preflight repetible: inspeccionar preflight.yml, ejecutar escaneos seguros para CI, clasificar hallazgos, evitar ignorados inseguros, re-ejecutar validación e informar el riesgo residual de lanzamiento.
Lista la habilidad desde este repositorio:
# With Bun
bunx --yes skills add preflightsh/preflight --list
# Or with npm
npx --yes skills add preflightsh/preflight --list
Instala solo la habilidad Preflight:
# With Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Or with npm
npx --yes skills add preflightsh/preflight --skill preflight
Panel de control y sugerencias de IA
Preflight es totalmente usable desde la línea de comandos sin necesidad de cuenta. El panel opcional en app.preflight.sh añade un historial alojado de tus escaneos y sugerencias de corrección generadas por IA para cada hallazgo. Tu código nunca sale de tu máquina: el escaneo se ejecuta localmente, y solo se envía un resumen redactado de los resultados (IDs de verificación, estados y mensajes, nunca valores secretos o contenidos de archivos) cuando publicas.
Crea una cuenta gratuita, luego conecta la CLI:
preflight auth login # opens your browser to authorize this CLI
preflight auth status # show who you're logged in as
preflight auth logout # remove stored credentials
Publica un escaneo en tu panel con --publish. Imprime un enlace para ver la ejecución. La publicación es de mejor esfuerzo: si estás desconectado o no has iniciado sesión, el escaneo aún se ejecuta y sale normalmente.
preflight scan --publish
En el panel obtienes el desglose de cada ejecución (pasa/advertencia/error), la lista completa de hallazgos y un historial por proyecto para ver qué cambió entre despliegues.
También puedes leer ese historial desde la terminal con preflight history:
preflight history # recent runs across your projects
preflight history --here # only the current project's runs
preflight history <run-id> # one run's full check results
preflight history --here --format json # machine-readable, for agents
Requiere preflight auth login. --here empareja las ejecuciones con el repositorio actual mediante su git remote, la misma clave utilizada al publicar.
Abre cualquier verificación fallida o con advertencia en una ejecución publicada para generar una corrección paso a paso adaptada a tu stack detectado, con comandos y código listos para copiar.
- Gratuito incluye 5 ejecuciones publicadas por mes.
- Trae tu propia clave: añade una clave API de OpenAI o Anthropic en la configuración de tu panel y la publicación sigue siendo gratuita e ilimitada (pagas directamente a tu proveedor).
- Gestionado ($5/mes): cubrimos los costos de IA y las ejecuciones son ilimitadas, sin necesidad de clave API.
Qué verifica
| Verificación | Descripción |
|---|---|
| ENV Parity | Compara .env y .env.example en busca de variables faltantes |
| Health Endpoint | Verifica que el sitio sea accesible; detecta automáticamente /health, /healthz, /api/health o recurre a la raíz |
| Vulnerability Scan | Busca vulnerabilidades de dependencias (bundle audit, npm audit, etc.) |
| SEO Metadata | Comprueba la presencia de título, descripción y etiquetas Open Graph |
| OG & Twitter Cards | Valida og:image, twitter:card y metadatos para compartir en redes sociales |
| Canonical URL | Verifica que la etiqueta de enlace canónico esté presente |
| Viewport | Comprueba la etiqueta meta viewport adecuada para móviles |
| Lang Attribute | Valida el atributo html lang para accesibilidad |
| Structured Data | Comprueba el marcado JSON-LD Schema.org |
| Security Headers | Valida HSTS, CSP, X-Content-Type-Options tanto en producción como en staging |
| SSL Certificate | Verifica la validez del SSL y advierte antes de la expiración |
| WWW Redirect | Verifica la redirección www/no-www a la URL canónica |
| Email Auth | Comprueba registros SPF/DMARC DNS para la entregabilidad del correo (opt-in) |
| Secret Scanning | Encuentra claves API y credenciales filtradas en el código |
| Debug Statements | Detecta console.log, var_dump, debugger dejados en el código |
| Error Pages | Comprueba la existencia de páginas de error personalizadas 404/500 |
| Image Optimization | Encuentra imágenes grandes (>500KB) que perjudican los tiempos de carga |
| Legal Pages | Verifica la presencia de páginas de política de privacidad y términos de servicio |
| Cookie Consent | Detecta la solución de consentimiento de cookies (cumplimiento GDPR/CCPA) |
| Favicon & Icons | Comprueba favicon, apple-touch-icon (.png, .webp, .svg) y el manifiesto web |
| robots.txt | Verifica que exista robots.txt y tenga contenido |
| sitemap.xml | Comprueba la presencia del sitemap o del generador |
| llms.txt | Verifica la existencia del archivo de guía para crawlers LLM |
| ads.txt | Valida ads.txt para sitios con publicidad (opt-in) |
| humans.txt | Comprueba humans.txt para acreditar al equipo (opt-in) |
| IndexNow | Verifica el archivo de clave IndexNow para una indexación más rápida (opt-in) |
| LICENSE | Comprueba la existencia del archivo de licencia (opt-in, para proyectos de código abierto) |
Servicios compatibles (72)
Preflight detecta automáticamente y valida la configuración de estos servicios:
Pagos
- Stripe, PayPal, Braintree, Paddle, LemonSqueezy
Seguimiento de errores y monitoreo
- Sentry, Bugsnag, Rollbar, Honeybadger, Datadog, New Relic, LogRocket
Correo electrónico y newsletters
- Postmark, SendGrid, Mailgun, AWS SES, Resend, Mailchimp, Kit, Beehiiv, AWeber, ActiveCampaign, Campaign Monitor, Drip, Klaviyo, Buttondown
Analítica
- Plausible, Fathom, Umami, Fullres Analytics, Datafa.st Analytics, Google Analytics, PostHog, Mixpanel, Amplitude, Segment, Hotjar
Autenticación
- Auth0, Clerk, WorkOS
Chat
- Intercom, Crisp
Notificaciones
- Slack, Discord, Twilio
Infraestructura
- Firebase, Supabase, Redis, Sidekiq, RabbitMQ, Elasticsearch, Convex
Almacenamiento y CDN
- AWS S3, Cloudinary, Cloudflare
Búsqueda
- Algolia
SEO
- IndexNow
IA / LLMs
- OpenAI, Anthropic Claude, Google AI (Gemini), Mistral, Cohere, Replicate, Hugging Face, Grok (X/Twitter), Perplexity, Together AI
Configuración
Preflight utiliza un archivo preflight.yml en la raíz de tu proyecto:
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" # optional - auto-detects common paths if not set
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe"
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# Per-file allowlist for the secrets scan. Use this to suppress an
# individual finding (e.g. a referrer-restricted public key) without
# disabling the whole check.
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # recommended — pins to the exact secret
reason: "HTTP-referrer-restricted Google Timezone key"
- path: "web/tools/**/*.php" # doublestar globs are supported
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # opt-in, checks SPF/DMARC on production domain
humansTxt:
enabled: false # opt-in, credits the team
license:
enabled: false # opt-in, for open source projects
# Silence specific checks or services by ID
ignore:
- sitemap
- llmsTxt
- google_analytics
Ignorar verificaciones y servicios
Silencia verificaciones o servicios específicos usando preflight ignore <id>:
preflight ignore sitemap # Ignore sitemap check
preflight ignore sentry # Ignore Sentry service validation
preflight unignore sitemap # Re-enable sitemap check
preflight checks # List all ignorable IDs
Incluir un hallazgo de secretos en lista blanca
Prefiere incluir un hallazgo individual en lista blanca en lugar de silenciar toda la verificación de secrets. Añade excepciones puntuales desde la línea de comandos:
preflight ignore secrets web/js/golden-hour.js
Eso añade una entrada de ruta en checks.secrets.allowlist dentro de tu preflight.yml. El campo path es un glob doublestar (** coincide a través de directorios) resuelto contra la ruta relativa al proyecto.
Fija la huella digital (fingerprint). Una lista blanca solo por ruta acepta silenciosamente cualquier secreto futuro que aparezca en ese archivo. Edita la entrada y añade un fingerprint: "sha256:<hex>" — el SHA-256 del valor del secreto detectado. Ahora, si la clave se rota o aparece un secreto diferente en el mismo archivo, preflight volverá a alertar.
Los hallazgos se emparejan por ruta + fingerprint, no por archivo completo. Un fingerprint en lista blanca dentro de un archivo no suprime otros secretos en otras líneas del mismo archivo.
IDs de verificación ignorables
SEO y Social:
seoMeta, canonical, structured_data, indexNow (opt-in), ogTwitter, viewport, lang
Seguridad e infraestructura:
securityHeaders, ssl, www_redirect, email_auth (opt-in), secrets
Entorno y salud:
envParity, healthEndpoint
Calidad de código y rendimiento:
vulnerability, debug_statements, error_pages, image_optimization
Legal y cumplimiento:
legal_pages
Archivos web estándar:
favicon, robotsTxt, sitemap, llmsTxt, adsTxt (opt-in), humansTxt (opt-in), license (opt-in)
IDs de servicio ignorables
Todos los servicios tienen verificaciones de validación que confirman la integración correcta (variables de entorno, patrones SDK, archivos de configuración):
Pagos: stripe, paypal, braintree, paddle, lemonsqueezy
Seguimiento de errores: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Correo transaccional: postmark, sendgrid, mailgun, aws_ses, resend
Marketing por correo: mailchimp, convertkit, beehiiv, aweber, activecampaign, campaignmonitor, drip, klaviyo, buttondown
Analítica: plausible, fathom, google_analytics, fullres, datafast, posthog, mixpanel, amplitude, segment, hotjar
Autenticación: auth0, clerk, workos, firebase, supabase
Comunicación: twilio, slack, discord, intercom, crisp
Infraestructura: redis, sidekiq, rabbitmq, elasticsearch, convex
Almacenamiento y CDN: aws_s3, cloudinary, cloudflare
Búsqueda: algolia
IA: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: indexNow
Consentimiento de cookies: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
Códigos de salida
| Código | Significado |
|---|---|
| 0 | Todas las verificaciones pasaron |
| 1 | Solo advertencias |
| 2 | Errores encontrados |
| 64 | Preflight no pudo ejecutarse (ruta incorrecta, configuración ilegible, ID de verificación desconocido) |
| 130 | Escaneo cancelado (Ctrl-C / SIGTERM) |
Los códigos 1 y 2 significan que el escaneo se ejecutó e informó algo. El código 64 significa que nunca llegó a ese punto, por lo que CI puede diferenciar "este proyecto tiene problemas" de "esta invocación fue incorrecta".
Completado de shell
Finalización por tabulación para comandos, flags e IDs de verificación (incluyendo valores de --only y --skip):
# bash (add to ~/.bashrc)
source <(preflight completion bash)
# zsh (add to ~/.zshrc)
source <(preflight completion zsh)
# fish
preflight completion fish | source
La salida también respeta la variable de entorno NO_COLOR.
Stacks compatibles
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 tradicionales
- WordPress, Craft CMS, Drupal, Ghost
Generadores de sitios estáticos
- Hugo, Jekyll, Gatsby, Eleventy (11ty), Astro
CMS sin cabeza (headless)
- Strapi, Sanity, Contentful, Prismic
Otros
- Sitios estáticos
Integración con CI
# GitHub Actions example (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# GitHub Actions example (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
Licencia
MIT