Hi folks!
I've been following Roc for a couple years and finally sat down to build something non-trivial with it this morning and wow what a beautiful language!! The care you've put into how everything fits together is really special, and I love how you've balanced expressiveness and simplicity. Truly software you can love.
I wanted to share a quick report on my experience as a new user. I don't think much of this will be a surprise, but wanted to share in case it's helpful!
Background: I was building a tiny little HTML page using basic-webserver. I pulled some data from an API then rendered it on the page.
What works:
_
in return types makes it easy to have lots of descriptive error tags, but avoids the boilerplate of having to repeat them in type signatures.What was challenging:
thread '<unnamed>' panicked at crates/compiler/mono/src/ir.rs:6257:10:
Ability specialization is unknown. Tip: check out <https://roc.zulipchat.com/#narrow/stream/231634-beginners/topic/Non-Functions.20in.20Abilities/near/456068617>: DeriveError(Underivable)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
If I'm understanding correctly, the compiler is currently being rewritten in Zig, so maybe fixing this is already on the roadmap for the next version of the compiler.
Either way, sincerely appreciate the hard work you're all putting in, and looking forward to using Roc more in the future!
Thank you for taking the time to share this. It's really helpful to know how Roc is feeling from someone who has fresh eyes.
Regarding the JSON decoding... there are definitely issues lurking here which cause confusing compiler panics. This is one of the motivating reasons for the re-write. We have a fix, but unfortunately it is quite invasive.
Thanks for the kind words and feedback @Luca! Encouraging type annotations is a good idea, not yet sure how we should do that :thinking: Additional tip: if you hover over a variable or function with your mouse it will show the type, assuming you have the LSP set up with your editor.
@Luke Boswell of course, happy to help! And that makes sense — figured it was already on your radar :)
@Anton you're so welcome! For type annotations — maybe emitting a warning for top-level functions without annotations? Doesn't stop you from hacking things together while exploring solutions, but probably something you want to fix before merging a PR. And that makes sense about the rewrite :)
A warning feels a little strong, we see warnings as: "You should fix this before getting to production.". If people don't want to add type annotations to e.g. their scripts, we should not annoy them. We also like to introduce beginners to the language without type annotations.
Would be a nice addition of a roc lint
or similar tool to run in ci
Last updated: Jul 26 2025 at 12:14 UTC