Highlights
Performance
Joy now seems to sit between Elm and Leptos in performance and bundle size. Sweet!
These numbers are from a local run of js-framework-benchmark and give you some idea of our relative performance:
| Joy (keyed) | Joy (non-keyed) | Elm (keyed) | Elm (non-keyed) | Leptos | SolidJS | React | vanilla JS | |
|---|---|---|---|---|---|---|---|---|
| Slowdown vs best | 1.42× | 1.28× | 1.52× | 1.39× | 1.39× | 1.24× | 1.95× | 1.07× |
| Memory (MB) | 3.6 | 3.6 | 1.3 | 1.3 | 3.5 | 1.0 | 2.2 | 0.8 |
| Bundle, compressed (KB) | 27.5 | 27.3 | 7.9 | 8.2 | 48.8 | 4.5 | 51.4 | 2.4 |
Bundle is the brotli-compressed transfer of everything the page loads, so for Joy that covers the WASM, the JS runtime, and the HTML. The WASM is the bulk of it at 22.1 KB, and the minified JS runtime is 5.0 KB.
Don't take these numbers as gospel, since they're from a local run, not an official one. We can have higher trust in the numbers once Joy is included in the official runs :)
For now, we can say: if you're happy with Elm's or Leptos's performance, you'll probably be happy with Joy's too!
The optimizations which led to this are mainly that we now do more work in wasm and pass the JS boundary less than we did before. wasm is faster than JS on CPU-bound work and it makes quite a difference!
Roc compatibility
Each release now recommends a compatible Roc version so that you know which version to use. We keep the recommendation fresh by running our tests against the latest Roc nightly every day and updating the recommendation if tests pass. That way you can use the latest Joy release, with the latest compatible Roc nightly, and be as bleeding edge as you'd like!
Note: we only update the recommendation on the latest Joy release.
Extensive testing
We now have an extensive test-suite:
- End-to-end tests in real browsers using
roc-playwright. - All Roc optimization modes (
--opt={speed,size,dev}). - Linux, macOS, and Windows.
- Multiple Roc versions:
- Latest nightly
- Our latest recommended nightly (which passed tests for our last release)
- The pinned version in our flake
Hopefully this'll help us keep Joy working through all Roc releases and new features!
Full Changelog: 0.32.3...0.33.0
Get started
Clone the Joy TodoMVC example, and you'll have a complete front-end app setup in no time!
Roc compiler version
Compatible with: roc nightly-2026-09-03-62fcb65.
Roc is currently a moving target and which version you're using matters a lot. We test the latest Joy release against the latest Roc nightly and update the compatibility here every day.
Oftentimes you'll still be able to use Joy with other Roc versions than what's listed here, but if you run into any issues, please try the Roc version above.
Using this release
app [Model, Msg, init, update, render, subscriptions] {
pf: platform "https://github.com/niclas-ahden/joy/releases/download/0.33.0/9UWLeQeJEUkXNGmZtibc1aqpL3gm6Li65GvXxsML5vFz.tar.zst",
html: "https://github.com/niclas-ahden/joy-html/releases/download/0.16.0/56NBT6VkQ5xm87Wjzcv9mRuNT4RACiAmuAmPbXwc8cuk.tar.zst",
}