Meta-Frameworks Roll Out
Tags: javascript, webdev
Published: 2022-08-15 04:37:29

After years of relative stability in modern frontend (FE) development, it seems that in the past ~year it went back into a massive discovery and growth phase. I'm sure we can all feel the new growing pains. In my opinion, the largest contributors to this new period of growth have been (in no particular order):

1. Vite
2. Inflow of money and bought time into OSS development
3. Growing popularity of different reactivity and component models
4. Growing number of meta-frameworks thanks to a lower barrier of entry
5. Exploration of old/new hydration strategies
6. Increase in services at the edge that is also becoming more accessible
7. Cloud-based dev environments

It's common in the FE world that some tool, architecture, pattern, or technology (which I'll just group and call invention) comes along with the right level of abstraction, DX, performance gain, and/or productivity boost so much so that it shakes everything up. Some examples include jQuery, Backbone, Angular 1, React, Rollup/Webpack, and as of more recently Vite. These inventions completely redefine the FE landscape over time, both in open-source and commercially.

The one invention that stands out to me on the mentioned list is [Vite](https://vitejs.dev/). It stands out simply for the fact that it's been a keystone in unifying a critical part of our FE tooling. In an already fragmented ecosystem, this has been a welcomed change.

**Why is the unification of tooling in FE important?**

It's a point of standardization in userland where both library/framework authors and everyday developers can discuss ideas, contribute bug fixes, create plugins, build tools, implement best practices and design common patterns that everyone can take advantage of. In short, it enables us to more effectively work towards similar goals whilst staying [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself).

It's been an amazing feat of engineering to see so much tooling rally around Vite. Interestingly, the unification of build tooling has made it abundantly clear that the idea of a great JS framework war where one victor rises from the ashes is just a fairytale. I know some hope "JS fatigue" will one day end but I see the opposite - it's being embraced. Each framework's reactive primitives, scheduler, component model, DSL, DX tradeoffs, hydration strategies, data loading patterns, and so on are adopted based on the individual user, team, and project preferences and requirements. There are just too many variables for one solution to rule them all. It seems that through tools like Vite, the JS community at large can embrace their differences and find a common level to abstract at - the application development and building layer.

Next.js held the throne for years but it seems events this year might've paved the way for a new era, the meta-frameworks war (until we realize that's a mirage too). After that, we'll probably do the same thing with JS runtimes. The truth from here is that meta-frameworks will continue to emerge as new Web APIs are made available, and as newer technologies become more accessible. Both Vite and new service-layer APIs such as the [Build Output API](https://vercel.com/docs/build-output-api/v3) from Vercel are drastically lowering the barrier to entry.

Landscape shifts can be both destructive and healthy as it brings with it new architectures, tools, technologies, champions, tribes, opportunities, and challenges. I hope that we continue to find common grounds to work from so we can further unify other parts of FE development. The more our tooling is unified, the more we can work together to mitigate the destruction brought with each shift and embrace the good. 

---

A part of FE development that I think desperately needs a solution today is the ability to build and distribute UI libraries that "just work." I'll be diving deeper into all of this and why Web Components haven't succeeded yet in a follow-up blog post. I'm also working on tooling in this exact space so feel free to [follow me on Twitter](https://twitter.com/mihar_22) for updates.