Herb Language Server
Package: @herb-tools/language-server
Language Server Protocol integration for HTML-aware ERB parsing using the Herb Parser.

Installation
Visual Studio Code
Install the Herb LSP extension from the Visual Studio Marketplace.
Cursor (Open VSX Registry)
Install the Herb LSP extension from the Open VSX Registry.
Zed
The Herb Language Server is part of the official Ruby extension for Zed. Just install the Ruby extension in Zed and you should be good to go.
Read more in the documentation.
Neovim (using nvim-lspconfig)
After installing the Herb Language Server (see below), add herb_ls to your Neovim config (requires nvim 0.11+):
require('lspconfig')
vim.lsp.enable('herb_ls')Sublime Text (using Sublime LSP)
After installing the Herb Language Server (see below) and Sublime LSP, update the preferences for the LSP package:
// LSP.sublime-settings
{
"clients": {
"herb": {
"enabled": true,
"command": [
"herb-language-server",
"--stdio"
],
"selector": "text.html.ruby | text.html.rails",
"settings": {
"languageServerHerb.linter": {
"enabled": true,
"excludedRules": ["parser-no-errors"]
}
},
"initializationOptions": {
"enabledFeatures": {
"diagnostics": true,
},
"experimentalFeaturesEnabled": true
}
}
},
}Manual Installation
You can use the language server in any editor that supports the Language Server Protocol.
NPM (Global)
npm install -g @herb-tools/language-serverYarn (Global)
yarn global add @herb-tools/language-serverPreview Releases
Want to try unreleased features? Use pkg.pr.new to run the language server from any commit or PR:
npx https://pkg.pr.new/@herb-tools/language-server@{commit} --stdioReplace {commit} with a commit SHA (e.g., 0d2eabe) or branch name (e.g., main). Find available previews at pkg.pr.new/~/marcoroth/herb.
Run
herb-language-server --stdioUsage
Usage: herb-language-server [options]
Options:
--stdio use stdio
--node-ipc use node-ipc
--socket=<port> use socketNPX
Alternatively you can also run the language server directly with npx without installing anything:
npx @herb-tools/language-server --stdioConfiguration
The language server can be configured using a .herb-lsp/config.json file in your project root. This file is automatically created when the language server starts if it doesn't exist.
Formatter Configuration
You can configure formatting behavior by adding a formatter section to your config:
{
"version": "0.3.1",
"createdAt": "2025-06-29T00:00:00.000Z",
"updatedAt": "2025-06-29T00:00:00.000Z",
"options": {
"formatter": {
"enabled": true,
"indentWidth": 2,
"maxLineLength": 80
}
}
}formatter Options
enabled(boolean): Enable or disable formatting for this project. Defaults tofalse.indentWidth(number): Number of spaces for each indentation level. Defaults to2.maxLineLength(number): Maximum line length before wrapping. Defaults to80.
Note: VS Code users can also control formatting globally through the languageServerHerb.formatter.enabled setting in VS Code preferences. Formatting is currently in Beta and disabled by default.