The goal of this project is to develop a new language server for Julia, currently called "JETLS". JETLS aims to enhance developer productivity by providing advanced static analysis and seamless integration with the Julia runtime. By leveraging tooling technologies like JET.jl, JuliaSyntax.jl and JuliaLowering.jl, JETLS aims to offer enhanced language features such as type-sensitive diagnostic, macro-aware go-to definition and such.
Editor clients for JETLS generally do not bundle the JETLS server itself.
You need to install the jetls executable separately before using any editor integration.
JETLS requires Julia v"1.12" or higher,
so ensure that the Julia version of the julia command you use is v1.12 or higher.
All editor integrations require the jetls executable app,
which is the main entry point for running JETLS.
Install it with:
julia -e 'using Pkg; Pkg.Apps.add(; url="https://github.com/aviatesk/JETLS.jl", rev="release")'This will install the jetls executable (jetls.bat on Windows) to ~/.julia/bin/.
Make sure ~/.julia/bin is available on the PATH environment so the executable is accessible.
You can verify the installation by running:
jetls --helpIf this displays the help message, the installation was successful and ~/.julia/bin
is properly added to your PATH.
!!! info "Updating JETLS"
To update JETLS to the latest version, re-run the installation command:
bash julia -e 'using Pkg; Pkg.Apps.add(; url="https://github.com/aviatesk/JETLS.jl", rev="release")'
To pin a specific version instead, use the release tag `rev="YYYY-MM-DD"`:
```bash
julia -e 'using Pkg; Pkg.Apps.add(; url="https://github.com/aviatesk/JETLS.jl", rev="2025-11-25")'
```
After installing the jetls executable, set up your editor to use it.
jetls-client
is a VSCode client extension for JETLS.1
Install the jetls-client extension from the VSCode Extensions marketplace
(search for "JETLS Client" from the extensions view), then open any Julia file.
The extension will automatically use the jetls executable from your PATH.
For advanced launching configurations and JETLS behavior settings, see the jetls-client README.
Minimal Emacs (eglot client) setup:
(add-to-list 'eglot-server-programs
'(((julia-mode :language-id "julia")
(julia-ts-mode :language-id "julia"))
"jetls"
"--threads=auto"
"--"
"--socket"
:autoport))Minimal Neovim setup (requires Neovim v0.11):
vim.lsp.config("jetls", {
cmd = {
"jetls",
"--threads=auto",
"--",
},
filetypes = {"julia"},
})
vim.lsp.enable("jetls")Minimal Sublime setup using the
Sublime-LSP plugin and modifying the
LSP.sublime-settings file:
{
"clients": {
"jetls": {
"enabled": true,
"command": ["jetls", "--threads=auto", "--", "--socket=${port}"],
"selector": "source.julia",
"tcp_port": 0
}
}
}Minimal Vim setup using the Vim9 LSP plugin
call LspAddServer([#{name: 'JETLS.jl',
\ filetype: 'julia',
\ path: 'jetls',
\ args: [
\ '--threads=auto',
\ '--'
\ ]
\ }])Zed extension for Julia/JETLS is available:
See aviatesk/zed-julia#avi/JETLS
for the detailed installation steps.
Minimal Helix setup:
languages.toml
[[language]]
name = "julia"
language-servers = [ "jetls" ]
[language-server]
jetls = { command = "jetls", args = ["--threads=auto", "--"] }