Amid the seemingly never-ending expanse of the self-hosting ecosystem, you’ll find a plethora of note-takers, private collaboration platforms, to-do list builders, office suites, and other productivity-enhancing apps. As someone who creates content for a living, I rely on several writing and image editing utilities for my daily tasks – many of which reside inside my local server.

However, Grammarly was one of the few third-party services I’d use in my workflows, as it helped me fix wrong spellings, punctuation errors, and grammar mistakes. The key word being “was,” as the recent changes made to the platform did nothing but frustrate me. Luckily for me, XDA’s technical editor, Adam Conway, directed me to LanguageTool, a grammar checker that not only runs as a self-hosted platform, but also supports my favorite office suite.

LanguageTool beats Grammarly on several fronts

It doesn’t shove AI “features” down my throat

I’ve never been a fan of software developers and hardware manufacturers slapping useless AI tools onto their creations. So, you can imagine my reaction when Grammarly started aggressively adding new AI features to its platform. I typically relied on the application to check my spelling, fix random errors in my drafts, and laugh at the corrections suggested for mistakenly flagged terminal commands. Not for some clanker to generate new content for my guides or offer tone corrections when I recount my home lab misadventures.

Meanwhile, LanguageTool lets me check for typos and grammatical mistakes without the constant AI features flagging every part of the document and demanding payment for the suggestions. Sure, LanguageTool paywalls many facilities – including advanced semantic and punctuation correction – like Grammarly, but at least I don’t have to deal with an AI chat window taking up half of my workspace. Plus, LanguageTool’s browser extension and app plugins have better UIs than the redesign Grammarly underwent a few months ago.

It supports LibreOffice suite

Although I occasionally use online text editors to collaborate with my team, LibreOffice is my favorite office productivity suite. Between its FOSS nature and customizable nature, LibreOffice Writer has essentially replaced Microsoft Word for my writing needs. Unfortunately, Grammarly doesn’t support LibreOffice, even though it has extensions for browsers and online text editing platforms.

LanguageTool, on the other hand, natively supports LibreOffice thanks to a dedicated extension. Although it doesn’t have a convenient web platform like Grammarly, being able to scan my LibreOffice documents without constantly uploading them online makes LanguageTool worth setting up.

It’s fully private, too

While we’re on the subject of uploading private data to third-party servers, the lack of privacy on online platforms is one of the key reasons behind my transition to self-hosted utilities. Technically, LanguageTool has an online platform like Grammarly where you can quickly check text snippets with up to 2000 characters. But the only LanguageTool I’ve been referring to up until this point is the local (or rather, containerized) version of the tool.

By default, Grammarly uses your data to train its AI model, and while it does offer the option to disable this aspect, I’ve grown too tired of apps with an Adobe-esque approach to user privacy. As such, I’d rather not keep my private articles, including first drafts of unpublished content, on external servers. Meanwhile, the containerized version of LanguageTool runs locally on my hardware and remains connected to my browsers and LibreOffice instance, so I don’t have to worry about some random AI getting trained on my pieces and evolving into AI-yush.

Deploying LanguageTool involves a couple of extra steps

Plenty of ways to get the LanguageTool up and running

Unlike most home lab services I highlight in my articles, LanguageTool doesn’t really have a web interface where I can access its grammar analysis facilities. Instead, it’s meant to run as a server that connects to client applications – web browsers, text editors, and companion desktop apps.

If you’re a member of the Proxmox faction like me, you can use the script designed by our coding genius, Adam Conway, to quickly deploy a LanguageTool LXC. Once you’ve pulled the script using the git clone https://gist.github.com/9817edf5c8bba53ef27bb705ce1cd89f.git command on your PVE node’s Shell tab, you can navigate to its folder and run the chmod +x install-languagetool-lxc-proxmox-9.1.sh command to grant your user the privileges to run it. Then, you just have to execute ./install-languagetool-lxc-proxmox-9.1.sh and watch the script whip up a LanguageTool LXC into existence. If you want granular control, you can modify certain lines of code, such as ngrams alternatives on line 273 or the allocated RAM on line 206.

For folks who rely on Docker containers, you can use the docker-languagetool repository by developer meyayl. All you have to do is paste the following code into a docker-compose.yml file and run docker compose up -d (with sudo privileges if you haven’t enabled rootless mode).

---
services:
languagetool:
image: meyay/languagetool:latest
container_name: languagetool
restart: unless-stopped
read_only: true
tmpfs:
- /tmp:exec
cap_drop:
- ALL
cap_add:
- CAP_CHOWN
- CAP_DAC_OVERRIDE
- CAP_SETUID
- CAP_SETGID
security_opt:
- no-new-privileges
ports:
- 8081:8081
environment:
download_ngrams_for_langs: en
MAP_UID: 783
MAP_GID: 783
volumes:
- ./ngrams:/ngrams
- ./fasttext:/fasttext

Remember to follow the YAML indentation rules when copying this code.

Keep in mind that the ngrams package required for autocorrect provisions is pretty huge, so it might take a few minutes before the server is ready for action.

Integrating it with other apps is fairly straightforward

Once you’ve got the LanguageTool server running, you simply need to pair it with a client service that can make use of its grammar checking tools. Most browsers support the dedicated LanguageTool extension, which you can connect to the locally-hosted server by scrolling down to the server section and entering http://ip_address_of_server:8081/v2. The process is more-or-less the same for LibreOffice Writer, as you can just add this string under the Extensions tab. And with that, you can enjoy a private editing companion for your writing tasks.