We’ve got a WebAssembly web-UI at $DAYJOB. Implementation language is Rust, we use the Leptos framework (although other mature frameworks are available for Rust).
Pros:
Same language and similar tooling as in the backend. Most libraries work the same way (obviously excluding libraries that read from the filesystem, for example). This is especially good, if you’ve got lots of “full stack” devs.
Same model classes as in the backend. If you change a field, the compiler will force you to fix it on both sides. It is compile-time guaranteed that backend and frontend are compatible.
Rust is a nicer language than JS/TS. I find especially Rust’s error handling via Result and Option types + pattern-matching works really well for UI stuff. You just hand the Result value over to your rendering stack and that displays either the value or the error. No unset/null variables, no separate error variable, no ternaries.
Having a strict compiler makes it less bad when you’re lax on testing, and frontend code is a pain to test.
Cons:
If you’ve got pure frontend folks, or people who are deep into React or Angular or whatever, those are not going to be as productive.
The JS ecosystem is massive, you just won’t find as many component libraries for Rust, which can definitely also reduce productivity.
With me being in a team with few frontend folks, I would definitely opt for it again.
We’ve got a WebAssembly web-UI at $DAYJOB. Implementation language is Rust, we use the Leptos framework (although other mature frameworks are available for Rust).
Pros:
Result
andOption
types + pattern-matching works really well for UI stuff. You just hand theResult
value over to your rendering stack and that displays either the value or the error. No unset/null variables, no separate error variable, no ternaries.Cons:
With me being in a team with few frontend folks, I would definitely opt for it again.