
preflight v0.20.0
Outil CLI basé sur Go qui analyse les bases de code pour vérifier leur état de préparation au lancement, en détectant les configurations manquantes, les problèmes d'hygiène de sécurité, les fuites de secrets et les lacunes d'intégration avant le déploiement en production.
Preflight.sh
Preflight.sh est un outil en ligne de commande qui analyse votre base de code pour vérifier qu'elle est prête au lancement. Il identifie les configurations manquantes, les problèmes d'intégration, les problèmes de sécurité, les lacunes dans les métadonnées SEO et d'autres erreurs courantes avant que vous ne déployiez en production.
Ne vous ridiculisez pas en production. Exécutez simplement la commande.
Installation
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
Téléchargement manuel
Téléchargez la dernière version depuis GitHub Releases.
Démarrage rapide
# 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
Compétence d'agent
Ce dépôt inclut une compétence d'agent compatible skills.sh dans skills/preflight/SKILL.md. Elle fournit aux agents de codage un workflow Preflight reproductible : inspecter preflight.yml, exécuter des analyses compatibles CI, trier les résultats, éviter les exclusions dangereuses, relancer la validation et signaler le risque résiduel de lancement.
Lister la compétence depuis ce dépôt:
# With Bun
bunx --yes skills add preflightsh/preflight --list
# Or with npm
npx --yes skills add preflightsh/preflight --list
Installer uniquement la compétence Preflight:
# With Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Or with npm
npx --yes skills add preflightsh/preflight --skill preflight
Tableau de bord et suggestions IA
Preflight est entièrement utilisable en ligne de commande sans compte. Le tableau de bord optionnel sur app.preflight.sh ajoute un historique hébergé de vos analyses et des suggestions de correction générées par IA pour chaque résultat. Votre code ne quitte jamais votre machine : l'analyse s'exécute localement, et seul un résumé expurgé des résultats (identifiants de vérification, statuts et messages, jamais les valeurs secrètes ni le contenu des fichiers) est envoyé lorsque vous publiez.
Créez un compte gratuit, puis connectez 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
Publiez une analyse sur votre tableau de bord avec --publish. Cela affiche un lien pour consulter l'exécution. La publication est au mieux: si vous êtes hors ligne ou non connecté, l'analyse s'exécute quand même et se termine normalement.
preflight scan --publish
Sur le tableau de bord, vous obtenez la répartition réussite/avertissement/échec de chaque exécution, la liste complète des résultats et un historique par projet afin de voir ce qui a changé entre les déploiements.
Vous pouvez également lire cet historique depuis le terminal avec 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
Nécessite preflight auth login. --here associe les exécutions au dépôt actuel via son remote git, la même clé utilisée lors de la publication.
Ouvrez toute vérification en échec ou avec avertissement lors d'une exécution publiée pour générer un correctif étape par étape adapté à votre stack détectée, avec des commandes et du code prêts à copier.
- Gratuit inclut 5 exécutions publiées par mois.
- Apportez votre propre clé: ajoutez une clé API OpenAI ou Anthropic dans les paramètres de votre tableau de bord et la publication reste gratuite et illimitée (vous payez votre fournisseur directement).
- Géré (5 $/mois): nous couvrons les coûts d'IA et les exécutions sont illimitées, aucune clé API requise.
Ce qu'il vérifie
| Vérification | Description |
|---|---|
| ENV Parity | Compare .env et .env.example pour détecter les variables manquantes |
| Health Endpoint | Vérifie que le site est accessible ; détecte automatiquement /health, /healthz, /api/health ou utilise la racine par défaut |
| Vulnerability Scan | Vérifie les vulnérabilités des dépendances (bundle audit, npm audit, etc.) |
| SEO Metadata | Vérifie la présence du titre, de la description et des balises Open Graph |
| OG & Twitter Cards | Valide og:image, twitter:card et les métadonnées de partage social |
| Canonical URL | Vérifie que la balise de lien canonique est présente |
| Viewport | Vérifie la présence d'une balise meta viewport correcte pour les mobiles |
| Lang Attribute | Valide l'attribut html lang pour l'accessibilité |
| Structured Data | Vérifie la présence de balisage JSON-LD Schema.org |
| Security Headers | Valide HSTS, CSP, X-Content-Type-Options en production et en staging |
| SSL Certificate | Vérifie la validité du certificat SSL et avertit avant l'expiration |
| WWW Redirect | Vérifie la redirection www/non-www vers l'URL canonique |
| Email Auth | Vérifie les enregistrements DNS SPF/DMARC pour la délivrabilité des e-mails (opt-in) |
| Secret Scanning | Détecte les clés API et identifiants divulgués dans le code |
| Debug Statements | Détecte les console.log, var_dump, debugger laissés dans le code |
| Error Pages | Vérifie la présence de pages d'erreur 404/500 personnalisées |
| Image Optimization | Détecte les images volumineuses (>500 Ko) qui nuisent aux temps de chargement |
| Legal Pages | Vérifie la présence de pages de politique de confidentialité et de conditions d'utilisation |
| Cookie Consent | Détecte une solution de consentement aux cookies (conformité RGPD/CCPA) |
| Favicon & Icons | Vérifie la présence de favicon, apple-touch-icon (.png, .webp, .svg) et du manifeste web |
| robots.txt | Vérifie que robots.txt existe et contient du contenu |
| sitemap.xml | Vérifie la présence d'un sitemap ou d'un générateur |
| llms.txt | Vérifie la présence du fichier de directives pour les crawlers LLM |
| ads.txt | Valide ads.txt pour les sites financés par la publicité (opt-in) |
| humans.txt | Vérifie la présence de humans.txt pour créditer l'équipe (opt-in) |
| IndexNow | Vérifie le fichier de clé IndexNow pour une indexation de recherche plus rapide (opt-in) |
| LICENSE | Vérifie la présence d'un fichier de licence (opt-in, pour les projets open source) |
Services pris en charge (72)
Preflight détecte automatiquement et valide la configuration de ces services:
Paiements
- Stripe, PayPal, Braintree, Paddle, LemonSqueezy
Suivi et surveillance des erreurs
- Sentry, Bugsnag, Rollbar, Honeybadger, Datadog, New Relic, LogRocket
E-mail et 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
Authentification
- Auth0, Clerk, WorkOS
Chat
- Intercom, Crisp
Notifications
- Slack, Discord, Twilio
Infrastructure
- Firebase, Supabase, Redis, Sidekiq, RabbitMQ, Elasticsearch, Convex
Stockage et CDN
- AWS S3, Cloudinary, Cloudflare
Recherche
- Algolia
SEO
- IndexNow
IA / LLMs
- OpenAI, Anthropic Claude, Google AI (Gemini), Mistral, Cohere, Replicate, Hugging Face, Grok (X/Twitter), Perplexity, Together AI
Configuration
Preflight utilise un fichier preflight.yml à la racine de votre projet:
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
Ignorer des vérifications et services
Ignorez des vérifications ou services spécifiques avec 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
Ajout d'une exception pour un résultat de secrets
Privilégiez l'ajout d'une exception pour un résultat individuel plutôt que d'ignorer l'ensemble de la vérification secrets. Ajoutez des exceptions ponctuelles depuis la ligne de commande:
preflight ignore secrets web/js/golden-hour.js
Cela ajoute une entrée de chemin sous checks.secrets.allowlist dans votre preflight.yml. Le champ path est un glob doublestar (** correspond à travers les répertoires) résolu par rapport au chemin du fichier relatif au projet.
Épinglez l'empreinte. Une liste d'exceptions basée uniquement sur le chemin accepte silencieusement tout futur secret déposé dans ce fichier. Modifiez l'entrée et ajoutez un fingerprint: "sha256:<hex>" — le SHA-256 de la valeur du secret détecté. Ainsi, si la clé est remplacée ou si un autre secret apparaît dans le même fichier, preflight émet à nouveau une alerte.
Les résultats sont associés par chemin + empreinte, pas par fichier entier. Une empreinte autorisée dans un fichier ne supprime pas les autres secrets sur d'autres lignes du même fichier.
IDs de vérification ignorables
SEO et social:
seoMeta, canonical, structured_data, indexNow (opt-in), ogTwitter, viewport, lang
Sécurité et infrastructure:
securityHeaders, ssl, www_redirect, email_auth (opt-in), secrets
Environnement et santé:
envParity, healthEndpoint
Qualité du code et performances:
vulnerability, debug_statements, error_pages, image_optimization
Juridique et conformité:
legal_pages
Fichiers standards du web:
favicon, robotsTxt, sitemap, llmsTxt, adsTxt (opt-in), humansTxt (opt-in), license (opt-in)
IDs de service ignorables
Tous les services disposent de vérifications qui valident une intégration correcte (variables d'environnement, modèles SDK, fichiers de configuration):
Paiements: stripe, paypal, braintree, paddle, lemonsqueezy
Suivi des erreurs: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
E-mail transactionnel: postmark, sendgrid, mailgun, aws_ses, resend
E-mail marketing: mailchimp, convertkit, beehiiv, aweber, activecampaign, campaignmonitor, drip, klaviyo, buttondown
Analytics: plausible, fathom, google_analytics, fullres, datafast, posthog, mixpanel, amplitude, segment, hotjar
Authentification: auth0, clerk, workos, firebase, supabase
Communication: twilio, slack, discord, intercom, crisp
Infrastructure: redis, sidekiq, rabbitmq, elasticsearch, convex
Stockage et CDN: aws_s3, cloudinary, cloudflare
Recherche: algolia
IA: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: indexNow
Consentement aux cookies: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
Codes de sortie
| Code | Signification |
|---|---|
| 0 | Toutes les vérifications ont réussi |
| 1 | Avertissements uniquement |
| 2 | Des erreurs ont été trouvées |
| 64 | Preflight n'a pas pu s'exécuter (chemin invalide, configuration illisible, ID de vérification inconnu) |
| 130 | Analyse annulée (Ctrl-C / SIGTERM) |
Les codes 1 et 2 signifient que l'analyse a été exécutée et a rapporté quelque chose. Le code 64 signifie qu'elle n'est jamais arrivée jusque-là, afin que la CI puisse distinguer « ce projet a des problèmes » de « cette invocation était incorrecte ».
Complétions shell
Complétion par tabulation pour les commandes, les options et les IDs de vérification (y compris les valeurs --only et --skip):
# bash (add to ~/.bashrc)
source <(preflight completion bash)
# zsh (add to ~/.zshrc)
source <(preflight completion zsh)
# fish
preflight completion fish | source
La sortie respecte également la variable d'environnement NO_COLOR.
Stacks prises en charge
Frameworks back-end
- Ruby on Rails, Laravel, PHP, Go, Python/Django, Rust, Node.js
Frameworks front-end
- Next.js, Nuxt, Remix, React, Vue.js, Vite, Svelte, Angular
CMS traditionnels
- WordPress, Craft CMS, Drupal, Ghost
Générateurs de sites statiques
- Hugo, Jekyll, Gatsby, Eleventy (11ty), Astro
CMS headless
- Strapi, Sanity, Contentful, Prismic
Autres
- Sites statiques
Intégration 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
Licence
MIT