- Python: Django, Flask
- Ruby: Ruby on Rails (RoR)
- PHP: Laravel
- JavaScript: ReactJS
I think it's nice to hear are about lesser-known web frameworks not often in the spotlight. If you are using a lesser-known or less popular web framework, what made you choose the framework? What do you like (or dislike) about the web framework you use?
I used to think my distaste for new and upcoming Javascript frameworks is a sign of getting old and not being as adaptable as I used to. But nowadays my thinking has shifted to seeing it as a instant loss of productivity with little upside.
Just like musicians don't switch instruments every time they see something shiny. Neither should we, or at least without feeling guilty about it. Mastery takes time.
Remix seems to use an approach similar to Hotwire Turbo Frames and a syntax of React JSX. This allows creating composable pages and loading partials in a page while still being able to create React components.
The main use case for me is web3 where almost all libraries are in Javascript. And I want to have the least friction for this move. It basically encapsulates the server and client side of an HTTP request in a single component and handles the json parsing operations under the hood.
You can argue that it might not necessary and a template engine can come much handier. I believe NestJS handles that but if you need the React JSX and reusable components it can be quite practical.
From the author of the Sequel gem. It can do everything that Rails can, faster and lighter by order of magnitude, expandable (turn on only the plugins you need), and it does it all 'the Ruby way', not 'the Rails way'. That means simplicity, clarity and power. Generally, all software Jeremy Evans releases is of excellent quality and actively supported. Oh, and this Roda framework is in active use by the US government and is subject to regular security audits...
The definition of obscure but powerful and quite beautiful web framework.
I write Python almost exclusively now, but still pine for something like CodeIgniter. Flask is nice because it lets you bolt on whatever you want, but you spend a lot of time choosing, prototyping, and often discarding libraries. Django does a lot of heavy lifting but has (IMO) a very steep learning curve. There doesn't seem to be anything (or at least anything I've liked) in between.
For me personally it's a very productive framework for backend APIs or web projects with server side templating with Thymeleaf as the template engine.
My setup combines the flexibility/configuration/productivity of Spring Boot (and the full JVM library ecosystem) with the modern language features and ergonomics of Kotlin.
I keep things simple in most of my projects. No reactive/coroutines/graalvm. One-thread-per-request blocking model is good enough for most of my use cases. Annotation based DI and configuration.
Using it for some personal projects with Vite and it is a breath of fresh air. I use React for work during the day, but coding in Svelte just brings me joy.
Working with Elm code is satisfying to me. It's generally easy to revisit code I last worked with months ago and get immediately fluent with it again. The "Elm Architecture" (model / update / view) with all external interaction done over "ports" is so clean (albeit with boilerplate). Integrating with JS libraries has to be done over ports (async one-way messaging) but it works well enough in practice. Vite provides a decent dev/build toolchain with hot-reloading of all Elm, JS, and CSS code. The Elm framework is very opinionated and has stopped evolving, but it's mostly a joy to work with.
Why: No JS build toolchain hell, tight control over dependencies (you know because software supply chain), blazing speed, really nice live editing of go templates without server restarts, fully supportive of the browser's back/forward cache, and a single binary to deploy (plus the templates, CSS, etc.). Simpler DevOpsLife!
On the back end, for small projects, using a full-fledged framework is usually overkill. Writing a simple API that reads and write normalized data is quite trivial, and when one is writing everything it's easier to understand what's going on.
By this I mean that some behaviors come from the framework and can sometimes surprise you. For example, in Backbone, change events on the model are triggered not when an instance is updated, but only if the new version is different from the old. This makes sense, but the problem is that the comparison is only done on a shallow level. When updating deep properties, no change event is triggered. This took me some time to figure out.
Light frameworks have fewer unexpected behaviors, by virtue of being small.
I really enjoy JavaScript, specifically the combination of Express on the back-end and Vue on the front-end, and I got tired of having to do so much setup every time I wanted to work on a new project. So I abstracted it out into its own thing and started adding fixes to all the other little things that bothered me about web development, like having to write validation & business logic on the front-end and back-end instead of being able to use shared code, having to manually migrate Stripe products, etc.
I've been working on adding a deploy solution based on Pulumi [2] in the last few days to finally finish out the 1.0 feature set, which will mark a pretty exciting milestone in a several years-long journey!
---
If you have used a good batteries included MVC like Django before, you’ll feel at home. I made a production ready app in a few weeks with it and Prisma as ORM, that’s been the base of our startup and served us wonderfully. Can’t recommend it enough, as it is really powerful and is very extensible and as obvious by the number of plugins and examples available.
Still, I’d recommend it for small projects where you need binding.
[0] https://www.webtoolkit.eu (their complete website is built using Wt)
Both are doing some really cool forward thinking stuff, both have excellent developer experience and both are still currently not particularly popular on the web but expect them to both be huge in the next couple of years.
[1]: https://github.com/htacg/tidy-html5/issues/996
Why? I have been on a bit of a minimalist streak recently and I wanted to see if I could keep things simple and as close to treating it all as text as possible. So far I have to say that it feels refreshing and trying to come up with simple solutions has made me feel much more motivated to get coding.
Now on version 6, it's fast, well maintained, mature, and has good docs with readable code.
@bdarnell has done an excellent job maintaining it.
Here's one example:
Tornado supported async style coroutines before asyncio was a thing. Now it uses asyncio under the hood by default -- and it did so with an exceptionally smooth transition.
http4s: Focused on functional programming, more of a library than a framework. Doesn't define the architecture of your program as much as Play and can therefore be integrated into your project more easily if you want to add HTTP to an existing project.
I enjoy working with either of these two. Pick Play if you want a framework (contains everything to get going with HTTP but forces a certain architecture). Pick http4s if you want a library and/or more focus on functional programming.
I don't think I've ever had so much _fun_ writing a web app before :)
1) Nette https://nette.org/en/
2) Phalcon https://phalcon.io/en-us
If you agree, we should talk :)
Java: Play 1 https://www.playframework.com/documentation/1.5.x/guide1
JavaScript: lol, no, https://htmx.org and https://hyperscript.org
likes: Play 1 is a pretty good JVM take on Rails, a little too much bytecode magic for my tastes, but still very low friction
htmx and hyperscript are my own babies. htmx improves the expressiveness of HTML and hyperscript is a reinterpretation of HyperTalk for the web. I am not objective about it, obviously, but I do love working with them: I think they keep the web the web in a way most other approaches don't.
dislikes: Play 1 is really old and is barely supported. htmx and hyperscript are both written by a lunatic I don't really like sometimes.
JS - I still have a tiny bit of MooTools in production because I have found some more complex animations nearly impossible to port to pure css without resorting to horrible hacks. It really had an amazing animation “Fx” toolkit, but given it’s nature of prototype pollution, it design as essentially a patch to the language rather than a framework, you really should not use it these days.
[1] https://github.com/sebastianconcept/Mapless [2] https://github.com/sebastianconcept/lobster-ui
This was the very first framework I learned when I first learned PHP, and it has always just been so incredibly _easy_ to accomplish most common MVC tasks that I've stuck with it. I've become quite the expert in the framework over the years, even managing to make it bend quirky ways that it was not meant to in service of business goals. That has made me an extremely valuable resource for companies using the framework, and so I keep using it. Plus, I enjoy it immensely.
Because it's the only Haskell web framework I know about;)
JS: Sveltekit, Astro.build
Sveltekit for web apps because it's insanely well build & ships compiled JS code instead of a large lib like most big contenders do.
Astro for websites because it doesn't force you into any frontend frameworks (you can use Svelte, Vue, React) and focuses on static sites + partial hydration. Awesome for web performance / SEO!
Python: FastApi
Fastest way to build fast APIs with Python.
I ended up choosing Riot.js. Worked pretty nicely for the niche task I had for it.
Quoting from their website [1]:
"Quasar [...] is an MIT licensed open-source Vue.js based framework, which allows you as a web developer to quickly create responsive++ websites/apps in many flavours:
SPAs (Single Page App)
SSR (Server-side Rendered App) (+ optional PWA client takeover)
PWAs (Progressive Web App)
BEX (Browser Extension)
Mobile Apps (Android, iOS, …) through Cordova or Capacitor
Multi-platform Desktop Apps (using Electron)
Quasar’s motto is: write code once and simultaneously deploy it as a website, a Mobile App and/or an Electron App. Yes, one codebase for all of them, helping you develop an app in record time by using a state-of-the-art CLI and backed by best-practice, blazing fast Quasar web components."
Using it for a few years now I must say that it always impresses me with its completeness and high quality documentation. Cannot recommend it enough.
If I find the time, I will clean it up and open source it. And for side projects I will use it again.
I like Warp because it's akin to a layer on top of Hyper (for HTTP) and Tokio (for async), and can go down into these deeper layers as you wish.
I'm using Warp now because I'm trying all the Rust web frameworks. I like Rust Actix for larger production projects that favor a more-long-term ecosystem. I like Rust Rocket for its user-friendly ideas and superb tutorials for onboarding.
Obviously, it comes with constraints. You can't really swap out parts/libraries if you find a better one to suit some need. And you can't really stray too far from the beaten path; you have to do things The Ember Way. But the consistency and organization made for a really nice developer experience.
Also, I found the community really friendly and welcoming, which has not been my experience in the wider JS world.
Plain old JavaScript.
Bootstrap for CSS/HTML tho.
Maybe I’m old, but learning frameworks doesn’t speed up or simplify anything for me.
1) Clojure is a superpower
2) Interceptor-based approach (think: dynamic middlewares) works really well and it’s flexible.
Clojure has no “frameworks”, but Pedestal has all the batteries I need included.
Now it’s more about applying certain principles, such as CA and preferring simplicity over dependencies.
I’ve tried some web frameworks and found them easy to get started with but they carry so much bloat and unnecessary cruft.
It’s way easier for me to consider my code responsibilities and build simple software that is easy to test, painless to maintain, and finally simple enough for anyone new (or a newbie) to pick up with what they know, without having to learn the nuances of the framework.
With that said I’ll say my favorite popular framework is phoenix. I was studying elixir five years ago and used phoenix to build a few simple apps. Great community and documentation.
Backend app boiler plate [dependencies] already setup for anyone wanting to build backends in kotlin
git clone https://gitlab.com/asad-awadia/kotlin-server-app.git
I work on a small custom site that has a particular workflow - a HTML/CSS guru creates the very-custom pages (no two are alike) in Webflow, then I jetpack in at the end and hook up the dynamic bits. My work is 90% hiding/showing elements and filling in text.
Anyone have suggestions for this kind of workflow, where the HTML is the source of truth about the layout/structure and I just fill in the data? The goal of the workflow is to allow the HTML guru to complete their portion + get it reviewed without eng help, and minimize the coordination needed between HTML and eng.
I think this framework grew out of the initial development team's needs for a fast, lightweight Java framework. (I wasn't there, not sure how much looking around they did, but this was years and years ago.) It's now foundational for our applications.
We've had some folks at the Boulder Ruby meetup present on Hanami, which appears to have better separation of concerns and testability as well as less magic than ruby on rails. Hard to compete with the ecosystem, though.
If you want something that scales out horizontally akka-http + an distributed akka stack (cluster, sharding, etc) works beautifully. Especially pairing it with websockets/grpc streaming, you can end-to-end stream pretty effortlessly.
I like it because it just gets out of my way. I get declarative DOM updates like in React, but without any heavy-handed idioms, behavior that's tricky to understand, or subtle footguns.
It feels more like using a library than integrating with a framework. Most of my code is just boring variables and function calls, as if I have a simple declarative layer between me and the DOM but I'm otherwise writing vanilla JS/TS.
I made it because I don't like all the existing frameworks. That said, it uses Laminas Diactoros because not using that would be to reinvent the wheel.
for frontends i currently use aurelia.
my first frontend framework was angularjs, which i choose before it was popular, as it what i felt was the best framework at the time.
when angularjs started showing its age i looked around for alternatives and found aurelia. other alternatives at the time were react, vuejs and angular 2. aurelia is much more standards oriented, and cleanly separates templates and code, which is something i value, and which is one reason to reject vue. likewise angular 2 felt overloaded with its custom syntax and parsing mechanism. react felt way to different and just didn't seem attractive.
i will stick with aurelia until i get to a point where it doesn't let me build what i want/need, and only then will i look for alternatives.
It was mired in controversy a while back but now it's one of the most feature complete frameworks available. I've been following the book zero2prod.com which implements an API service via actix-web as a way to learn Rust and backend web development in general, which is nice.
Svelte is king in DX, development velocity, and quality for the vast majority of web projects. I can build a JAMStack website in a day and an app in a week.
If I had to use something else, I would reach for Astro for static sites and the latest version of Nuxt for an app.
I've been using Django for the past 2 years now.
a) Python-Django? b) Ruby? c) Other?
I already know python, and I would like to learn a framework to build MVC's for startups!
Arguably the first JS equivalent of web development frameworks such as Laravel/Rails
PHP: I think you need to add Symfony to your list