wsv-accidis / sjoslaget

Monorepo for Sjoslaget.se (frontend + backend).
Apache License 2.0
2 stars 0 forks source link

Rewrite frontend in something else #68

Open wsv-accidis opened 10 months ago

wsv-accidis commented 10 months ago

In true Google fashion, they abandoned support for AngularDart except for their own internal use. They said they would publish occasional updates externally but then walked back on that too. The community maintained fork has barely a twitch of life left in it and it's probably a PITA to migrate from AngularDart 6.x that I'm using now.

Thankfully there is no real issue with just keeping the current frontend forever. It's on the last major release which was intended to be LTS, it works well enough and there is no risk of security issues since all the important stuff happens on the backend and is running off .NET. And regardless of your opinion of Microsoft, they almost never abandon their developers.

However, writing a new frontend could be a fun exercise. What is the new hotness these days?

Caveat: Not Javascript. Just not going to happen.

wsv-volvo commented 10 months ago

Flutter Web

It's still Dart (good). More of an app framework than a web framework (also good). Apparently can use WebGL for rendering, very cool. This seems to be what AngularDart refugees are flocking to.

wsv-volvo commented 10 months ago

Blazor or Razor Pages

It's C# and .NET but doesn't seem to be super popular. It's basically C# on WebAssembly. Might be more used in the corporate world. It's Microsoft so it will be supported forever. Blazor seems to be the more modern choice.

There is a good article comparing Blazor and Razor here.

wsv-volvo commented 10 months ago

AngularDart 8

Let's keep an eye out on their roadmap and see if it sputters back to life. At the time of this writing, there are spurious commits by only two developers.

wsv-volvo commented 10 months ago

Egui or Yew or something

Why not use this as an excuse to learn Rust? Egui and Yew seem to be the most popular where Yew is more traditional HTML-with-code and egui goes full 60 fps immediate mode canvas. Is that practical for what I want to do? Who cares, it looks like fun.

Egui first impressions

Egui is in a very heavy state of development and breaking changes are to be expected, the author is very clear about this. It's also effectively a one-guy project, sponsored by his current employer, so the long term support is uncertain. Rust is very verbose compared to more high-level languages. These factors will slow down development and add friction. The documentation is very incomplete and there are few guides or tutorials online, so finding solutions to problems can take time.

On the plus side, the project has come very far already and has an active community. The tooling is very good and it was easy to get started. Rust is fun and building an immediate mode GUI is a refreshing change. While there are bugs and a long list of open issues, they do seem to be handled competently. The widget library is surprisingly rich already, and should have everything I need. The longer term goals of the project seem well aligned with my needs, as well.

Egui (and Rust) conclusions

As interesting as it was to explore a bit of Rust, it is no longer a candidate for this particular hobby project. Rust in general is far too verbose and the memory management approach takes far too much hand-holding; I'm sure it makes perfect sense for performance intensive work where you do not want the overhead of a GC, but for a line-of-business app, it's a hindrance.

Despite showing a lot of promise and being interesting to try, Egui is still very immature and would require extensive customization to reach the level of UX fidelity that I'm after (using Material Design as a reference). Even building a quick demo, I found bugs as well as areas where Egui is not offering simple or straightforward solutions to things that would be simple and straightforward in, say, Android or HTML.

To summarize, while interesting to explore, going with Egui or any other Rust-based framework would add considerable effort to the project and would feel like a regression in DX compared to what I already have with AngularDart.

wsv-volvo commented 10 months ago

Phoenix or anything that uses custom hosting

Anything that can't be deployed to a traditional host serving static files is out, so we need something that doesn't need to be hosted in its own custom Docker container.