
preflight v0.22.0
Go-basiertes CLI-Tool, das Codebasen auf Startbereitschaft durchsucht und fehlende Konfiguration, Probleme der Sicherheitshygiene, Geheimnislecks und Integrationslücken vor der Produktionsbereitstellung erkennt.
Preflight.sh
Preflight.sh ist ein Kommandozeilen-Tool, das Ihre Codebasis auf Startbereitschaft prüft. Es erkennt fehlende Konfiguration, Integrationsprobleme, Sicherheitsbedenken, SEO-Metadaten-Lücken und andere häufige Fehler, bevor Sie in Produktion gehen.
Blamieren Sie sich nicht in der Produktion. Führen Sie einfach den Befehl aus.
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
Shell-Skript
curl -sSL https://preflight.sh/install.sh | sh
Manueller Download
Laden Sie die neueste Version von GitHub Releases herunter.
Schnellstart
# In Ihrem Projektverzeichnis initialisieren
cd your-project
preflight init
# Alle Prüfungen ausführen
preflight scan
# Ein bestimmtes Verzeichnis scannen
preflight scan /path/to/project
# Mit ausführlicher Ausgabe ausführen (zeigt, welche Dateien zu jeder Prüfung gehören)
preflight scan --verbose
preflight scan -v # Kurzform
# Im CI-Modus mit JSON-Ausgabe ausführen
preflight scan --ci --format json
# Nur bestimmte Prüfungen ausführen oder einige überspringen, für schnelle Iteration
# (einmalig; ändert im Gegensatz zu `preflight ignore` nicht die preflight.yml)
preflight scan --only seo_meta,og_twitter
preflight scan --skip vulnerability,secrets
# Eine Prüfung stummschalten
preflight ignore sitemap
# Stummschaltung einer Prüfung aufheben
preflight unignore sitemap
# Alle Prüfungs-IDs auflisten
preflight checks
Agent-Fähigkeit
Dieses Repository enthält eine skills.sh-kompatible Agent-Fähigkeit unter skills/preflight/SKILL.md. Sie gibt Coding-Agenten einen wiederholbaren Preflight-Workflow: preflight.yml inspizieren, CI-sichere Scans ausführen, Befunde triagieren, unsichere Ignorierungen vermeiden, Validierung erneut ausführen und das verbleibende Startrisiko melden.
Die Fähigkeit aus diesem Repository auflisten:
# Mit Bun
bunx --yes skills add preflightsh/preflight --list
# Oder mit npm
npx --yes skills add preflightsh/preflight --list
Nur die Preflight-Fähigkeit installieren:
# Mit Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Oder mit npm
npx --yes skills add preflightsh/preflight --skill preflight
Dashboard & KI-Vorschläge
Preflight ist vollständig über die Kommandozeile nutzbar, ohne Konto. Das optionale Dashboard unter app.preflight.sh fügt einen gehosteten Verlauf Ihrer Scans und KI-generierte Korrekturvorschläge für jeden Befund hinzu. Ihr Code verlässt niemals Ihren Rechner: Das Scannen läuft lokal, und nur eine geschwärzte Zusammenfassung der Ergebnisse (Prüfungs-IDs, Status und Meldungen, niemals geheime Werte oder Dateiinhalte) wird gesendet, wenn Sie veröffentlichen.
Erstellen Sie ein kostenloses Konto und verbinden Sie dann die CLI:
preflight auth login # öffnet Ihren Browser, um diese CLI zu autorisieren
preflight auth status # zeigt an, mit wem Sie angemeldet sind
preflight auth logout # entfernt gespeicherte Anmeldedaten
Veröffentlichen Sie einen Scan mit --publish auf Ihrem Dashboard. Es wird ein Link zur Ansicht des Laufs ausgegeben. Das Veröffentlichen ist ein Best-Effort-Vorgang: Wenn Sie offline oder nicht angemeldet sind, läuft der Scan trotzdem und wird normal beendet.
preflight scan --publish
Auf dem Dashboard erhalten Sie die Bestanden/Warnung/Fehler-Aufschlüsselung jedes Laufs, die vollständige Liste der Befunde und einen projektbezogenen Verlauf, sodass Sie sehen können, was sich zwischen Deployments geändert hat.
Sie können diesen Verlauf auch über das Terminal mit preflight history lesen:
preflight history # letzte Läufe über Ihre Projekte hinweg
preflight history --here # nur die Läufe des aktuellen Projekts
preflight history <run-id> # vollständige Prüfungsergebnisse eines Laufs
preflight history --here --format json # maschinenlesbar, für Agenten
Erfordert preflight auth login. --here ordnet Läufe dem aktuellen Repository über sein Git-Remote zu, demselben Schlüssel, der auch beim Veröffentlichen verwendet wird.
Öffnen Sie eine fehlgeschlagene Prüfung oder Warnung eines veröffentlichten Laufs, um eine schrittweise, auf Ihren erkannten Stack zugeschnittene Korrektur mit kopierfertigen Befehlen und Code zu generieren.
- Kostenlos umfasst 5 veröffentlichte Läufe pro Monat.
- Bring your own key: Fügen Sie einen OpenAI- oder Anthropic-API-Schlüssel in Ihren Dashboard-Einstellungen hinzu, und das Veröffentlichen bleibt kostenlos und unbegrenzt (Sie zahlen direkt an Ihren Anbieter).
- Verwaltet ($5/Monat): Wir übernehmen die KI-Kosten, und die Läufe sind unbegrenzt, ohne API-Schlüssel.
Was geprüft wird
| Prüfung | Beschreibung |
|---|---|
| ENV-Parität | Vergleicht .env und .env.example auf fehlende Variablen |
| Health-Endpunkt | Stellt sicher, dass die Website erreichbar ist; erkennt automatisch /health, /healthz, /api/health oder fällt auf die Root zurück |
| Schwachstellenscan | Prüft auf Abhängigkeits-Schwachstellen (bundle audit, npm audit usw.) |
| SEO-Metadaten | Prüft auf Titel, Beschreibung und Open-Graph-Tags |
| OG- & Twitter-Cards | Validiert og:image, twitter:card und Social-Sharing-Metadaten |
| Kanonische URL | Stellt sicher, dass das kanonische Link-Tag vorhanden ist |
| Viewport | Prüft auf korrektes Viewport-Meta-Tag für Mobilgeräte |
| Lang-Attribut | Validiert das html-lang-Attribut für Barrierefreiheit |
| Strukturierte Daten | Prüft auf JSON-LD-Schema.org-Markup |
| Sicherheits-Header | Validiert HSTS, CSP, X-Content-Type-Options sowohl auf Produktion als auch auf Staging |
| SSL-Zertifikat | Prüft die SSL-Gültigkeit und warnt vor Ablauf |
| WWW-Weiterleitung | Stellt sicher, dass www/non-www auf die kanonische URL weiterleitet |
| E-Mail-Authentifizierung | Prüft SPF/DMARC-DNS-Einträge für die E-Mail-Zustellbarkeit (Opt-in) |
| Geheimnis-Scan | Findet geleakte API-Schlüssel und Anmeldedaten im Code |
| Debug-Anweisungen | Erkennt console.log, var_dump, debugger, die im Code verblieben sind |
| Fehlerseiten | Prüft auf benutzerdefinierte 404/500-Fehlerseiten |
| Bildoptimierung | Findet große Bilder (>500KB), die die Ladezeiten beeinträchtigen |
| Rechtliche Seiten | Prüft auf Datenschutzerklärung und Nutzungsbedingungen |
| Cookie-Einwilligung | Erkennt eine Cookie-Einwilligungslösung (GDPR/CCPA-Konformität) |
| Favicon & Icons | Prüft auf Favicon, apple-touch-icon (.png, .webp, .svg) und Web-Manifest |
| robots.txt | Stellt sicher, dass robots.txt existiert und Inhalt hat |
| sitemap.xml | Prüft auf das Vorhandensein einer Sitemap oder eines Generators |
| llms.txt | Prüft auf die LLM-Crawler-Anleitungsdatei |
| ads.txt | Validiert ads.txt für werbefinanzierte Websites (Opt-in) |
| humans.txt | Prüft auf humans.txt, um das Team zu würdigen (Opt-in) |
| IndexNow | Stellt die IndexNow-Schlüsseldatei für schnellere Suchindexierung sicher (Opt-in) |
| LICENSE | Prüft auf die Lizenzdatei (Opt-in, für Open-Source-Projekte) |
Unterstützte Dienste (72)
Preflight erkennt und validiert automatisch die Konfiguration für diese Dienste:
Zahlungen
- Stripe, PayPal, Braintree, Paddle, LemonSqueezy
Fehlerverfolgung & Monitoring
- Sentry, Bugsnag, Rollbar, Honeybadger, Datadog, New Relic, LogRocket
E-Mail & Newsletter
- 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
Authentifizierung
- Auth0, Clerk, WorkOS
Chat
- Intercom, Crisp
Benachrichtigungen
- Slack, Discord, Twilio
Infrastruktur
- Firebase, Supabase, Redis, Sidekiq, RabbitMQ, Elasticsearch, Convex
Speicher & CDN
- AWS S3, Cloudinary, Cloudflare
Suche
- Algolia
SEO
- IndexNow
KI / LLMs
- OpenAI, Anthropic Claude, Google AI (Gemini), Mistral, Cohere, Replicate, Hugging Face, Grok (X/Twitter), Perplexity, Together AI
Konfiguration
Preflight verwendet eine preflight.yml-Datei im Projektstamm:
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 - erkennt automatisch gängige Pfade, wenn nicht gesetzt
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe" # optional - wird mit einem GET abgefragt; ein 404 oder keine Antwort wird gemeldet
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# Pro-Datei-Allowlist für den Geheimnis-Scan. Verwenden Sie dies, um einen
# einzelnen Befund zu unterdrücken (z. B. einen referrer-beschränkten öffentlichen Schlüssel),
# ohne die gesamte Prüfung zu deaktivieren.
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # empfohlen - bindet an das genaue Geheimnis
reason: "HTTP-referrer-beschränkter Google-Time-Zone-Schlüssel"
- path: "web/tools/**/*.php" # Doublestar-Globs werden unterstützt
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # Opt-in, prüft SPF/DMARC auf der Produktionsdomain
humansTxt:
enabled: false # Opt-in, würdigt das Team
license:
enabled: false # Opt-in, für Open-Source-Projekte
# Bestimmte Prüfungen oder Dienste per ID stummschalten
ignore:
- sitemap
- llms_txt
- google_analytics
Prüfungen & Dienste ignorieren
Schalten Sie bestimmte Prüfungen oder Dienste mit preflight ignore <id> stumm:
preflight ignore sitemap # Sitemap-Prüfung ignorieren
preflight ignore sentry # Sentry-Dienstvalidierung ignorieren
preflight unignore sitemap # Sitemap-Prüfung wieder aktivieren
preflight checks # Alle ignorierbaren IDs auflisten
Einzelnen Geheimnis-Befund auf die Allowlist setzen
Bevorzugen Sie die Allowlist für einen einzelnen Befund gegenüber dem Stummschalten der gesamten
secrets-Prüfung. Fügen Sie einmalige Ausnahmen über die Kommandozeile hinzu:
preflight ignore secrets web/js/golden-hour.js
Das hängt einen Pfadeintrag unter checks.secrets.allowlist in Ihrer
preflight.yml an. Das Feld path ist ein doublestar-Glob
(** stimmt über Verzeichnisse hinweg überein), das relativ zum Projektdateipfad aufgelöst wird.
Fingerprint festlegen. Eine reine Pfad-Allowlist akzeptiert stillschweigend jedes
zukünftige Geheimnis, das in dieser Datei landet. Bearbeiten Sie den Eintrag und fügen Sie einen
fingerprint: "sha256:<hex>" hinzu — die SHA-256 des erkannten Geheimniswerts.
Wenn der Schlüssel nun rotiert wird oder ein anderes Geheimnis in derselben Datei auftaucht,
meldet Preflight erneut.
Befunde werden nach Pfad + Fingerprint abgeglichen, nicht nach ganzer Datei. Ein allowlisteter Fingerprint in einer Datei unterdrückt keine anderen Geheimnisse auf anderen Zeilen in derselben Datei.
Ignorierbare Prüfungs-IDs
SEO & Social:
seo_meta, canonical, structured_data, index_now (Opt-in), og_twitter, viewport, lang
Sicherheit & Infrastruktur:
security_headers, ssl, www_redirect, email_auth (Opt-in), secrets
Umgebung & Gesundheit:
env_parity, health_endpoint
Codequalität & Leistung:
vulnerability, debug_statements, error_pages, image_optimization
Recht & Compliance:
legal_pages
Web-Standarddateien:
favicon, robots_txt, sitemap, llms_txt, ads_txt (Opt-in), humans_txt (Opt-in), license (Opt-in)
In 0.22 umbenannte Prüfungs-IDs
Jede Prüfungs-ID ist jetzt snake_case. Die alten camelCase-Namen funktionieren weiterhin
überall dort, wo eine ID akzeptiert wird (ignore:-Listen, --only, --skip,
preflight ignore) bis zur 1.x-Linie, mit einem Hinweis auf stderr, und verschwinden
in 2.0. preflight ignore schreibt den neuen Namen. Die Schlüssel unter
checks: in preflight.yml (healthEndpoint, seoMeta, ...) sind ein
separates Schema und haben sich nicht geändert.
| Alt | Neu |
|---|---|
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 |
Ein Hinweis zum Scannen von Code, dem Sie nicht vertrauen
Jede Prüfung liest Dateien; eine führt ein Programm aus. Die vulnerability-Prüfung
führt den eigenen Paketmanager Ihres Projekts aus (npm audit, yarn audit,
composer audit, bundle audit, pip-audit, govulncheck, cargo audit)
innerhalb des Projektverzeichnisses, mit einer bereinigten Umgebung und einem temporären
Home, sodass er Ihre Tokens nicht lesen kann. Paketmanager berücksichtigen weiterhin
projektlokale Konfiguration, und ein Teil dieser Konfiguration kann Code aus dem
Repository ausführen (ein Yarn-yarnPath, ein Cargo-Alias, ein Composer-Plugin).
Das Scannen eigener Projekte ist der Zweck von Preflight. Wenn Sie ein Repository
scannen, dem Sie nicht vertrauen, z. B. einen Pull-Request eines Forks in CI,
fügen Sie --skip vulnerability hinzu.
Ignorierbare Dienst-IDs
Alle Dienste haben Validierungsprüfungen, die die ordnungsgemäße Integration überprüfen (Env-Variablen, SDK-Muster, Konfigurationsdateien):
Zahlungen: stripe, paypal, braintree, paddle, lemonsqueezy
Fehlerverfolgung: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Transaktions-E-Mail: 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
Authentifizierung: auth0, clerk, workos, firebase, supabase
Kommunikation: twilio, slack, discord, intercom, crisp
Infrastruktur: redis, sidekiq, rabbitmq, elasticsearch, convex
Speicher & CDN: aws_s3, cloudinary, cloudflare
Suche: algolia
KI: openai, anthropic, google_ai, mistral, cohere, replicate, huggingface, grok, perplexity, together_ai
SEO: index_now
Cookie-Einwilligung: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
Exit-Codes
| Code | Bedeutung |
|---|---|
| 0 | Alle Prüfungen bestanden |
| 1 | Nur Warnungen |
| 2 | Fehler gefunden |
| 64 | Preflight konnte nicht ausgeführt werden (ungültiger Pfad, nicht lesbare Konfiguration, unbekannte Prüfungs-ID) |
| 130 | Scan abgebrochen (Ctrl-C / SIGTERM) |
Die Codes 1 und 2 bedeuten, dass der Scan ausgeführt wurde und etwas gemeldet hat. Code 64 bedeutet, dass er nie so weit gekommen ist, sodass CI „dieses Projekt hat Probleme" von „dieser Aufruf war falsch" unterscheiden kann.
Shell-Vervollständigung
Tab-Vervollständigung für Befehle, Flags und Prüfungs-IDs (einschließlich --only- und --skip-Werte):
# bash (zu ~/.bashrc hinzufügen)
source <(preflight completion bash)
# zsh (zu ~/.zshrc hinzufügen)
source <(preflight completion zsh)
# fish
preflight completion fish | source
Die Ausgabe respektiert auch die NO_COLOR-Umgebungsvariable.
Unterstützte Stacks
Backend-Frameworks
- Ruby on Rails, Laravel, PHP, Go, Python/Django, Rust, Node.js
Frontend-Frameworks
- Next.js, Nuxt, Remix, React, Vue.js, Vite, Svelte, Angular
Traditionelle CMS
- WordPress, Craft CMS, Drupal, Ghost
Statische Site-Generatoren
- Hugo, Jekyll, Gatsby, Eleventy (11ty), Astro
Headless-CMS
- Strapi, Sanity, Contentful, Prismic
Sonstiges
- Statische Websites
CI-Integration
# GitHub Actions-Beispiel (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# GitHub Actions-Beispiel (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
Lizenz
MIT