Sardine CMS
Ein mehrsprachiges, static-first CMS-Framework.
Der Motor hinter dieser Website, herausgelöst in ein wiederverwendbares Framework. Sardine baut mehrsprachige, static-first Websites: strukturierte Inhalte, getrennt von der Darstellung, strenge Validierung vor jeder Veröffentlichung, und ein deterministischer Build, der direkt auf einen statischen Host exportiert.
Was es ist
Der Inhalt lebt in JSON und Markdown, mit konfigurierbarer Ausgangssprache. Heute liegen sieben Sprachpakete bei: Englisch, europäisches Portugiesisch, Spanisch, Französisch und Deutsch, dazu Italienisch und Indonesisch, die beiden letzten von der Community beigetragen, mit dem vollständigen Katalog des Admin-Panels. Die Teile sind dieselben Verträge, die auf dieser Website erprobt sind:
- strukturierte Inhalte in JSON und Markdown, getrennt von der Darstellung;
- strenge Validierung vor der Veröffentlichung: Sprachparität, Struktur, redaktionelle Regeln;
- ein deterministischer Build mit statischem Export, bereit für Azure Static Web Apps;
- mehrsprachige SEO von Anfang an: canonical, hreflang, Open Graph, JSON-LD, Sitemap und RSS;
- ein authentifizierter Admin-Bereich im Browser, der den gesamten redaktionellen Zyklus abdeckt.
Der Inhalt ist von Grund auf portabel: JSON und Markdown, ohne Bindung an eine Datenbank. Es gibt vier Speicher-Engines: SQLite als Standard, mit PostgreSQL, MySQL und SQL Server als optionale Extras. Das Frontend erfüllt die WCAG 2.2 AA. Zu den Deploy-Zielen gehören Azure Static Web Apps, nginx, ein generischer Server und ein Astro-Projektgerüst, das die Content API nutzt.

Das Admin-Panel
Wer redigiert, arbeitet in einem echten Panel im Browser, nicht in einer Konfigurationsdatei. Es trägt SEO je Eintrag, Formulare, die auf einem offiziellen Endpunkt aufsetzen, und signierte externe Vorschaulinks, um einen Entwurf jemandem ohne Konto zu zeigen.
Themes und Erweiterungen werden aus dem Panel verwaltet, deklarativ. Es entdeckt, was installiert ist, und zeigt die Metadaten, einen Screenshot und ein Kompatibilitätsurteil, ohne während der Entdeckung Code auszuführen. Die Aktivierung ist transaktional: Ein Test-Build muss bestehen, bevor sich die Konfiguration ändert, sodass eine defekte Erweiterung ein sichtbarer und umkehrbarer Zustand ist, nie ein totes Panel. Erweiterungen tragen ein versioniertes Einstellungsschema und einen optionalen Health-Check, Einstellungen werden vor dem Speichern validiert, geheime Werte nennen eine Umgebungsvariable, statt gespeichert zu werden, und ein Theme ist ein prüfbarer Vertrag aus fünfzehn benannten Konformitätsprüfungen.
Bestehende Blogs migrieren
Ein vollständiger Weg, Ende zu Ende, für WXR-Exporte aus WordPress, im CLI und im Panel über dieselbe Pipeline. Nichts wird geschrieben, bevor Sie gesehen haben, was passieren wird: Ein Dry-Run-Bericht nennt einen ausdrücklichen Treue-Prozentsatz und listet eine Zeile je Element auf, das nicht migriert werden kann, damit nichts stillschweigend verworfen wird. Der Re-Import ist idempotent, Autoren, Kategorien und Schlagwörter werden zugeordnet, die referenzierte Media wird heruntergeladen, und Weiterleitungen von den alten URLs werden automatisch erzeugt.
Installation
Erfordert Python 3.12 oder neuer. Der Befehl cms kommt aus einem einzigen Paket:
pip install sardine-cms-cli
Das zieht den Kern, den Validator und den Builder mit. Das Referenz-Theme und der Browser-Admin sind eigene, optionale Pakete. Datenbank-Engines über SQLite hinaus sind optionale Extras des Kerns:
pip install "sardine-cms-core[postgres]" # oder [mysql], [mssql]
Quickstart
Ein Befehl führt vom Nichts zu einer begehbaren Website in sieben Sprachen:
pip install sardine-cms-cli sardine-cms-theme-ph7x-reference
cms demo
Es gibt auch einen Docker-Weg: docker compose up startet das Panel mit einer vorbefüllten Website und ohne Python-Einrichtung und gibt beim ersten Start ein erzeugtes Admin-Passwort aus. Um stattdessen ein echtes Projekt zu starten, cms init my-site --theme ph7x-reference, dann cms seed, cms build und cms preview.
Wie es aufgebaut ist
Der Arbeitsbereich ist eine Reihe fokussierter Pakete: cms-core für das Inhaltsmodell und die Übersetzungszustände, cms-validation für die Regeln, cms-build für den deterministischen Generator und die Themes, und cms-cli für den Befehl cms, dazu ein Referenz-Theme und der Browser-Admin. Das Design lebt auf Theme-Ebene: bringen Sie Ihr eigenes mit.
Wie man beiträgt
Das Repository ist offen für Beiträge. Lesen Sie die CONTRIBUTING.md und die CODE_OF_CONDUCT.md, wählen Sie ein mit good first issue markiertes Issue, und öffnen Sie einen Pull Request. Fehlerberichte und Doku-Korrekturen sind so willkommen wie Code. Sicherheitsfragen folgen der SECURITY.md, im Privaten.
Sie können es im Demo laufen sehen, ein fiktives Luft- und Raumfahrtunternehmen in sieben Sprachen, bei jedem Merge neu gebaut und veröffentlicht.
