15k stars · LGPL-2.1 · v6.8 (2026-05-05)
Grammarly you can run yourself — and one of the very few checkers that takes Russian as seriously as English.
▶Repo detailsthe review · specs · pros & cons · install
What it is
An open-source spelling, grammar and style checker covering more than 25 languages, shipped as a self-hostable HTTP server with a simple JSON API. You post text at it; it returns a list of issues with suggested replacements, a rule identifier, and the character offsets to highlight.
Why it matters
Grasppy's pitch is comprehension. If the page making that pitch has slightly wrong prepositions, a buyer's confidence drops before they reach the demo — and they will never tell you why they left. You are writing marketing copy in two languages, and the Russian half is where a machine check earns most: LanguageTool's Russian rule set is one of the strongest in open source, not a token afterthought bolted onto an English engine. Running it yourself also means your unreleased landing copy, pricing lines and video scripts never get pasted into a third-party SaaS. Wire it into the Astro build (Ed.3 #4) and every page ships checked, in both languages, without you remembering to check.
- Russian and English both treated as first-class, which almost nothing else in this ledger can claim.
- Self-hosted HTTP API: FastAPI, the Astro build, and Claude Code can all call the same instance.
- Browser extensions use the same server, so YouTube descriptions and email drafts get checked too.
- It is a JVM server, and with n-gram data it wants roughly 1–2 GB of RAM — a real cost on a Hetzner box already carrying two products. Check with Beszel (Ed.5 #8) first.
- The free rule set is deliberately weaker than the vendor's paid cloud tier: strong on grammar and mechanics, thinner on rewriting and nuance.
- LGPL-2.1 — fine to run as a separate service, but do not link it into a distributed binary without reading the licence carefully.
Docker container on the VPS listening on an internal port; a thin FastAPI route proxies it for the app; a Node script in the Astro build fails the build on new errors.