# Desired Features of ZLS/Build Server Protocol

**URL:** <https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871>\
**Category:** Brainstorming\
**Created:** [October 6, 2026, 12:54pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871 "2026-10-06T12:54:09Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![resonancel](https://ziggit.dev/letter_avatar_proxy/v4/letter/r/db5fbb/32.png) [@resonancel](https://ziggit.dev/u/resonancel)\
**Post date:** [October 4, 2026, 9:38pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/1 "2026-10-04T21:38:14Z")

</div>

The LSP protocol definitely has a TypeScript/OOP bias in its design and rather hostile to languages rich in metaprogramming features, but as of now the protocol itself is kinda tangential to the problem. By no means I’m denigrating the maintainers’ effort, but currently ZLS in a quite sorry state feature-wise, the community in a whole should give more love to it.

---

<div class="post-metadata">

**Author:** ![Chaz](https://ziggit.dev/letter_avatar_proxy/v4/letter/c/4491bb/32.png) [@Chaz](https://ziggit.dev/u/Chaz)\
**Post date:** [October 5, 2026, 3:23am UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/2 "2026-10-05T03:23:35Z")

</div>

I mean, that’s the plan I think, the new build server protocol should enable a much better ZLS.

---

<div class="post-metadata">

**Author:** ![pierrelgol](https://ziggit.dev/user_avatar/ziggit.dev/pierrelgol/32/10233_2.png) [@pierrelgol](https://ziggit.dev/u/pierrelgol)\
**Post date:** [October 5, 2026, 12:43pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/3 "2026-10-05T12:43:49Z")

</div>

The thing is this is a hard problem on a moving target like Zig and I think Techatrix is managing the project really well. Since everything is breaking pretty often, the more feature you implement early the more churn there is. Also because of how Zig does contribution, and how ZLS needs some level of Zig support to implement LSP and potentially a superset of features, it’s pretty tough. Right now he his working with Andrew I believe to implement the build server protocol, which should be easier and more stable, because instead of relying on API, you can rely on a binary protocol, that can be extended, and use versioned parser to handle it properly. But this takes time to design properly.

---

<div class="post-metadata">

**Author:** ![glfmn](https://ziggit.dev/user_avatar/ziggit.dev/glfmn/32/1763_2.png) [@glfmn](https://ziggit.dev/u/glfmn)\
**Post date:** [October 5, 2026, 12:56pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/4 "2026-10-05T12:56:20Z")

</div>

Obligatory matklad blog posts on LSP

> **[Why LSP?](https://matklad.github.io/2022/04/25/why-lsp.html)**
>
> LSP (language server protocol) is fairly popular today. There's a standard explanation of why that is the case. You probably have seen this picture before:

> **[LSP could have been better](https://matklad.github.io/2023/10/12/lsp-could-have-been-better.html)**
>
> We talk about programming like it is about writing code, but the code ends up being less important than the architecture, and the architecture ends up being less important than social issues.

---

<div class="post-metadata">

**Author:** ![Calder-Ty](https://ziggit.dev/user_avatar/ziggit.dev/calder-ty/32/10237_2.png) [@Calder-Ty](https://ziggit.dev/u/Calder-Ty)\
**Post date:** [October 5, 2026, 2:21pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/5 "2026-10-05T14:21:47Z")

</div>

> [@resonancel](#):
>
> By no means I’m denigrating the maintainers’ effort, but currently ZLS in a quite sorry state feature-wise, the community in a whole should give more love to it.

maybe I’m just obtuse, but I hear that sentiment all the time and I just don’t get it. ZLS works well for my needs so I’m not sure what everyone is always expecting from it.

---

<div class="post-metadata">

**Author:** ![SpinTensor](https://ziggit.dev/user_avatar/ziggit.dev/spintensor/32/2942_2.png) [@SpinTensor](https://ziggit.dev/u/SpinTensor)\
**Post date:** [October 5, 2026, 2:38pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/6 "2026-10-05T14:38:07Z")

</div>

Works for me as well. First I was quite hesitant to install ZLS because when I started Programming I did not have LSPs or even Syntax highlighting (Syntax highlighting existed, but the Professor who taught me was an old Fortran 77 veteran and deemed everything beyond F77 and vi not required). So I learned to juggle multiple terminals for checking on function definitons and APIs and holding them in my head while coding.  
So the current ZLS is already quite luxurious for me. But I am aware that I am not the gold standard and if people find it too limited that is a valid opinion as well.

---

<div class="post-metadata">

**Author:** ![Chaz](https://ziggit.dev/letter_avatar_proxy/v4/letter/c/4491bb/32.png) [@Chaz](https://ziggit.dev/u/Chaz)\
**Post date:** [October 5, 2026, 3:03pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/7 "2026-10-05T15:03:26Z")

</div>

I use ZLS with Helix and I get some real value out of “zig build check” running on save (looking forward to that getting faster!), navigating to errors, go-to-definition/go-back, showing some type info, it’s a great start.

_BUT_ having previously used Resharper and then CodeRush in the C# world there are a million other useful things that I miss: find all references, rename a field + all references in one step, type info still being available on complex generics, that sort of thing.

I’m very hopeful that ZLS + others can use the new build server protocol to kick it up another notch, I think it was a few years ago I first saw that plan so I’ve been patient but now I’m excited to see what they come up with.

---

<div class="post-metadata">

**Author:** ![Chaz](https://ziggit.dev/letter_avatar_proxy/v4/letter/c/4491bb/32.png) [@Chaz](https://ziggit.dev/u/Chaz)\
**Post date:** [October 5, 2026, 5:20pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/8 "2026-10-05T17:20:38Z")

</div>

Oh, I forgot: add/remove/reorder parameters to a function, updating all callers in one atomic step.

(No idea what ZLS will do, just an example of the sorts of things it _could_ learn to do.)

The key to implement these C# tools was always the .NET metadata. Java had something similar, but even a decade after all that the C++ ones were just not great because the language is so much harder to work with. But the exciting thing to me here is the hope that this build server protocol could fill the same niche.

---

<div class="post-metadata">

**Author:** ![pierrelgol](https://ziggit.dev/user_avatar/ziggit.dev/pierrelgol/32/10233_2.png) [@pierrelgol](https://ziggit.dev/u/pierrelgol)\
**Post date:** [October 6, 2026, 10:17am UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/9 "2026-10-06T10:17:46Z")

</div>

yeah, there are plenty of features I’d like to have in ZLS, The one that would be godsend is callstack, I really like this features, because you can clearly see, who is calling who, and that makes jumping in any codebase super easy. Grep works well, but it’s a bit of work to get the whole stack. And there are plenty of other things that could be cool, for example, when you create a struct it would be neat, if it would propose a code action, to put an empty, init/deinit/format and maybe some other ubiquitous functions. Or for example The ability to transform a struct, into an implicit struct, and put the `pub const MyFoo = @This()` that would be neat. workspace symbols are something that is also really important. The ability to generate with code action an empty testcase with std.testing.allocator,io already in there, but discarded, could be neat too. There’s probably a thousand features, but those are really top of my list 🙂

---

<div class="post-metadata">

**Author:** ![KilianHanich](https://ziggit.dev/user_avatar/ziggit.dev/kilianhanich/32/8254_2.png) [@KilianHanich](https://ziggit.dev/u/KilianHanich)\
**Post date:** [October 6, 2026, 12:54pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/10 "2026-10-06T12:54:09Z")

</div>

I hope that if that happens at some point, that one (likely post 1.0) feature could be that you can get your call stack (as in who calls who) rendered as e.g. a dot graph.

---

<div class="post-metadata">

**Author:** ![candela](https://ziggit.dev/user_avatar/ziggit.dev/candela/32/2272_2.png) [@candela](https://ziggit.dev/u/candela)\
**Post date:** [October 6, 2026, 2:56pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/11 "2026-10-06T14:56:45Z")

</div>

Does find all references not work currently? I could have sworn I used it (also using helix). The `gr` picker definitely works, I use it constantly.

---

<div class="post-metadata">

**Author:** ![Chaz](https://ziggit.dev/letter_avatar_proxy/v4/letter/c/4491bb/32.png) [@Chaz](https://ziggit.dev/u/Chaz)\
**Post date:** [October 6, 2026, 3:09pm UTC](https://ziggit.dev/t/desired-features-of-zls-build-server-protocol/17871/12 "2026-10-06T15:09:58Z")

</div>

Oh damn, I think my broader point stands, but I should have _also_ said that I’m still learning Helix and may not know how to use all the LSP things yet. If you’re using it, I assume you’re right and I’m ‘holding it wrong’ in this case.
