jetls-client

A VSCode client extension for
JETLS.
JETLS is a new language server for Julia.
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.
[!note]
JETLS.jl is not integrated with the julia-vscode extension yet.
To use JETLS from VSCode, install this jetls-client extension.
While we generally recommend disabling julia-vscode when using jetls-client,
this is not required; you can use both julia-vscode and jetls-client
in the same VSCode session.
However, since the LSP features provided by JETLS.jl differ in both type and quality
from those provided by julia-vscode's language server backend
(LanguageServer.jl),
you may encounter confusing situations where, for example, completion candidates
are provided from different backends.
Requirements
Installation
[!warning]
The jetls-client extension does not bundle JETLS.jl itself. You need to
install the jetls executable separately before using the extension.
- Install the
jetls executable app,
which is the main entry point for running JETLS:
julia -e 'using Pkg; Pkg.Apps.add(; url="https://github.com/aviatesk/JETLS.jl", rev="release")'
This will install the jetls executable to ~/.julia/bin/.
- Make sure
~/.julia/bin is available on the PATH environment so the jetls executable is accessible.
You can verify the installation by running:
jetls --help
If this displays the help message, the installation was successful and ~/.julia/bin
is properly added to your PATH.
- Install
jetls-client:
- Open VSCode
- Go to Extensions (Invoke the
View: Show Extensions command)
- Search for
"JETLS Client"
- Click
Install
- Open any Julia file
The extension will automatically use the jetls executable from your PATH.
[!note]
To update JETLS to the latest version, re-run the installation command:
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":
julia -e 'using Pkg; Pkg.Apps.add(; url="https://github.com/aviatesk/JETLS.jl", rev="2025-11-25")'
Launching configuration (advanced)
Most users do not need any further configuration beyond the installation steps
above. The following settings are available for advanced use cases.
Executable configuration
Configure the JETLS executable through the jetls-client.executable setting:
- Object form
{"path": string, "threads": string}: Customize the executable path or thread
setting (default: {"path": "jetls", "threads": "auto"})
- Array form
string[]: Use a local JETLS checkout for development, e.g,
(["julia", "--startup-file=no", "--history-file=no", "--project=/path/to/JETLS", "-m", "JETLS"])
Communication channel
The extension automatically selects the most appropriate communication channel
based on your environment:
- Local development:
pipe - Complete isolation from stdin/stdout,
fastest for local communication
- Remote SSH/WSL:
pipe - Works transparently across remote connections
- Dev Containers:
stdio - Maximum compatibility for containerized
environments
For most users, this automatic selection provides optimal performance and
reliability without requiring manual configuration.
You can override the automatic selection using "jetls-client.communicationChannel": string:
"auto" (default): Automatic selection as described above
"pipe": Uses Unix domain socket/named pipe
"socket": Uses TCP socket (configure port with "jetls-client.socketPort": number,
default 0 for auto-assign)
"stdio": Uses standard input/output
For detailed information about each communication channel and when to use them,
see the Communication channels documentation.
Initialization options
Static options that are sent to JETLS during startup can be configured through
VSCode's settings.json file using the "jetls-client.initializationOptions"
section.
These settings require a server restart to take effect.
For detailed initialization options and examples, see the
Initialization options documentation.
Example initialization options
{
"jetls-client.initializationOptions": {
"n_analysis_workers": 2
}
}
Configuring JETLS
JETLS behavior (diagnostics, formatting, etc.) can be configured through VSCode's
settings.json file using the jetls-client.settings section.
For detailed configuration options and examples, see the
Configuration documentation.
Example configuration
.vscode/settings.json
{
"jetls-client.settings": {
"full_analysis": {
"debounce": 2.0
},
// Use JuliaFormatter instead of Runic
"formatter": "JuliaFormatter",
"diagnostic": {
"patterns": [
// Suppress toplevel/inference warnings in test folder
{
"pattern": "(toplevel|inference)/.*",
"match_by": "code",
"match_type": "regex",
"severity": "off",
"path": "test/**/*.jl"
}
]
},
"testrunner": {
"executable": "/path/to/custom/testrunner"
}
}
}
License
MIT License. See LICENSE.md for details.