# Hints for using the new JETLS.jl language server

**URL:** <https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804>\
**Category:** General Usage\
**Tags:** package, jetls\
**Created:** [February 23, 2026, 10:02pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804 "2026-02-23T22:02:56Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [February 23, 2026, 10:02pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/1 "2026-02-23T22:02:56Z")

</div>

I reached a point where JETLS.JL is good enough for me and has no serious issues anymore.

I needed some special configuration, though, and I want to share it with you:

> **[Using the JETLS.jl language server - Advanced usage · KiteModels.jl](https://opensourceawe.github.io/KiteModels.jl/dev/advanced/#Using-the-JETLS.jl-language-server)**
>
> For advanced users it is suggested to install git, bash and vscode or vscodium in addition to Julia. vscode and vscodium both have a very good plugin for Julia support, see https://www.julia-vscode.org. Installation instructions: Julia and VSCode . |...

I find it much better than the old language server because it also works in tests and examples of a project and gives warnings that otherwise do not appear, such as warnings about abstract types.

---

<div class="post-metadata">

**Author:** ![favba](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/favba/32/2735_2.png) [@favba](https://discourse.julialang.org/u/favba)\
**Post date:** [February 24, 2026, 12:01pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/2 "2026-02-24T12:01:21Z")

</div>

`LanguageServer.jl` not working on tests is one of my greatest pain points with it. That and the lack of support for package extensions.

Do you know if JETLS.jl work well with code in a Package extension module?

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [February 24, 2026, 12:17pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/3 "2026-02-24T12:17:56Z")

</div>

> [@favba](#):
>
> Do you know if JETLS.jl work well with code in a Package extension module?

Not at all: [Broken with pkgextensions? · Issue #521 · aviatesk/JETLS.jl · GitHub](https://github.com/aviatesk/JETLS.jl/issues/521)

---

<div class="post-metadata">

**Author:** ![mstewart](https://avatars.discourse-cdn.com/v4/letter/m/b5a626/32.png) [@mstewart](https://discourse.julialang.org/u/mstewart)\
**Post date:** [February 24, 2026, 4:12pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/4 "2026-02-24T16:12:10Z")

</div>

I have also had a positive experience with JETLS. I am using it in emacs. For anyone who might be trying it out in emacs 29 with eglot, it might help to know that this [issue](https://github.com/aviatesk/JETLS.jl/issues/489) is solved in recent versions of eglot. So you might want to upgrade to eglot 1.21. It took me too long to figure that out.

---

<div class="post-metadata">

**Author:** ![DoktorMike](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/doktormike/32/2736_2.png) [@DoktorMike](https://discourse.julialang.org/u/DoktorMike)\
**Post date:** [February 24, 2026, 7:32pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/5 "2026-02-24T19:32:53Z")

</div>

I really like JETLS.jl as well. As of right now I cannot use it due to a weird race condition that prevents the process from exiting. This is primarily in Neovim. But up until the introduction of that bug it was a joy to use and I’m looking forward to using it again. 🙏🏻😊

Very cool stuff.

---

<div class="post-metadata">

**Author:** ![mstewart](https://avatars.discourse-cdn.com/v4/letter/m/b5a626/32.png) [@mstewart](https://discourse.julialang.org/u/mstewart)\
**Post date:** [February 24, 2026, 8:34pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/6 "2026-02-24T20:34:11Z")

</div>

Is there some reason you can’t go back to whatever release was working for you? I was assuming that there might be bumps along the road in development and I might have to do that at some point. (Although that hasn’t happened for me so far.)

---

<div class="post-metadata">

**Author:** ![DoktorMike](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/doktormike/32/2736_2.png) [@DoktorMike](https://discourse.julialang.org/u/DoktorMike)\
**Post date:** [February 25, 2026, 6:43pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/7 "2026-02-25T18:43:30Z")

</div>

No reason at all. I just don’t remember which version was working. So I’m guessing is faster to try the next could of versions instead given how fast the development is going. 😊

---

<div class="post-metadata">

**Author:** ![aviatesk](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aviatesk/32/7610_2.png) [@aviatesk](https://discourse.julialang.org/u/aviatesk)\
**Post date:** [March 13, 2026, 12:58pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/8 "2026-03-13T12:58:49Z")

</div>

> [@DoktorMike](#):
>
> As of right now I cannot use it due to a weird race condition that prevents the process from exiting.

This was due to an issue with Neovim’s abnormal server process lifecycle handling (i.e. Neovim actually doesn’t comply with [LSP](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/) by not sending [exit notification](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#exit) before killing server process), but it has been fixed on the latest JETLS version `2026-03-13` by making JETLS’s abnormal server shutdown handling more robust. Thanks for @abap34 for this.

---

<div class="post-metadata">

**Author:** ![DoktorMike](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/doktormike/32/2736_2.png) [@DoktorMike](https://discourse.julialang.org/u/DoktorMike)\
**Post date:** [March 13, 2026, 6:05pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/9 "2026-03-13T18:05:09Z")

</div>

Yes and it works like a charm. I’ll try and see if I can get an issue up and running for neovim as this seems to be a rather serious bug. It only happens with jetls though. I use around 5 different language servers and they all works as one would expect. Weird.

Thanks for all the great work on JETLS! 🎉

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 15, 2026, 12:59am UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/10 "2026-03-15T00:59:12Z")

</div>

Would a kind soul please explain **WHERE** the configuration files mentioned in the [man page](https://aviatesk.github.io/JETLS.jl/release/configuration/) are meant to be saved?

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [March 15, 2026, 3:18am UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/11 "2026-03-15T03:18:54Z")

</div>

In the root directory of your package or project. See: [GitHub - OpenSourceAWE/KiteModels.jl: Kite and tether models for the simulation of kite power systems · GitHub](https://github.com/OpenSourceAWE/KiteModels.jl)

I have a `.JETLSConfig.toml.default` file in Git, my install script copies it to `.JETLSConfig.toml` . By doing this, every developer can have different settings that are not in Git, while still getting a reasonable default as a starting point.

If you run `jetls` from the command line you can specify the root directory like this:

```bash
jetls check --root=. src/

```

The root directory is the directory that also contains the `Project.toml` file.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 15, 2026, 12:15pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/12 "2026-03-15T12:15:26Z")

</div>

Thanks, I had one file with that name, that I found i your opening post but not in the JETLS manual (_Diagnostic_ section), but it makes no effect to me. I still see hundreds of false positives _may be used before it is defined_. The contents of my .toml file are:

```julia-auto
[[diagnostic.patterns]]
pattern = "lowering/(unused-argument|unused-local)"
match_by = "code"
match_type = "regex"
severity = "off"

[[diagnostic.patterns]]
pattern = "lowering/undef-local-var"
match_by = "code"
match_type = "regex"
severity = "off"

```

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [March 15, 2026, 12:49pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/13 "2026-03-15T12:49:40Z")

</div>

Can you share the project that produces these warnings?

Without seeing your code, it is hard to answer the question of why there are these warnings.

Possible reasons:

- you are not using Julia 1.12
- instantiating your project fails (try: `julia --project=. 'using Pkg; Pkg.instantiate'`. Does that work?)

When I started using `jetls` I started with a very small project first, to get a feeling for how it works and which coding patterns to avoid.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 15, 2026, 12:54pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/14 "2026-03-15T12:54:22Z")

</div>

I have it in the root folder of the GMT.jl. I don’t use `projects`. But the question is not on why the warnings are produced. They are mostly false positives but that has time … to improve with time. The question is why they are not suppressed.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [March 15, 2026, 1:03pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/15 "2026-03-15T13:03:35Z")

</div>

> [@joa-quim](#):
>
> I don’t use `projects`.

You should use `--project`. If you are not doing it, which environment shall JETLS assume? JETLS has two modes: package mode and script mode. If you analyze the files of a package in script mode, you will get a lot of wrong warnings.  
See: [Working with Julia projects | Julia programming notes](https://ufechner7.github.io/2022/08/16/julia-projects.html)

Did you run this command in the terminal:

```julia-auto
jetls check --root=. src/

```

If you do that, then we know the problem is not the VSCode integration.

If I look at my way to suppress messages, I see one difference:

```julia-auto
[[diagnostic.patterns]]
pattern = "copy!.*Random.TaskLocalRNG.*Nothing"
match_by = "message"
match_type = "regex"
severity = "off"

```

I use `match_by ="message"`

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 15, 2026, 1:19pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/16 "2026-03-15T13:19:47Z")

</div>

I don’t need projects so I don’t use them.  
By moving the setting to VSC’s `.vscode/settings.json` I’m starting to see the suppressions I want.  
Thanks for your help.

> [@ufechner7](#):
>
> I use `match_by ="message"`

I saw the `match_by = "code"` in JETLS’s docs and that is also what I put in the `settings.json` and it worked. Maybe they both do.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [March 15, 2026, 1:24pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/17 "2026-03-15T13:24:39Z")

</div>

> [@joa-quim](#):
>
> I don’t need projects so I don’t use them.

Didn’t you say you are working on `GMT.jl`? This is a package, and a package is always also a Julia project. This is not true the other way round.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 15, 2026, 1:41pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/18 "2026-03-15T13:41:02Z")

</div>

OK, I meant the I don’t use `--project=???`

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 15, 2026, 6:25pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/19 "2026-03-15T18:25:30Z")

</div>

BTW, anyone know how to suppress the messages:  
`Indexing with indices obtained from `length`, `size`etc is discouraged. Use`eachindex`or`axes` instead.`

Tried with the `"pattern": "IndexFromLength",` that is shown together with warning but it didn’t work

IMO, this messages should not be shown by default. It is my choice to use  
`for k = 1:length(v)`  
and not be censured.

---

<div class="post-metadata">

**Author:** ![abraemer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abraemer/32/51403_2.png) [@abraemer](https://discourse.julialang.org/u/abraemer)\
**Post date:** [March 15, 2026, 6:51pm UTC](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804/20 "2026-03-15T18:51:30Z")

</div>

> [@joa-quim](#):
>
> IMO, this messages should not be shown by default. It is my choice to use  
> `for k = 1:length(v)`  
> and not be censured.

I can’t help with JETLS but please note that there can be a tangible difference between

```julia-auto
for k in 1:length(v)

```

And

```julia-auto
for k in eachindex(v)

```

Even when you don’t consider exotic indices. In the latter, Julia knows that all indices are inbounds and is very likely to ellide boundchecks - so effectively you get a free and 100% safe `@inbounds` for using the “correct” pattern. So this is a bit more than a stylistic choice.

[Next page](https://discourse.julialang.org/t/hints-for-using-the-new-jetls-jl-language-server/135804.md?page=2)
