# ZLS, Brew, and Ziglings, oh my

**URL:** <https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765>\
**Category:** Help\
**Tags:** tools, learning, zls, editor\
**Created:** [January 2, 2026, 5:58pm UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765 "2026-01-02T17:58:14Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![dickiedyce](https://ziggit.dev/user_avatar/ziggit.dev/dickiedyce/32/7462_2.png) [@dickiedyce](https://ziggit.dev/u/dickiedyce)\
**Post date:** [January 2, 2026, 5:58pm UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/1 "2026-01-02T17:58:14Z")

</div>

Evening gentlefolk,  
I’ve spent a pleasant afternoon getting my head around how to use `anyzig` with the latest dev build, so that I can work through the Ziglings examples. This involved my uninstalling zig and zls that I had previously installed using `brew` - laziness I guess? - and now having managed to start plowing through with `zig 0.16.0-dev.1859+212968c57 build` , I’m beginning to miss not having zls available anymore.

**Q:** Is there some wave-a-dead-chicken incantation I need to get this to work, or am I _S.O.L._ and should just learn to suck it up. (For added comedy, I’m using Helix and not VS Code 😉 )

---

<div class="post-metadata">

**Author:** ![Sze](https://ziggit.dev/user_avatar/ziggit.dev/sze/32/496_2.png) [@Sze](https://ziggit.dev/u/Sze)\
**Post date:** [January 2, 2026, 6:21pm UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/2 "2026-01-02T18:21:08Z")

</div>

My suggestion would be to use the `0.15.1` tagged release of ziglings, instead of chasing master while learning Zig.

When using dev versions for Ziglings, Zig and Zls it can be difficult for all versions to match up, that is the benefit of tagged versions that those things are usually figured out correctly through those tagged releases.

---

<div class="post-metadata">

**Author:** ![ww520](https://ziggit.dev/letter_avatar_proxy/v4/letter/w/c2a13f/32.png) [@ww520](https://ziggit.dev/u/ww520)\
**Post date:** [January 2, 2026, 6:37pm UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/3 "2026-01-02T18:37:27Z")

</div>

Hello. Welcome to the forum.

It has been a while and my zls knowledge might be outdated but I remember zls needs to be rebuilt with the current installed version of zig to be compatible. I usually do these whenever I install a new version of zig.

- Unpack zig in a directory, e.g. /opt/zig.
- Get the source of zls or update it. E.g. in /opt/zls,  
`git clone https://github.com/zigtools/zls.git`  
`git pull`
- If your zig version is not master or an older version, find the git tags of zls matching the zig version.  
`git tag`  
`git checkout 0.15.0` (move HEAD to 0.15.0)  
`git checkout master` (move HEAD back to latest)
- Do a build on zls in /opt/zls  
`zig build`
- Copy the zls binary to a directory in $PATH.  
`cp zig-out/bin/zls /opt/zig`
- Test running zls. Make sure its version is compatible with zig.  
`zls --version`  
`zig version`

---

<div class="post-metadata">

**Author:** ![vulpesx](https://ziggit.dev/user_avatar/ziggit.dev/vulpesx/32/3989_2.png) [@vulpesx](https://ziggit.dev/u/vulpesx)\
**Post date:** [January 3, 2026, 4:19am UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/4 "2026-01-03T04:19:41Z")

</div>

while this is technically true, you can (and I do) get away with using a master build of zls when using 0.15.

You do have to be aware that zls might have false errors or completions, in particular the `@Type` on master has been replaced with specific bulitins for each kind of type.

That is specific to _language_ changes, for example zls will work correctly with `std` or any other import, it just needs to execute the correct zig binary, which `anyzig` solves by using the `minimum_zig_version` from your `build.zig.zon` (when a specific version isnt passed as an arg, which is the case when zls calls it since it doesnt know its calling anyzig).

---

<div class="post-metadata">

**Author:** ![dickiedyce](https://ziggit.dev/user_avatar/ziggit.dev/dickiedyce/32/7462_2.png) [@dickiedyce](https://ziggit.dev/u/dickiedyce)\
**Post date:** [January 3, 2026, 10:32am UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/5 "2026-01-03T10:32:53Z")

</div>

Thanks @Sze , frankly I hadn’t thought of it, and it wasn’t immediately obvious to a lurker - that’s one way to get people to sign up to Codeberg 😉

I’ll stay in the shallow end until I’m safe enough to be let loose on 0.16.0++

---

<div class="post-metadata">

**Author:** ![dickiedyce](https://ziggit.dev/user_avatar/ziggit.dev/dickiedyce/32/7462_2.png) [@dickiedyce](https://ziggit.dev/u/dickiedyce)\
**Post date:** [January 3, 2026, 10:37am UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/6 "2026-01-03T10:37:02Z")

</div>

Ah, yes, laziness triumphed I’m afraid - I just

`$> brew uninstall anyzig`  
`$> brew install zig zls`

and as per @Sze suggestion, rolled back to `1407c7fb91` on Ziglings. I will attempt other’s suggestions, once I have more personal stack space.

---

<div class="post-metadata">

**Author:** ![dickiedyce](https://ziggit.dev/user_avatar/ziggit.dev/dickiedyce/32/7462_2.png) [@dickiedyce](https://ziggit.dev/u/dickiedyce)\
**Post date:** [January 3, 2026, 10:39am UTC](https://ziggit.dev/t/zls-brew-and-ziglings-oh-my/13765/7 "2026-01-03T10:39:55Z")

</div>

Thank you for this @ww520 and the kind welcome. Assuming I haven’t managed to conquer all 111 exercises by the end of the week, I will try this on the old Linux box at work, after the holidays. For now MacOS laziness has triumphed.
