Editors
Helix
Helix gives JavaScript and JSX files typescript-language-server and
nothing else, and it reads a Flow file as TypeScript. A project's own
.helix/languages.toml replaces that list with uf for that project
only.
What you will be able to do: edit a uf project in Helix with uf's diagnostics, hover, definitions, completion, code actions and format on write.
What you need first: uf installed, and a project with a
uf.config.js.
1. Commit .helix/languages.toml
uf editor setup helix writes it. If the project already has a
.helix/languages.toml that configures JavaScript, it prints the lines to add
instead of writing. Or copy editors/helix/languages.toml
into the project. Its substance:
[language-server.uf]
command = "uf"
args = ["lsp"]
required-root-patterns = ["uf.config.js"]
[[language]]
name = "javascript"
roots = ["uf.config.js"]
language-servers = ["uf"]
auto-format = true
[[language]]
name = "jsx"
roots = ["uf.config.js"]
language-servers = ["uf"]
auto-format = true
language-serversreplaces the default list. Helix merges a project'slanguages.tomlinto its own by language name, and a list inside it replaces the default list.["uf"]therefore dropstypescript-language-serverfor this project and no other. Bothjavascript(.js,.mjs,.cjs) andjsxneed the line.auto-formatformats on write through the server. There is noformatterline:uf fmtwrites files and does not read a buffer on stdin, so the server is what formats the buffer.required-root-patternsstarts uf only where the workspace root has auf.config.js. In the project's own file that is always true. It matters if the file is merged into~/.config/helix/languages.toml, which is not recommended, because therelanguage-serverswould replace the JavaScript servers of every project.
Start hx from the project root: the server reads uf.config.js from the
directory it starts in.
2. Trust the project, on newer Helix
Helix 25.07.1 reads .helix/languages.toml without asking. Helix's master
branch, after 25.07, reads it and starts the servers it names only once you run
:workspace-trust in the project. It asks again after .helix/ changes.
Check that it worked
hx --health javascript lists uf as the language server. In a Flow file,
Space + d lists only uf and flow diagnostics. Write the file, then run
uf fmt --check in a terminal: they agree when the server read the project's
uf.config.js. :lsp-restart after editing uf.config.js.
Checked against
The merge rules, required-root-patterns, the default servers and workspace
trust were read from Helix's languages.toml, helix-loader and the book in
September 2026. No Helix runs in CI.
Edit this pagedocs/app/guide/editors/helix/$page.mdx