LTeX LS Plus (LanguageTool)
LTeX LS Plus is a grammar and spelling checker for LaTeX, Markdown, BibTeX, and other prose-heavy formats. It is based on LanguageTool and works well for academic writing.
TeXlyre connects to LTeX LS Plus via WebSocket using lsp-ws-proxy.
1. Install the server
Download and extract LTeX LS Plus from the releases page.
Example for Linux x64:
VERSION="18.7.0-alpha.nightly.2026-04-25"
ARCHIVE="ltex-ls-plus-${VERSION}-linux-x64.tar.gz"
curl -L -o "$ARCHIVE" \
"https://github.com/ltex-plus/ltex-ls-plus/releases/download/nightly/$ARCHIVE"
tar -xzf "$ARCHIVE"
This creates a directory such as:
ltex-ls-plus-18.7.0-alpha.nightly.2026-04-25
LTeX LS Plus requires Java. If Java is not already installed, install a recent JRE, such as Temurin JRE 21.
2. Install the WebSocket proxy
TeXlyre requires a WebSocket transport. lsp-ws-proxy bridges WebSocket to stdio.
Install lsp-ws-proxy:
cargo install lsp-ws-proxy --locked
3. Run the server
Start the proxy and launch LTeX LS Plus over stdio:
lsp-ws-proxy -l 127.0.0.1:7020 -- ./ltex-ls-plus-18.7.0-alpha.nightly.2026-04-25/bin/ltex-ls-plus
If you use a manually downloaded JRE, set JAVA_HOME first:
export JAVA_HOME="/path/to/jre"
lsp-ws-proxy -l 127.0.0.1:7020 -- ./ltex-ls-plus-18.7.0-alpha.nightly.2026-04-25/bin/ltex-ls-plus
- The proxy listens on
ws://localhost:7020 - Keep this process running while using TeXlyre
4. TeXlyre configuration
You can use more than one LSP at the same time. To do this, simply add another config block below in the same list.
Keep everything inside the square brackets [ ] and separate each { }
block with a comma.
Paste the following JSON into Settings ⚙️ → LSP → Generic LSP → LSP Configurations.
[
{
"id": "ltex-ls",
"name": "LTeX LS Plus",
"enabled": true,
"fileExtensions": ["tex", "latex", "typ", "typst", "bib", "md", "markdown"],
"languageIdMap": {
"tex": "latex",
"latex": "latex",
"typ": "typst",
"typst": "typst",
"bib": "bibtex",
"md": "markdown",
"markdown": "markdown"
},
"transportConfig": {
"type": "websocket",
"url": "ws://localhost:7020",
"contentLength": false
},
"clientConfig": "{\"rootUri\":\"file:///\",\"workspaceFolders\":[],\"capabilities\":{\"workspace\":{\"configuration\":true},\"window\":{\"workDoneProgress\":false}},\"initializationOptions\":{\"ltex\":{\"language\":\"en-US\",\"additionalRules\":{\"motherTongue\":\"\"},\"dictionary\":{},\"disabledRules\":{},\"enabledRules\":{}}}}"
}
]
Debugging
To check that the server starts correctly, run it directly first:
./ltex-ls-plus-18.7.0-alpha.nightly.2026-04-25/bin/ltex-ls-plus
To confirm the WebSocket proxy is listening:
lsp-ws-proxy -l 127.0.0.1:7020 -- ./ltex-ls-plus-18.7.0-alpha.nightly.2026-04-25/bin/ltex-ls-plus
Common things to check:
- Make sure the path to
ltex-ls-plusis correct. - Make sure Java is installed and available on
PATH, or setJAVA_HOME. - If you change the proxy port, update
transportConfig.url. - If diagnostics do not appear, restart both the proxy and TeXlyre.