LanguageTool ist eines der besten Open-Source-Tools zur Sprachprüfung – und für viele Nutzer die beste Alternative zu Grammarly. Es prüft Texte auf Rechtschreibfehler, Grammatikfehler, Kommafehler und Stilprobleme und lässt sich nahtlos in Browser (Chrome, Firefox), Thunderbird, LibreOffice, VS Code, Obsidian und viele weitere Anwendungen einbinden.
Ein besonderer Vorteil: LanguageTool unterstützt über 30 Sprachen und Dialekte – darunter Deutsch, Englisch, Spanisch, Französisch, Portugiesisch, Niederländisch und viele mehr. Damit ist es eines der umfangreichsten Sprachprüfungs-Tools überhaupt.
Das Ende des kostenlosen Angebots
Lange Zeit war LanguageTool kostenlos nutzbar. Seit Ende 2025 ist die Browser-Extension jedoch nur noch im kostenpflichtigen Abo verfügbar – aktuell 59,89 €/Jahr. Für viele Nutzer ein Grund, sich nach Alternativen umzusehen.
Die gute Nachricht: Der Kern von LanguageTool ist Open Source. Du kannst es selbst auf deinem Server hosten und die Grammatik- und Rechtschreibprüfung weiterhin kostenlos nutzen – vollständig datenschutzkonform, da kein Text an externe Server gesendet wird.
Kleiner Wermutstropfen: Die KI-basierten Features (automatisches Umformulieren von Sätzen, erweiterte Stilvorschläge) sind ausschließlich in der Cloud-Version verfügbar. KI würde Sätze nicht nur korrigieren, sondern aktiv verbessern und umschreiben – das bleibt dem Abo vorbehalten. Für den Standardgebrauch – also Rechtschreibung, Grammatik und Kommas – leistet die self-hosted Version aber sehr gute Dienste.
Anforderungen und Speicherplanung
LanguageTool ist speicherhungrig. Für eine stabile Installation benötigst du:
- Mindestens 1,5 GB RAM (mit Optimierungen)
- 4 GB RAM (empfohlen für stabile Performance)
- Docker und Docker Compose auf deinem Server
Wichtig: Swap-Dateien sind keine Lösung – sie verlangsamen deinen Server massiv und können ihn zum Einfrieren bringen. Stattdessen solltest du LanguageTool mit Docker-Memory-Limits konfigurieren.
Schritt 1: Installation – Welcher Weg ist richtig?
Die beste Grundlage ist das erikvl87/docker-languagetool Image auf GitHub.
Option A: Docker Hub Image (EMPFOHLEN) ✓
docker pull erikvl87/languagetool
Das fertige Image wird direkt von Docker Hub heruntergeladen. Kein lokaler Build nötig, kein git clone.
Option B: Git Clone + Local Build
git clone https://github.com/Erikvl87/docker-languagetool.git --config core.autocrlf=input cd docker-languagetool docker build -t languagetool .
Nutze diese Option nur, wenn du das Image selbst anpassen möchtest (z.B. Custom Plugins).
Schritt 2: Verzeichnisstruktur vorbereiten
Best Practice für Linux-Server ist /opt/docker/ – nicht /root/, das sollte für System-Einstellungen reserviert bleiben.
sudo mkdir -p /opt/docker/languagetool cd /opt/docker/languagetool mkdir -p ngrams sudo chown -R $USER:$USER /opt/docker/languagetool chmod 755 /opt/docker/languagetool
Schritt 3: docker-compose.yml erstellen
Erstelle die Datei /opt/docker/languagetool/docker-compose.yml:
version: "3"
services:
languagetool:
image: erikvl87/languagetool:latest
container_name: languagetool
restart: unless-stopped
ports:
- 8010:8010
environment:
- langtool_languageModel=/ngrams # N-Grams (optional aber empfohlen)
- Java_Xms=256m # Minimaler Java Heap
- Java_Xmx=1200m # Maximaler Java Heap (80% vom Container-Limit)
- langtool_maxCheckThreads=2 # Parallele Anfragen begrenzen (spart RAM)
- LOG_LEVEL=WARN # Weniger Logging = weniger Speicher
deploy:
resources:
limits:
memory: 1.5G # Container-Speicherlimit
# memswap NICHT setzen – verursacht Probleme!
volumes:
- ./ngrams:/ngrams:ro
# - /path/to/logback.xml:/LanguageTool/logback.xml:ro # Nur für Debugging
Was bedeuten diese Einstellungen?
- Java_Xms=256m: Java startet mit 256 MB Heap – spart RAM beim Hochfahren
- Java_Xmx=1200m: Java darf maximal 1,2 GB Heap nutzen. Sollte ca. 80% des Container-Limits sein – der Rest geht für Libraries und Betriebssystem-Overhead drauf
- memory: 1.5G: Wird dieser Wert überschritten, wird der Container beendet – das ist gewollt! So bleibt der Rest des Servers stabil
- langtool_maxCheckThreads=2: Jeder Thread verbraucht Speicher – weniger Threads = weniger RAM
- LOG_LEVEL=WARN: Reduziert Logs auf Warnungen und Fehler
- restart: unless-stopped: Startet den Container automatisch neu nach einem Absturz
Schritt 4: N-Gram Datasets installieren
N-Grams analysieren Wortfolgen statistisch und erkennen Fehler, die reine Regelprüfungen übersehen – z.B. „das“ vs. „dass“ im Kontext. Sie nutzen Daten aus riesigen Textkorpora (z.B. Google Books) und verbessern die Erkennungsgenauigkeit spürbar.
cd /opt/docker/languagetool # N-Grams für Deutsch herunterladen (ca. 1 GB) wget https://languagetool.org/download/ngram-data/de_DE-1.0.zip unzip de_DE-1.0.zip -d ngrams/ rm de_DE-1.0.zip chmod -R 755 ngrams/
Für weitere Sprachen einfach ersetzen: en_US-1.0.zip, fr_FR-1.0.zip, es_ES-1.0.zip, pt_PT-1.0.zip, nl_NL-1.0.zip usw. Alle Downloads unter languagetool.org/download/ngram-data.
Hinweis: N-Grams sind optional – ohne sie verbraucht LanguageTool weniger Speicher, aber die Qualität der Erkennung sinkt etwas.
Schritt 5: FastText – automatische Spracherkennung
Das erikvl87 Image enthält FastText bereits eingebaut. FastText erkennt automatisch, in welcher Sprache ein Text geschrieben ist – besonders praktisch bei mehrsprachigen Texten oder wenn keine Sprache explizit angegeben wird. Das Modell (lid.176.bin, ca. 350 MB) wird beim ersten Start automatisch heruntergeladen. Keine weitere Konfiguration nötig.
Schritt 6: Container starten und testen
# Container starten cd /opt/docker/languagetool docker-compose up -d # Status prüfen docker ps | grep languagetool # Logs beim ersten Start beobachten (dauert etwas länger) docker-compose logs -f languagetool # Installation testen curl "http://localhost:8010/v2/check?language=de&text=Das%20ist%20ein%20test"
Speicherprobleme beheben
Viele Nutzer merken nach der Installation, dass die Swap-Auslastung stark steigt und der Server langsam oder instabil wird. Das passiert, wenn LanguageTool mehr RAM verbraucht als verfügbar ist und Linux anfängt, Speicher auf die Festplatte auszulagern.
Mit den Memory-Limits oben wird LanguageTool kontrolliert beendet, bevor es den ganzen Server blockiert. Mit restart: unless-stopped startet es danach automatisch wieder.
# Speichernutzung live überwachen docker stats languagetool # Logs auf Fehler prüfen docker logs languagetool --tail 100 # Container manuell neustarten docker-compose restart languagetool
Tipp: Den Parameter memswap in der docker-compose.yml nicht setzen – das verursacht in Portainer einen Error 500 beim Speichern der Konfiguration.
Reverse Proxy mit Nginx
server {
listen 80;
server_name lt.example.com;
location / {
proxy_pass http://localhost:8010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
}
}
Integration in Node.js
const response = await fetch('http://localhost:8010/v2/check', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
language: 'de',
text: 'Dein Text hier'
})
});
const result = await response.json();
console.log(result.matches); // Gefundene Fehler
Updates einspielen
cd /opt/docker/languagetool docker-compose pull docker-compose up -d