Grav – das CMS ohne Datenbank, das alles kann
Grav ist kein Kompromiss. Es ist eine Entscheidung.
Die meisten Content-Management-Systeme beginnen mit einer Frage: Welche Datenbank soll es sein? Grav stellt diese Frage gar nicht erst. Es braucht keine. Keine MySQL-Instanz, kein phpMyAdmin, kein Backup-Chaos mit Dump-Dateien. Inhalte leben als einfache Textdateien auf dem Server – lesbar, versionierbar, portabel. Das klingt nach Verzicht, ist aber in Wahrheit eine Befreiung.
Dieser Artikel ist für alle, die ernsthaft überlegen, ob Grav das richtige Werkzeug für ihr Projekt ist. Keine Marketing-Broschüre, keine Kurzfassung – sondern alles, was man wirklich wissen muss.
Was ist Grav überhaupt?
Grav ist ein Flat-File-CMS, entwickelt von RocketTheme und erstmals 2014 veröffentlicht. „Flat File" bedeutet: Alle Inhalte werden als Dateien gespeichert, typischerweise im Markdown-Format. Es gibt keine relationale Datenbank. Der Webserver liefert Seiten aus, die Grav aus diesen Dateien zusammenbaut – entweder live (mit intelligentem Caching) oder als statisch gecachte HTML-Ausgabe.
Grav ist in PHP geschrieben und nutzt Twig als Template-Engine. Es folgt modernen Entwicklungsstandards: Composer für Abhängigkeiten, YAML für Konfiguration, Markdown für Inhalte. Wer diese Werkzeuge kennt, fühlt sich sofort zu Hause.
Das Projekt ist Open Source (MIT-Lizenz) und wird aktiv gepflegt. Der Quellcode liegt auf GitHub, die Community ist überschaubar, aber engagiert.
Die Philosophie hinter Grav
Grav wurde mit einem klaren Designziel gebaut: Einfachheit ohne Einschränkung. Das bedeutet konkret:
- Kein Overhead durch Datenbankabfragen bei jedem Seitenaufruf
- Volle Kontrolle über Struktur, Templates und Verhalten
- Portabilität – ein Grav-Projekt ist ein Ordner, der sich kopieren, sichern und deployen lässt
- Entwicklerfreundlichkeit als Grundprinzip, nicht als nachträgliches Feature
Grav folgt dem Prinzip: Was du nicht brauchst, ist nicht da. Was du brauchst, holst du dir.
Systemvoraussetzungen und Installation
Was Grav braucht
Die Anforderungen sind bewusst niedrig gehalten:
- PHP 8.0 oder neuer (empfohlen: 8.2+)
- PHP-Erweiterungen:
mbstring,curl,openssl,zip,gd(meist standardmäßig aktiv) - Apache mit
mod_rewriteoder nginx mit entsprechender Konfiguration - Kein MySQL, kein Redis, keine externe Abhängigkeit
Auch auf einem einfachen Shared Hosting läuft Grav – solange PHP in ausreichender Version vorhanden ist.
Installation in drei Minuten
# Grav herunterladen (mit Admin-Plugin)
wget https://getgrav.org/download/core/grav-admin/latest -O grav-admin.zip
# Entpacken ins Webroot
unzip grav-admin.zip -d /var/www/html/
# Fertig.
Kein Installer-Wizard mit Datenbankpasswörtern. Kein Warten auf Tabellen-Erstellung. Der erste Aufruf im Browser zeigt direkt die Website.
Alternativ via Composer:
composer create-project getgrav/grav mein-projekt
Oder mit dem Grav CLI:
bin/grav install
Grav CLI – der stille Held
Das mitgelieferte Kommandozeilen-Werkzeug bin/grav und bin/plugin sind mächtig unterschätzt. Damit lassen sich:
- Plugins und Themes installieren
- Cache leeren
- Backups erstellen
- Benutzer anlegen
- Systeminformationen abfragen
Für alle, die lieber mit SSH als mit Mausgeklicke arbeiten, ist das ein erheblicher Vorteil gegenüber WordPress & Co.
Die Verzeichnisstruktur – alles am richtigen Platz
mein-grav/
├── cache/ # Automatisch generierter Cache
├── images/ # Verarbeitete Bildversionen
├── logs/ # Fehler- und Systemlogs
├── system/ # Grav-Core (nicht anfassen)
├── tmp/ # Temporäre Dateien
├── user/ # HIER lebt alles, was man selbst macht
│ ├── accounts/ # Benutzerdaten
│ ├── config/ # Konfigurationsdateien (YAML)
│ ├── data/ # Plugin-Daten
│ ├── pages/ # Inhalte (Markdown-Dateien)
│ ├── plugins/ # Installierte Plugins
│ └── themes/ # Installierte Themes
└── vendor/ # PHP-Abhängigkeiten (Composer)
Die entscheidende Erkenntnis: Alles Eigene liegt unter user/. Das bedeutet, ein Update des Grav-Cores lässt sich durchführen, ohne auch nur eine eigene Datei anzufassen. Backups beschränken sich auf diesen einen Ordner.
Inhalte erstellen – Markdown als erste Sprache
Die Seitenstruktur
Jede Seite in Grav ist ein Verzeichnis unter user/pages/, das eine Markdown-Datei enthält:
user/pages/
├── 01.home/
│ └── default.md
├── 02.blog/
│ ├── blog.md
│ └── erster-beitrag/
│ └── item.md
└── 03.kontakt/
└── default.md
Die Nummerierung (01., 02.) steuert die Reihenfolge im Menü. Der Name nach dem Punkt ist der URL-Slug. Alles ohne Datenbank-IDs, ohne Tabellen – einfach Ordner und Dateien.
Frontmatter und Inhalt
Jede Markdown-Datei beginnt mit einem YAML-Frontmatter-Block:
---
title: Mein erster Beitrag
date: 2024-03-15
author: Horst Mustermann
taxonomy:
category: [blog]
tag: [grav, cms, web]
published: true
---
Hier beginnt der eigentliche Inhalt in **Markdown**.
Dies ist ein Absatz. Bilder lassen sich einfach einbinden:

Das Frontmatter ist der Metadaten-Bereich – vollständig anpassbar, erweiterbar um eigene Felder, die dann in Templates genutzt werden können.
Medienverwaltung
Bilder und andere Medien landen direkt im gleichen Ordner wie die zugehörige Markdown-Datei. Grav verarbeitet Bilder intelligent:

Grav generiert die verkleinerte Version automatisch und cached sie. Responsive Bilder, Lazyloading, WebP-Konvertierung – alles über einfache URL-Parameter steuerbar, ohne ein einziges Plugin.
Das Admin-Panel – optional, aber komfortabel
Grav funktioniert vollständig ohne Web-Interface. Wer Markdown-Dateien direkt bearbeitet, braucht das Admin-Plugin nicht. Für alle anderen – und das ist die große Mehrheit – bietet das Admin-Plugin eine vollwertige Backend-Oberfläche:
- Dashboard mit System-Übersicht und letzten Aktivitäten
- Seiten-Editor mit Live-Vorschau und Markdown-Unterstützung
- Plugin-Manager zum Suchen, Installieren, Konfigurieren
- Theme-Manager analog dazu
- Konfigurationsoberfläche für alle System- und Plugin-Einstellungen
- Benutzerverwaltung mit Rollen und Berechtigungen
- Backup und Update direkt im Browser
Das Admin-Panel ist selbst ein Plugin – wer es nicht braucht, installiert es nicht. Das hält den Core schlank.
Themes – Aussehen ist konfigurierbar
Wie Themes funktionieren
Ein Grav-Theme besteht aus:
- Twig-Templates (
.html.twig) für die HTML-Struktur - SCSS/CSS für das Styling
- JavaScript für Interaktivität
- einer
blueprints.yamlzur Definition von Konfigurationsoptionen - einer
theme.yamlmit Metadaten
Twig ist eine leistungsfähige, übersichtliche Template-Sprache. Wer schon einmal mit Jinja2, Django-Templates oder Blade gearbeitet hat, lernt Twig in einer Stunde.
{% extends 'partials/base.html.twig' %}
{% block content %}
<h1>{{ page.title }}</h1>
<div class="content">
{{ page.content|raw }}
</div>
{% if page.collection %}
{% for child in page.collection %}
<article>
<h2><a href="{{ child.url }}">{{ child.title }}</a></h2>
<p>{{ child.summary }}</p>
</article>
{% endfor %}
{% endif %}
{% endblock %}
Verfügbare Themes
Das Grav Theme Repository bietet über 100 fertige Themes, darunter:
- Quark – das Standard-Theme, modern und clean
- Antimatter – klassisch, blogfokussiert
- Deliver – Business/Portfolio
- Minisite – minimalistisch, One-Pager
- Learn2 – Dokumentations-Theme (ähnlich ReadTheDocs)
- Agency – einseitiges Business-Theme
- Haywire – leichtgewichtig, semantisch korrekt
Viele Themes sind Starter-Themes, die man als Ausgangspunkt nimmt und nach eigenen Vorstellungen anpasst. quark bietet sich als Basis an.
Eigene Themes entwickeln
Ein eigenes Theme lässt sich in wenigen Minuten aufsetzen:
php bin/plugin devtools new-theme
Das Devtools-Plugin generiert die Grundstruktur. Dann werden eigene Twig-Templates, SCSS und Assets hinzugefügt. Grav kompiliert SCSS automatisch (wenn entsprechendes Plugin installiert), optimiert Assets und versioniert sie per Cache-Busting.
Plugins – der Weg zur Erweiterung
Das Plugin-Ökosystem
Das Grav Plugin Repository bietet über 400 Plugins. Sie werden entweder über das Admin-Panel oder per CLI installiert:
bin/gpm install sitemap
bin/gpm install seo
bin/gpm install form
Unverzichtbare Plugins
Inhalt und Navigation
| Plugin | Funktion |
|---|---|
breadcrumbs |
Automatische Brotkrumen-Navigation |
pagination |
Seitenweise Darstellung von Blog-Listen |
taxonomylist |
Tag- und Kategorien-Wolken |
relatedpages |
Verwandte Artikel |
anchors |
Anker-Links für Überschriften |
toc |
Automatisches Inhaltsverzeichnis |
SEO und Performance
| Plugin | Funktion |
|---|---|
seo |
Meta-Tags, Open Graph, Twitter Cards |
sitemap |
XML-Sitemap automatisch generiert |
robotstxt |
robots.txt konfigurierbar |
minify-html |
HTML-Ausgabe komprimiert |
imgcaptions |
Automatische Bildunterschriften |
Formulare und Interaktion
| Plugin | Funktion |
|---|---|
form |
Mächtiger Formular-Builder |
email |
E-Mail-Versand aus Formularen |
recaptcha-contact-form |
Spam-Schutz für Kontaktformulare |
comments |
Kommentarfunktion (flach oder verschachtelt) |
guestbook |
Gästebuch-Funktion |
Entwicklung und Debugging
| Plugin | Funktion |
|---|---|
admin |
Web-Backend (praktisch unverzichtbar) |
debugbar |
PHP-Debugbar im Browser |
devtools |
Theme- und Plugin-Gerüst erstellen |
git-sync |
Automatische Git-Synchronisation |
Medien und Darstellung
| Plugin | Funktion |
|---|---|
featherlight |
Lightbox für Bilder |
youtube |
YouTube-Einbettung via Shortcode |
vimeo |
Vimeo-Einbettung |
prism-highlight |
Code-Syntax-Highlighting |
shortcode-core |
Shortcode-System |
Suche
| Plugin | Funktion |
|---|---|
simplesearch |
Einfache clientseitige Suche |
tntsearch |
Volltext-Suche (serverseitig, kein Index-Server nötig) |
algolia-pro-search |
Algolia-Integration |
Plugins selbst entwickeln
Ein Plugin ist im Kern eine PHP-Klasse, die auf Grav-Events reagiert:
class MeinPlugin extends Plugin
{
public static function getSubscribedEvents(): array
{
return [
'onPageInitialized' => ['onPageInitialized', 0],
];
}
public function onPageInitialized(Event $event): void
{
$page = $this->grav['page'];
// Seite manipulieren, Daten hinzufügen etc.
}
}
Die Event-Liste ist umfangreich: Seitenaufbau, Template-Rendering, Asset-Verarbeitung, Cache-Handling – an praktisch jedem Punkt lässt sich einhaken. Die Dokumentation ist gut, die Community hilfsbereit.
Skeletons – fertige Projektvorlagen
Skeletons sind vollständige Grav-Installationen mit vorinstalliertem Theme, Plugins und Beispielinhalten. Sie sind der schnellste Weg, ein Projekt aufzusetzen, das einem bestimmten Anwendungsfall entspricht.
Beispiele:
| Skeleton | Zweck |
|---|---|
blog |
Klassischer Blog mit Quark-Theme |
one-page-site |
One-Pager für einfache Präsenz |
agency |
Agentur-/Portfolio-Site |
learn2-with-git-sync |
Dokumentations-Site mit Git-Anbindung |
deliver |
Business-Präsenz |
multilang-site |
Mehrsprachige Site |
photographer |
Fotografie-Portfolio |
workshop |
Workshop-/Kurs-Website |
Ein Skeleton installieren:
bin/grav install https://github.com/getgrav/grav-skeleton-blog/archive/develop.zip
Oder einfach herunterladen, entpacken, fertig. Der Einstieg dauert Minuten, nicht Stunden.
Caching und Performance
Grav ohne Cache liefert Seiten in der Regel in unter 50ms. Mit Cache – der standardmäßig aktiviert ist – liegt die Auslieferung im einstelligen Millisekunden-Bereich.
Caching-Mechanismen
Grav nutzt mehrere Cache-Ebenen:
- Doctrine Cache: Kompilierte Seitenstruktur und Konfiguration
- Twig Cache: Kompilierte Templates
- Asset Cache: Komprimierte und zusammengeführte CSS/JS-Dateien
- Image Cache: Verarbeitete Bildversionen
Der Cache liegt unter cache/ und lässt sich per Knopfdruck oder CLI leeren:
bin/grav cache:clear
Statisches Caching
Für maximale Performance kann Grav vollständig statische HTML-Dateien ausgeben. Ein Reverse Proxy (nginx, Varnish) liefert diese Dateien dann direkt aus, ohne PHP auch nur zu starten. Besucherzahlen, die ein normales PHP-CMS in die Knie zwingen würden, sind dann kein Problem mehr.
Asset-Pipeline
Grav bündelt und minimiert CSS und JavaScript automatisch:
assets:
css_pipeline: true
js_pipeline: true
css_minify: true
js_minify: true
Eine Zeile YAML – und alle Assets werden zusammengeführt, minimiert und mit Cache-busting-Hashes versehen.
Konfiguration – YAML bis ins letzte Detail
Grav wird ausschließlich über YAML-Dateien konfiguriert. Das klingt nach trockenem Entwickler-Kram, ist in der Praxis aber elegant: Konfiguration ist versionierbar, diffbar, durch einfaches Kopieren übertragbar.
Systemkonfiguration
user/config/system.yaml:
home:
alias: /home
pages:
theme: quark
markdown:
extra: true
auto_line_breaks: true
cache:
enabled: true
lifetime: 604800
debugger:
enabled: false
languages:
supported:
- de
- en
default_lang: de
include_default_lang: false
Seitenkonfiguration
Konfiguration kann auf drei Ebenen greifen:
- System (
user/config/system.yaml) – global - Seite (Frontmatter der Markdown-Datei) – für eine einzelne Seite
- Ordner (
user/config/site.yaml,.orders-Dateien) – für eine Seitengruppe
Diese Kaskade erlaubt feingranulare Kontrolle ohne aufgeblähte Konfigurationsdialoge.
Mehrsprachigkeit
Grav bietet eingebaute Mehrsprachigkeitsunterstützung ohne Plugin-Overhead. Sprachvarianten einer Seite liegen als separate Markdown-Dateien im gleichen Ordner:
user/pages/02.about/
├── default.de.md
├── default.en.md
└── default.fr.md
Grav erkennt die Browsersprache, löst Sprachpräfixe in der URL auf (/de/about, /en/about) und stellt Template-Funktionen für Sprachumschalter bereit.
Übersetzungen für UI-Strings landen in Sprachdateien:
# user/languages/de.yaml
PLUGIN_BLOG:
READ_MORE: Weiterlesen
COMMENTS: Kommentare
Versionskontrolle und Git-Sync
Weil Inhalte einfache Textdateien sind, lässt sich ein Grav-Projekt vollständig mit Git verwalten. Das Git-Sync-Plugin automatisiert das:
- Bei jeder Änderung im Admin wird automatisch ein
git commitundgit pushausgeführt - Änderungen im Repository werden per Webhook automatisch eingespielt
- Mehrere Redakteure können über Git-Branches zusammenarbeiten
Das ermöglicht Continuous Deployment für Inhalte: Artikel im Git-Repository schreiben, pushen – Grav aktualisiert sich automatisch.
Benutzer und Berechtigungen
Grav speichert Benutzer als YAML-Dateien unter user/accounts/. Kein Benutzertabellen-Chaos:
# user/accounts/horst.yaml
email: horst@example.com
fullname: Horst Mustermann
title: Chefredakteur
access:
admin:
login: true
super: false
site:
login: true
Das Berechtigungssystem (ACL) ist granular: Welcher Benutzer darf welche Seiten bearbeiten, welche Plugins konfigurieren, welche Bereiche des Admins aufrufen?
Für Mehrbenutzerbetrieb mit komplexen Rechte-Anforderungen gibt es das Login Pro Plugin (kostenpflichtig, aber erschwinglich), das Benutzergruppen, Frontend-Login und Inhaltsschutz bietet.
Formulare
Das Form-Plugin ist eine der stärksten Komponenten von Grav. Formulare werden vollständig in YAML definiert:
form:
name: kontakt
fields:
- name: name
label: Ihr Name
type: text
validate:
required: true
- name: email
label: E-Mail-Adresse
type: email
validate:
required: true
- name: nachricht
label: Ihre Nachricht
type: textarea
rows: 5
buttons:
- type: submit
value: Absenden
process:
- email:
to: kontakt@example.com
from: '{{ form.value.email }}'
subject: 'Neue Anfrage: {{ form.value.name }}'
- save:
fileprefix: kontakt-
dateformat: Ymd-His
extension: txt
body: "{{ form.value|yaml }}"
- message: Vielen Dank! Ihre Nachricht wurde gesendet.
- redirect: /danke
Kein PHP-Code, kein Plugin-Flickwerk – ein einziger YAML-Block erzeugt ein vollständiges Formular mit Validierung, E-Mail-Versand, Datenspeicherung und Weiterleitung.
Einsatzmöglichkeiten
Grav ist kein Nischen-Werkzeug. Es eignet sich für ein breites Spektrum:
Blog und persönliche Website
Der klassische Anwendungsfall. Grav bietet alles, was ein Blog braucht: Beiträge, Kategorien, Tags, RSS-Feed, Paginierung, Suche. Die Schreiberfahrung im Admin ist komfortabel, mit Markdown-Editor und Live-Vorschau.
Unternehmenswebsite
Portfolio, Produktpräsentation, Landing Pages – Grav liefert die Struktur, ein passendes Skeleton oder Theme die Optik. Updates der Inhalte sind einfach, keine Entwickler-Einbindung nötig.
Dokumentationssysteme
Das Learn2-Theme und verwandte Skeletons sind explizit für technische Dokumentation optimiert: Seitennavigation, Suchfunktion, Code-Highlighting, versionierbar über Git. Read-the-Docs-Feeling, selbst gehostet.
Mehrsprachige Websites
Eingebaut, ohne Dritt-Plugin. Für Unternehmen, die in mehreren Märkten präsent sind, ist das ein erheblicher Vorteil gegenüber WordPress, wo Mehrsprachigkeit immer Plugin-Abhängigkeit bedeutet.
Intranet und Wissensdatenbanken
Grav mit Login-Schutz, internen Benutzerkonten und feingranularen Berechtigungen eignet sich für geschlossene Wissensdatenbanken. Kein Cloud-Dienst, keine Datenschutz-Grauzone – alles auf eigenem Server.
Entwickler-Portfolio und Open Source Projekte
Versionskontrolle, Git-Sync, statisches Caching – Grav passt ideal in Entwickler-Workflows. Die Dokumentation eines Open-Source-Projekts lässt sich direkt aus dem Code-Repository befüllen.
E-Learning und Kursinhalte
Das Course Hub-Skeleton ist speziell für Bildungsinhalte konzipiert, mit Modulstruktur, Lernzielen und Fortschrittsverfolgung.
Statische Site-Generierung
Für maximale Sicherheit und Performance lässt sich Grav in Kombination mit einem Headless-Setup oder dem Static-Site-Generator-Modus nutzen. Das Ergebnis: eine Sammlung statischer HTML-Dateien, die ohne Server-Overhead ausgeliefert werden können.
Für wen ist Grav geeignet?
Definitiv geeignet für...
Entwickler und Techniker, die Kontrolle schätzen. Wer gerne mit SSH arbeitet, Konfigurationsdateien bearbeitet und Versionskontrolle nutzt, wird Grav lieben. Es stellt sich nicht in den Weg.
Blogger und Autoren, die Markdown beherrschen. Wer ohnehin in Markdown schreibt, gewinnt mit Grav gegenüber WordPress: keine WYSIWYG-Überraschungen, kein Block-Editor-Chaos, saubere Textdateien.
Datenschutzbewusste und Selbsthoster. Keine Clouddienste, keine externen Datenbankserver, kein Tracking-Overhead. Grav läuft auf dem eigenen Server, Punkt.
Kleine Teams mit klarer Struktur. Mehrere Redakteure, verschiedene Rechte, Git als Zusammenarbeitswerkzeug – das funktioniert hervorragend.
Entwickler, die Themes und Plugins bauen. Die API ist sauber, die Dokumentation vollständig, die Community freundlich. Ein Grav-Plugin zu schreiben, ist kein Hexenwerk.
Websites mit vorhersehbarem Inhalt. Blogs, Dokumentationen, Portfolios, Unternehmenswebsites – überall dort, wo die Inhaltsstruktur klar ist und nicht täglich neu erfunden wird.
Für wen ist Grav weniger geeignet?
Mit Vorsicht zu genießen für...
Nicht-technische Nutzer ohne Backup-Plan. Grav hat einen Admin, der komfortabel ist. Aber wenn etwas schiefläuft – eine defekte Konfigurationsdatei, ein fehlerhaftes Plugin-Update – muss man wissen, wo man sucht. Eine WordPress-Lösung mit Managed Hosting ist für absolut nicht-technische Nutzer ehrlichkeitshalber einfacher.
Große Teams mit komplexen Workflows. Mehrere Autoren mit Entwurfs-/Review-/Veröffentlichungs-Workflows, Kommentar-Moderation, bezahltem Zugang, Newsletter-Integration – für solche Anforderungen ist ein vollwertiges CMS wie WordPress oder ein Headless-System besser ausgestattet.
E-Commerce. Grav ist kein Shop-System. Es gibt Ansätze, Produkte abzubilden, aber wer einen Online-Shop betreiben will, ist mit WooCommerce oder Shopify besser bedient.
Websites mit sehr dynamischen Inhalten. Echtzeit-Kommentare, Benutzerprofil-Feeds, Live-Datenanbindung – solche Anforderungen sprengen das Flat-File-Modell. Hier braucht man eine Datenbank.
Sehr große Content-Bibliotheken. Mit einigen tausend Seiten beginnt das Flat-File-Modell an Grenzen zu stoßen. Das Laden der Seitenstruktur aus dem Dateisystem ist langsamer als eine optimierte Datenbankabfrage. Zehn- oder hunderttausende Artikel gehören in ein datenbankgestütztes System.
Grav im Vergleich
Grav vs. WordPress
| Aspekt | Grav | WordPress |
|---|---|---|
| Datenbank | Keine | MySQL erforderlich |
| Installation | 2 Minuten | 5–10 Minuten |
| Updates | Einfach, risikoarm | Oft problematisch |
| Sicherheitsangriffsfläche | Gering | Groß (Plugins, DB) |
| Theme-Ökosystem | ~100 | ~10.000+ |
| Plugin-Ökosystem | ~400 | ~60.000+ |
| Lernkurve | Moderat | Flach (für Basis) |
| Performance | Sehr gut | Variabel |
| Für Entwickler | Sehr gut | Mittel |
Grav vs. Hugo / Jekyll (statische Generatoren)
| Aspekt | Grav | Hugo / Jekyll |
|---|---|---|
| Dynamische Inhalte | Ja (PHP) | Nein |
| Admin-Interface | Ja (Plugin) | Nein (i.d.R.) |
| Formulare | Ja | Drittdienst nötig |
| Build-Schritt nötig | Nein | Ja |
| Hosting-Anforderungen | PHP-Server | Beliebig (statisch) |
| Performance | Sehr gut | Optimal |
Grav vs. Statamic
Beide sind moderne PHP-Flat-File-CMS. Statamic ist mächtiger, ausgereifter für Enterprise-Einsatz und kostenpflichtig (ab 259 USD für Einzelseiten). Grav ist vollständig Open Source und kostenlos.
Sicherheit
Grav hat naturgemäß eine kleinere Angriffsfläche als datenbankbasierte CMS:
- Kein SQL-Injection-Risiko (keine SQL-Datenbank)
- Keine Datenbankserver-Konfiguration, die falsch gesetzt werden könnte
- Inhalte sind einfache Textdateien – kein ausführbarer Code in der Datenbank
Das Admin-Panel ist per Standard unter /admin erreichbar – das lässt sich ändern. Benutzerpasswörter werden mit bcrypt gehasht.
Zu den sicherheitsrelevanten Best Practices:
# Admin-Verzeichnis mit IP-Beschränkung in nginx
location /admin {
allow 192.168.1.0/24;
deny all;
}
Regelmäßige Updates sind wichtig – Grav und Plugins werden aktiv gepflegt, Sicherheitslücken werden zügig behoben.
Community und Support
- Offizielle Dokumentation: learn.getgrav.org – umfangreich und gut gepflegt
- Forum: discourse.getgrav.org – aktiv, hilfreich
- GitHub: Issues, Pull Requests, Diskussionen
- Discord: Echtzeit-Austausch mit Entwicklern und Nutzern
Die Community ist kleiner als die von WordPress, aber konzentrierter. Fragen werden oft von Kern-Entwicklern beantwortet.
Fazit: Wann lohnt sich Grav?
Grav ist kein Allheilmittel und will es auch nicht sein. Es ist ein präzises Werkzeug für bestimmte Aufgaben – und diese Aufgaben löst es ausgezeichnet.
Grav lohnt sich, wenn:
- man die Kontrolle über seine Infrastruktur schätzt
- Portabilität und Versionierbarkeit von Inhalten wichtig sind
- Performance ohne aufwendiges Tuning gefragt ist
- ein kleines, wartungsarmes System gesucht wird
- man Markdown schreibt und das Ergebnis direkt auf dem Server landen soll
Grav ist der richtige Beweis dafür, dass ein CMS keine Datenbank braucht, um leistungsfähig zu sein.
Die Entscheidung für Grav ist keine Kompromissentscheidung. Sie ist die bewusste Wahl für ein System, das tut, was man von ihm erwartet – und sonst nichts im Weg steht.
Weitere Informationen: getgrav.org · Dokumentation: learn.getgrav.org · GitHub: github.com/getgrav/grav