Let's say I wanted to create a cross-platform task manager, like Super Productivity (or Todoist, etc.), and I wanted to do it in Roc, which GUI library/framework would I use? I know there's roc-ray, roc-gui, joy, terrocotta and there might be more.
It would be great to have a native GUI (i.e. not building on web views so that excludes joy) but I also want to leave an easy path to make it a browser app via wasm.
I'd guess that all the libs mentioned above could do the job in theory, but I feel kind of lost on how to make the choice. Maybe someone has an input on how to view this decision on a more "philosophical level" if that makes sense?
Or maybe just chime in with what you would pick for the job and why.
I'm especially curious what @Luke Boswell has to say since he (co-)created many of the existing GUI libraries
If we assume theyre all equally mature... roc-gui is probably the best choice. Or Karl's gui platform (which he hasnt shared yet :wink:).
I think the gui aspect of roc-ray is better suited for games, though you definitely could.
I think the capabilities oriented security model and builtin testing for roc-gui makes something like this much nicer to work with.
However.... if you wanted to ship it today roc-ray (and terrocotta on top of that) is definitely the most mature.
Regarding the easy path to web... if you are careful about how you structure your app you could probably have two app roots, one could be roc-signals for the web and the other roc-gui. They're both Action-State so the abstractions will be similar.
roc-signals is also experimental.
It kind of comes down to what your goals are here, like learning Roc or platform development.
I call these experimental because making a gui platform is enormous scope and takes a long time to test things properly.
I mean two apps that share a common core
@Luke Boswell
So I looked a bit more into roc-gui and I wanted to try persisting application state via SQLite, but I saw that the roc-gui platform gives you read-only sqlite access. What's up with that?
I haven't got to that yet, it's a wip -- if you feel like fixing it and making a PR I'd love the help :smile:
I've been trying to fix infrastructure issues and set things up like tooling so it is easy to build and scale. I've also been feeding a lot of bug reports back upstream and coordinating those with the roc compiler which delays everything. roc-gui has been amazing for flushing out bugs, it's really pushed the limits of the compiler.
Last updated: Nov 04 2026 at 18:54 UTC