I am about to release a web application using Erlang back-end. The Web application is developed in C++ and commercial Qt and need to run in a webasm container with quite a few drawbacks.
Returning to Erlang has been a nice journey and it really appeals to me. Can’t help it but it is like home and going back to C++ feels quite cumbersome.
I am thinking of taking up a new front end framework and need some help. I’d like to stay in the BEAM echo system but still quite many to chose from.
So, the question is. How is Gleam Lustre compared to Nitrogen or Chicago Boss? And what about PureScript with Pux or Flare? How do they all comapare to Phoenix? How is those to develop with and how about production readiness?
I have no background in web app development, nor in frameworks like Ruby on Rails so I will have to start from scratch in this area. Thus the easy way out with Qt and WebAsm (which I’d like to avoid btw).
Depending what you want to do with a framework you can always have a look at novaframework/nova: Web framework for Erlang. It doesn’t have the model part that Phoenix have or maybe a strong front-end part as nitrogen and Liveview.
I reckon the first thing you might want to decide is which of the BEAM languages you like or want to work with most (if you’ve got an Erlang back-end already you may want to stick with Erlang) and then as @Taure mentioned, it’s worth taking a look at each framework to see which you feel might best fit your needs.
On the Erlang side you have Nitrogen, Nova, Zotonic (I don’t think many people use Chicago Boss anymore - but I might be wrong). All three teams are very approachable so if you have any specific questions just ask, I’m sure they’d be happy to help
I’ve had a lot of success going without any particular web framework and using Elli alone. This was mostly for JSON APIs. You might also find this simple approach practical, depending on your use case and your tastes.
I second that.
Elli is excellent, and paired with the mighty useful nine library [1]
and the rock solid erlydtl library [2] can be used for websites as well.
Just don’t trust the elli README that states
“If you’re building web services, not web sites, then Elli might be for you.”
Some time ago I wrote a silly one [3] and it was great fun,
the source code is at [4].
During my project I have managed to deal with Cowboy, both HTTP(S) and WebSockets and the server side is working sufficiently. The problem is really the web client software.
I figure Nitrogen, Zotonic or Nova will allow me to develop a web application front end with a integration layer that might replace my Cowboy/WerbSocket layer and connect to my Session Handler.
Zotonic is a bit much for me right now and between Nova and Nitrogen, Nitrogen seems more friendly for a newcomer.
Elli is new to me and from what I recon I would have made good use of it if I would have known when I developed the application. Today I use gproc-magic and casts. It does not seem to deal with the actual client application though.
I think I will get started with Nitrogen and give it a go. When I learn a bit more I will perhaps understand things better and make a different choice.
A bit late. Author of nine here. There is also nine_cowboy, as it might be relevant since you are using Cowboy. It can help reduce some of the boiler plate that the default Cowboy setup uses. I used it for a toy Rock Paper Scissors app I was working on and found it worked quite well for both HTTP and Websockets. It also uses my sql migration library strata, which might be helpful for you. Besides that I made these libraries, I prefer simple components that I can put together to build my own framework with.
Since frontend isn’t Erlang’s strong suit there are less options. The new framework Arizona is working on replicating Phoenix like behavior. Perhaps that is more inline with what you were thinking.
How is Nitrogen compared to Phoenix/Plans of Arizona? What does Phoenix that the others might no do (well)?
And what is the fuzz around LiveView? The exampled at Phonixe Live View documentation looks structurally very similar to the default generated example in Nitrogen with some content and an event handler.