Eta template language support for the Zed editor.
Provides syntax highlighting and bracket matching for .eta files, with JavaScript injection inside <% %> template tags so the embedded code gets full JS highlighting (keywords, strings, function calls — the works) instead of looking like plain text.
Backed by the upstream tree-sitter-embedded-template grammar, which explicitly supports Eta alongside ERB and EJS.
zed: extensions → search "Eta" → install.
git clone https://github.com/guilbep/zed-etaThen in Zed: zed: install dev extension → pick the cloned directory.
- Syntax highlighting for Eta tags:
<%,<%=,<%~,<%#,<%_,<%-, and their closing forms. - HTML highlighting in template content (the markup outside the tags).
- JavaScript highlighting inside template tags — for-loops, ternaries, function calls, all of it.
- Bracket matching for
<% %>, plus standard(),[],{}, quotes.
- A language server. There is no Eta LSP. Inside the embedded JS blocks, you'll get tree-sitter-based highlighting but not full JS LSP features (completion, go-to-definition, etc.) — those would require Zed to understand how to splice the JS context together across tags, which it currently doesn't.
The grammar is identical (both use tree-sitter-embedded-template), and the existing EJS extension actually already lists .eta in its path_suffixes. So if all you need is highlighting, that works.
This extension exists because:
- Discoverability — Eta users shouldn't have to install something called "EJS" to get support.
- Status bar identity — your
.etafiles surface as "Eta", not "EJS". - One-line README for downstream projects — "install the Eta extension" is a clearer ask than "edit your
settings.jsonand add\"file_types\": { \"EJS\": [\"eta\"] }".
If you'd rather skip this extension entirely, the alias approach works too:
// ~/.config/zed/settings.json
{ "file_types": { "EJS": ["eta"] } }- Eta — the templating engine itself.
- vite-ssr-i18n-basic — Vite plugin for multi-locale static sites, uses Eta.
MIT