
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 ist ein Kommandozeilen-Tool, das Ihre Codebasis auf Startbereitschaft überprüft. Es identifiziert fehlende Konfiguration, Integrationsprobleme, Sicherheitsbedenken, SEO-Metadaten-Lücken und andere häufige Fehler, bevor Sie in die Produktion deployen.
Blamieren Sie sich nicht in der Produktion. Führen Sie einfach den Befehl aus.
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
Laden Sie die neueste Version von GitHub Releases herunter.
# 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 welcher 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 Iterationen
# (einmalig; ändert im Gegensatz zu `preflight ignore` nicht die preflight.yml)
preflight scan --only seoMeta,ogTwitter
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
Dieses Repository enthält eine skills.sh-kompatible Agent-Skill unter skills/preflight/SKILL.md. Sie gibt Coding-Agenten einen wiederholbaren Preflight-Workflow: preflight.yml prüfen, CI-sichere Scans ausführen, Ergebnisse sichten, unsichere Ignores vermeiden, Validierung erneut ausführen und das verbleibende Launch-Risiko berichten.
Skill 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-Skill installieren:
# Mit Bun
bunx --yes skills add preflightsh/preflight --skill preflight
# Oder mit npm
npx --yes skills add preflightsh/preflight --skill preflight
Preflight ist vollständig ohne Konto über die Kommandozeile nutzbar. Das optionale Dashboard unter app.preflight.sh bietet einen gehosteten Verlauf Ihrer Scans und KI-generierte Lösungsvorschläge für jeden Befund. Ihr Code verlässt nie 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 in Ihrem Dashboard. Es wird ein Link zur Ansicht des Laufs ausgegeben. Das Veröffentlichen ist Best-Effort: Wenn Sie offline oder nicht angemeldet sind, läuft der Scan trotzdem und wird normal beendet.
preflight scan --publish
Im Dashboard erhalten Sie die Pass/Warn/Fail-Aufschlüsselung jedes Laufs, die vollständige Liste der Befunde und einen projektbezogenen Verlauf, sodass Sie sehen können, was sich zwischen Deploys geändert hat.
Sie können diesen Verlauf auch im 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üfergebnisse eines Laufs
preflight history --here --format json # maschinenlesbar, für Agents
Erfordert preflight auth login. --here ordnet Läufe dem aktuellen Repository über dessen Git-Remote zu – derselbe Schlüssel, der auch beim Veröffentlichen verwendet wird.
Öffnen Sie bei einem veröffentlichten Lauf eine fehlgeschlagene Prüfung oder Warnung, um eine schrittweise, auf Ihren erkannten Stack zugeschnittene Lösung mit kopierfertigen Befehlen und Code zu erzeugen.
Preflight erkennt und validiert automatisch die Konfiguration dieser Dienste:
Zahlungen
Fehlerverfolgung & Monitoring
E-Mail & Newsletter
Analytics
Authentifizierung
Chat
Benachrichtigungen
Infrastruktur
Speicher & CDN
Suche
SEO
KI / LLMs
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 - 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
Stummschalten bestimmter Prüfungen oder Dienste mit preflight ignore <id>:
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
Bevorzugen Sie das Aufnehmen eines einzelnen Befunds 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 Pfad-Eintrag unter checks.secrets.allowlist in Ihrer
preflight.yml an. Das Feld path ist ein doublestar-Glob
(** passt über Verzeichnisse hinweg), aufgelöst gegen den
projektrelativen Dateipfad.
Fingerprint festlegen. Eine reine Pfad-Whitelist akzeptiert stillschweigend jede
zukünftige Secret, die in diese Datei gelangt. Bearbeiten Sie den Eintrag und fügen Sie ein
fingerprint: "sha256:<hex>" hinzu – den SHA-256-Wert des erkannten Secret-Werts.
Wenn der Schlüssel nun rotiert wird oder ein anderes Secret in derselben
Datei auftaucht, meldet Preflight erneut.
Befunde werden nach Pfad + Fingerprint abgeglichen, nicht dateiweit. Ein auf der Whitelist stehender Fingerprint in einer Datei unterdrückt nicht andere Secrets in anderen Zeilen derselben Datei.
SEO & Social:
seoMeta, canonical, structured_data, indexNow (opt-in), ogTwitter, viewport, lang
Sicherheit & Infrastruktur:
securityHeaders, ssl, www_redirect, email_auth (opt-in), secrets
Umgebung & Gesundheit:
envParity, healthEndpoint
Codequalität & Leistung:
vulnerability, debug_statements, error_pages, image_optimization
Rechtliches & Compliance:
legal_pages
Standard-Webdateien:
favicon, robotsTxt, sitemap, llmsTxt, adsTxt (opt-in), humansTxt (opt-in), license (opt-in)
Alle Dienste haben Validierungsprüfungen, die eine korrekte Integration verifizieren (Umgebungsvariablen, SDK-Muster, Konfigurationsdateien):
Zahlungen: stripe, paypal, braintree, paddle, lemonsqueezy
Fehlerverfolgung: sentry, bugsnag, rollbar, honeybadger, datadog, newrelic, logrocket
Transaktions-E-Mails: 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: indexNow
Cookie-Einwilligung: cookieconsent, cookiebot, onetrust, termly, cookieyes, iubenda
| Code | Bedeutung |
|---|---|
| 0 | Alle Prüfungen bestanden |
| 1 | Nur Warnungen |
| 2 | Fehler gefunden |
Die Codes 1 und 2 bedeuten, dass der Scan ausgeführt wurde und etwas gemeldet hat. Code 64 bedeutet, dass es nie so weit kam, sodass CI „dieses Projekt hat Probleme" von „dieser Aufruf war falsch" unterscheiden kann.
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 außerdem die NO_COLOR-Umgebungsvariable.
Backend-Frameworks
Frontend-Frameworks
Traditionelle CMS
Statische Site-Generatoren
Headless-CMS
Sonstiges
# 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
MIT
| Prüfung | Beschreibung |
|---|
| ENV-Parität | Vergleicht .env und .env.example auf fehlende Variablen |
| Health-Endpunkt | Prüft, ob die Website erreichbar ist; erkennt automatisch /health, /healthz, /api/health oder fällt auf die Root-URL 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 | Prüft, ob das kanonische Link-Tag vorhanden ist |
| Viewport | Prüft auf ein 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 Staging |
| SSL-Zertifikat | Prüft die SSL-Gültigkeit und warnt vor Ablauf |
| WWW-Weiterleitung | Prüft, ob 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) |
| Secret-Scanning | Findet durchgesickerte API-Schlüssel und Anmeldedaten im Code |
| Debug-Anweisungen | Erkennt console.log, var_dump, debugger im Code |
| Fehlerseiten | Prüft auf benutzerdefinierte 404/500-Fehlerseiten |
| Bildoptimierung | Findet große Bilder (>500 KB), die die Ladezeit beeinträchtigen |
| Rechtliche Seiten | Prüft auf Datenschutzerklärung und Nutzungsbedingungen |
| Cookie-Einwilligung | Erkennt eine Lösung für Cookie-Einwilligungen (DSGVO/CCPA-Konformität) |
| Favicon & Icons | Prüft auf Favicon, apple-touch-icon (.png, .webp, .svg) und Web-Manifest |
| robots.txt | Prüft, ob robots.txt existiert und Inhalt hat |
| sitemap.xml | Prüft auf Sitemap oder Generator |
| llms.txt | Prüft auf eine LLM-Crawler-Leitfaden-Datei |
| ads.txt | Validiert ads.txt für werbefinanzierte Websites (opt-in) |
| humans.txt | Prüft auf humans.txt zur Nennung des Teams (opt-in) |
| IndexNow | Prüft die IndexNow-Key-Datei für schnellere Suchindizierung (opt-in) |
| LICENSE | Prüft auf eine Lizenzdatei (opt-in, für Open-Source-Projekte) |
| 64 | Preflight konnte nicht ausgeführt werden (ungültiger Pfad, nicht lesbare Konfiguration, unbekannte Prüfungs-ID) |
| 130 | Scan abgebrochen (Ctrl-C / SIGTERM) |