Hi everyone, I'm wondering how to install the nightly releases. I tried using the Just script from rickhull/roc-init but got the following:
❯ just install-roc
Downloading roc_nightly-macos_arm64-2026-01-22-8e7aabc.tar.gz...
[OK] Cached nightly: nightly-2026-January-22-8e7aabc
Installing nightly-2026-January-22-8e7aabc...
Extracting to /Users/bnash/.local/bin...
tar: Error opening archive: Unrecognized archive format
error: Recipe `install-roc` failed with exit code 1
I'm on Mac (Arm).
hm, i haven't tested on macos. i am very new to roc and zig, but I can try to help troubleshoot
Ah OK–I had a feeling it might've been targeted for Linux but wasn't sure how just worked
yes, it's very much a "works for me" right now, but I very much want it to be useful to others. it's failing around here:
#...
echo "Extracting to {{install_root}}/bin..."
mkdir -p {{install_root}}/bin
tar -xzf "$tarball" -C "$tmpdir"
# Find the extracted directory (should be roc_nightly-linux_x86_64-DATE-HASH)
extracted_dir=$(find "$tmpdir" -maxdepth 1 -type d -name "roc_nightly-*" | head -1)
if [ -z "$extracted_dir" ]; then
echo "Error: Could not find extracted directory"
exit 1
fi
#...
the "unknown archive format" is somewhat surprising. it's either looking at the wrong file, or it has the right file but the internal structure is unexpected
you may be able to complete the install by following the just tasks as a guideline
oh! i think the mktemp stuff might be linux-specific. i think I included some stuff to keep macos working but speculative.
it may have been a download that failed or was silently corrupted. i'm adding more checks to the justfile and will push soon
Oh looks like the arch name is not quite right:
I pushed a new justfile, you should be able to pull. then:
rm -rf cache/roc-nightly/nightly-2026-January-22-8e7aabc
just install-roc
Works! Thank you
❯ just install-roc
Downloading roc_nightly-macos_apple_silicon-2026-01-22-8e7aabc.tar.gz...
[OK] Cached nightly: nightly-2026-January-22-8e7aabc
Installing nightly-2026-January-22-8e7aabc...
Extracting to /Users/bnash/.local/bin...
[OK] Roc nightly installed to /Users/bnash/.local/bin/roc
Ensure /Users/bnash/.local/bin is in your PATH:
export PATH="/Users/bnash/.local/bin:$PATH"
Roc compiler version debug-8e7aabc3
My expectation is that you should be able to run install-roc every morning and get the latest and everything stays working. Not that I would. But I could.
and with the caching strategy, you could e.g. set a systemd timer once an hour and it mostly does nothing
That's helpful to know–and I'm hoping to be able to give anything recent (in the last couple of moths) a try, unstable though it may be.
do you use claude? have you tried the claude skill?
Yes, I do use Claude extensively, though haven't yet tried the skill feature
I think that, from the roc-user level, the new compiler is incredibly stable. userspace has seen very little breakage in a long time, to my knowledge. the tricky part is documentation and tooling / platforms. basic-cli platform, for example, is not yet available.
I'm hoping roc-init can help bridge that gap, and I'm actively working on more new compiler platforms.
Ah OK–are web server or others available?
I'm thinking about this a little bit, I may have a misconception here, so bear with me. I started by building a new compiler platform first, and then wrote "hello world". You need a platform that provides Stdout, Stderr, Stdin (well just Stdout, really, for Hello World). you can get this from https://github.com/lukewilliamboswell/roc-platform-template-zig i'm guessing you have to build this first before you can get hello world?
Here is the platform I built -- if you are ok with more justfile, you can see how I do the builds. this is the equivalent of build.sh (to my knowledge) from roc-platform-template-zig. https://github.com/rickhull/schnorr-platform
Ahh, I see–I will look into getting a platform going then
My schnorr platform started as roc-platform-template-zig it should be easy to get started.
I did this to get the language server working:
# Create roc_language_server wrapper (LSP is built into roc)
printf '%s\n' '#!/bin/sh' 'exec roc experimental-lsp "$@"' > {{install_root}}/bin/roc_language_server
chmod +x {{install_root}}/bin/roc_language_server
And this to get the skill working:
cp skills/roc-language/SKILL.md ~/.claude/skills/roc-language/skill.md
Does that seem right? Want me to open a PR for any of that?
i haven't touched the LSP stuff, so nice job. there is a just task to install the skill. you probably have a little bit of a symlink problem now
just skill-init creates the skill in-repo. skill-install puts it at ~/.claude
Hmm, when I ran just skill-install, it didn't show up in claude till I also copied SKILL.md
hmmm, maybe an oversight, lemme check -- CONFIRMED
feel free to open a PR to add a just task for the language server; i am vaguely aware of LSP but not too familiar
you shouldn't need to, but you can pull and just skill-install again
i don't like how those skill- tasks work currently -- a lot of repetition; and my intent was they would copy from references/ and not docs/ (But references/ is a symlink to docs/) -- but maybe this symlink is more trouble than it's worth
Regarding the LSP, my Zed extension seemed to require roc_language_server in my PATH , so I added a script there that pointed at roc experimental-lsp. That seemed to be better than nothing. Seems that the Zed extension also has newer unpublished changes as well.
I'm not a Zed user (yet). I use emacs on the CLI via SSH. Is that a useful LSP environment?
I'm new to Zed too–usually I use Cursor
Benjamin Nash said:
Regarding the LSP, my Zed extension seemed to require
roc_language_serverin my PATH , so I added a script there that pointed atroc experimental-lsp. That seemed to be better than nothing. Seems that the Zed extension also has newer unpublished changes as well.
Neat idea adding that script.
I made a branch for the zed extension and installed that locally, but your solution sounds way easier :grinning:
I did also clone h2000/zed-roc and install that as a Zed dev extension, after also installing Rust. Seems like that might be using newer code, but am not sure
Yeah I made a PR and that merged, so it is I think.
But we definitely need to update the tree sitter impl. I might look at that but @Eli Dowling is much better with tooling things than I
I'm going to attempt a just task for the language server. as you said, a shell script named roc_language_servercopied to ~/.local/bin that calls roc experimental-lsp
Is anyone using a recent nightly build on Mac? I think I built a platform but get lots of linker errors.
What I specifically get is: ld64.lld: error: library not found for -lSystem
Curoius... I wonder why it's not finding lib system. Is there some kind of library path that needs to be set? I think the related file in roc is linker.zig
for the language server task -- I made a wrapper script and put it in PATH, but I think any editor can just be configured to run roc experimental-lsp and go from there. i'm tempted to kill the just install-lsp task I have, as it mainly serves to match the Zed default
To link, the justfile needs to also copy the darwin dir:
# Copy darwin sysroot if present (required for macOS linking)
if [ -d "$extracted_dir/darwin" ]; then
rm -rf {{install_root}}/bin/darwin
cp -r "$extracted_dir/darwin" {{install_root}}/bin/
fi
Pushed, thanks!
I have to imagine this is all documented and covered somewhere already -- I'm just not aware. Going to poke around a bit to see if I can lean on existing tools or docs
I'm not really following this thread closely... if you find an issue making a GH issue with all the relevant details is easiest for me. Have we resolved the above issue with macos finding lib system?
@Benjamin Nash how much of this stuff https://www.roc-lang.org/install/macos_apple_silicon did you need to do? I think this is directly targeting the old compiler, and not sure how much is expected to apply to the new compiler.
@Luke Boswell yeah, this is from using the roc-init justfile, attempting macos install -- adding the darwin sysroot reportedly resolves -- I have updated the install-roc task for macos to do this now.
I don't think we need zstd anymore for the new compiler
@Luke Boswell Yes, the installation procedure needed to copy an additional dir from the nightly bundle. So no issue with roc itself needs to be filed
@Rick Hull that procedure seems to install the older (September) release, so my procedure was separate
mainly I was looking at brew install zstd as a requirement, I guess. if stuff like this is required, it may not necessarily belong in the justfile or I might need to reconsider some scoping.
I can add another check- task that looks for zstd and on failure prompts the user to take action.
I mean that I think zstd was required to be installed for the old rust compiler, but I think we managed to remove that as a dependency in the new zig one -- so not something you would need to worry about for the roc init thing your working on
oh shoot, i missed that little message, cool!
I documented what works for me here: https://gist.github.com/benash/12e5f47428a4d4c02c10444ce49ed592
It might be easier using a platform from a release URL instead of building/copying/removing etc. Most users will use a release and not need to worry about platform development at all
here is an example app using a release URL https://gist.github.com/lukewilliamboswell/33ae5bd0f66f4915a01fce178e6139b8
All you need is roc app.roc and you should be good to go (as an application author)... no need to have a lower level toolchain like zig or cargo installed
here is where that maybe came from:
Rick Hull: I'm thinking about this a little bit, I may have a misconception here, so bear with me. I started by building a new compiler platform first, and then wrote "hello world". You need a platform that provides Stdout, Stderr, Stdin (well just Stdout, really, for Hello World). you can get this from https://github.com/lukewilliamboswell/roc-platform-template-zig i'm guessing you have to build this first before you can get hello world?
Rick Hull: Here is the platform I built -- if you are ok with more justfile, you can see how I do the builds. this is the equivalent of
build.sh(to my knowledge) fromroc-platform-template-zig. https://github.com/rickhull/schnorr-platform
Maybe barking up the wrong tree a lil bit.
@Benjamin Nash listen to @Luke Boswell :thumbs_up:
Luke Boswell said:
It might be easier using a platform from a release URL instead of building/copying/removing etc. Most users will use a release and not need to worry about platform development at all
Ohh interesting
But do the nightly builds have built platform already available someplace?
at the risk of steering you slightly wrong again, I think you can separate the roc compiler release, from the platform release. e.g. https://github.com/lukewilliamboswell/roc-platform-template-zig/releases
OK, so I could build for Mac and push someplace and use that platform URL for the foreseeable future
Oh or maybe just reference that directly
as in: https://github.com/rickhull/roc-init/blob/master/main.roc right?
Ah, even easier. Thank you!
whew! :halo:
in general, you have the new compiler and shouldn't need to worry about keeping up, IMHO. i don't think much is changing in "userspace". and if you have a platform binary with the necessary functions, then you're off and running doing "new roc" :partying_face:
OK. Great to know.
as far as that goes, the roc-init repo should not really be any part of your workflow. it's for getting set up. you have roc, you can update it. you have a roc-language skill, maybe some LSP stuff. now it's your project, and you can update things without roc-init. just thinking out loud here
We've had breaking changes in the past where the new nightly needs a platform update. When that happens we try to communicate it loudly and coordinate efforts with all the common platforms before we pull the trigger. We're not tracking any breaking changes in the near term though.
Good to know about these things!
that's a good point; from my perspective, where I developed a new-roc platform, I have all these justfile checks about the roc cache and zig cache, do i need to clean before build, etc.
and whatever helpful stuff that roc-init is doing will almost certainly be folded into the official roc tooling at some point. roc-init is a temporary waystation on the way to 1.0 (as I see it)
@Benjamin Nash I've updated the README significantly, and added some various platform options. I'd love to hear what you think.
Looks good, including the part about config'ing Zed
Last updated: Feb 20 2026 at 12:27 UTC