You should try jetls, it is awesome!

I write only to suggest to use jetls: GitHub - aviatesk/JETLS.jl: A new language server for Julia, enabling modern, compiler-powered tooling.

It is still a not complete project, but it is very useful for now. And it is working nicely in Emacs with eglot (I guess with lsp will be working also).
Previously, I tried LanguageServer, but it never working for me.

I use it with the following configuration, and it very operative and comfortable to use.

;; For julia
(with-eval-after-load 'eglot
  (add-to-list 'eglot-server-programs
               '(((julia-mode :language-id "julia")
                  (julia-ts-mode :language-id "julia"))
                 "jetls"
                 "--threads=auto"
                 "--"
                 "--socket"
                 :autoport)))

You can use several options to see the errors:

  1. I like sideline to see the error on the right:
;; For using sideline
(use-package sideline-flymake
  :ensure t
  :hook (flymake-mode . sideline-mode)
  :init
  (setq sideline-flymake-display-mode 'point) ; 'point to show errors only on point
					; 'line to show errors on the current line
  (setq sideline-backends-right '(sideline-flymake)))

In that case, you can see with the line the error

but you can use also use flyover GitHub - konrad1977/flyover: A beautiful inline overlay for Emacs (Flycheck | Flymake),

and get all errors more easily:

As you can see, it was an error in the parameter (I made that for showing the diagnostic format, my code is perfect :slight_smile: ).

I am now configuring debugging with dap-mode, and it is also very promising.

It is great to see how the tools are improving, and the LSP improvement is very useful for all IDEs (including Emacs).

30 Likes

This prompted me to finally try JETLS, and I can confirm it’s great (while still suffering from quite a few false positives :sweat_smile:).

2 Likes

I really want to give a try, but the big issue for JET and JETLS is that it requires the newest julia version. I currently stay on 1.10.

I hope JET can reach the stage soon that some older versions are supported.

It’s unlikely. JETLS depends on many compiler upgrades that have happened since 1.10 and are continuing to happen

1 Like

But does it run on the latest stable version? The last time I tried it, it was asking for a nightly Julia version … Is it still the case / requirement?

It should work on 1.12 last I checked. But newer version will still be better.

1 Like

Aha, I see, so it runs as an app now. I’ll be testing with Helix. Will try to add it to Crush coding agent as well.

I mean I hope it will be able to support, say, the newest LTS version in the future.

I believe for practical reasons, many people would like to stay on LTS versions.

2 Likes

I have a question regarding the expected timeline for when JETLS.jl might become usable and integrated by default in IDEs such as VSCode.

I want to emphasize that I’m not asking this in any way to apply pressure. I’m genuinely impressed by the progress that has been made, and I’m very excited about the project. I’m looking forward to using these tools, although I will likely wait until an official release before fully adopting them.

Thank you for all the great work!

8 Likes

Soon™ (before JuliaCon).

38 Likes

Thanks for calling attention to JETLS again. I tried it a couple of months ago but then it was a bit buggy, it came a long way since. And thanks for mentioning flyover, I did not know about it.

2 Likes

Thank you for the callout about JETLS. It motivates me to keep pushing development forward.

Please note that this server launching method has been deprecated in the latest JETLS release. In the latest version (2026-03-13), please configure it as follows (note the explicit serve command):

(with-eval-after-load 'eglot
  (add-to-list 'eglot-server-programs
               '(((julia-mode :language-id "julia")
                  (julia-ts-mode :language-id "julia"))
                 "jetls"
                 "--threads=auto"
                 "--"
                 "serve"
                 "--socket"
                 :autoport)))

For instructions on how to install the latest jetls executable, as well as setup for each editor, please refer to Index · JETLS.jl.

17 Likes

Does anyone have an example how to configure JETLS with Emacs/eglot?

Well, if your code can be instantiated on Julia 1.12, then you can use JETLS even if Julia 1.10 is active. So you could do:

mv Manifest.toml Manifest-v1.10.toml 
juliaup add 1.12
juliaup default 1.12
julia --project -e 'using Pkg; Pkg.instantiate()'
mv Manifest.toml Manifest-v1.12.toml 
juliaup default 1.10

and try if that works for you.

It’s excellent. Vastly improves development experience. Well done. Thanks for the hard work.

The documentation. That was also mentioned in the message right above yours.

@giordano, you misunderstand, I am not asking about setup, but configuration (ie a schema). See the link I included in my question.

Then I don’t understand the question at all because that configuration isn’t editor-specific.

Sure, but how I send that configuration from the editor is.

TL;DR: I am looking for the Emacs/eglot equivalent of vim.lsp.config.

Interesting. My code works on 1.12.

Do you mean the JETLS can work independently with the active environment?