It can be difficult to keep up with everything that is going with JavaScript frameworks. This document provides brief highlights of recent happenings in the JavaScript frameworks ecosystem over the past year or so. For a longer discussion of some of these topics, check out the corresponding Navigating the JavaScript Frameworks Ecosystem talk from this year's Google I/O event.
Framework Trends and Convergence
As shown in the chart, JavaScript frameworks are converging on a number similar features and architectures. These include component-based architecture, file-based routing, and modern SSR support. This convergence demonstrates the maturity and evolution of the ecosystem as frameworks learn from each other and adopt best practices.
At the same time, a number of recent trends (such as server components and different approaches to fine-grained reactivity) continue to set individual frameworks apart. To help understand these trends better, we dive into them one framework at a time.
Angular
Angular's recent releases have contained a variety of significant changes including signals, deferrable views, NgOptimziedImage, non-destructive hydration, and partial hydration. Some highlights include:
- Signals: Signals are an approach used by multiple frameworks (including now Angular) for tracking state in an application. Angular Signals can improve runtime performance—including Interaction to Next Paint (INP)—by reducing the number of computations that must occur during change detection.
- Deferrable views: Deferrable views make it possible to defer the loading of specific components, directives, and pipes. For example, you can defer loading a dependency until the content enters the viewport or until the main thread is idle.
- NgOptimizedImage: NgOptimizedImage is an image component for Angular that automates the adoption of image loading best practices.
- Non-destructive hydration: Non-destructive hydration fixes the flicker that would occur when the DOM of server-side rendered Angular apps was rebuilt client-side.
- Partial hydration: The Angular team will soon be releasing the developer preview of partial hydration. With partial hydration, by default, the browser doesn't load any of the page's JavaScript when the page is rendered. Instead, specific parts of the page are hydrated as the user interacts with the page.
Astro
Astro, a modern static site builder, has been making waves with its innovative approach to web development. With a focus on performance and developer experience, Astro has released several exciting features and updates:
- Astro Islands: Astro Islands allow developers to build interactive UI components that are isolated from the rest of the page. This enables efficient updates and optimal performance.
- Hybrid rendering: Astro now supports hybrid rendering, combining the benefits of static site generation and server-side rendering for enhanced flexibility.
- Image and Picture components: Astro has introduced new Image and Picture components that simplify the handling of images and provide automatic optimization.
- View Transitions support: Astro offers built-in support for the View Transitions API, enabling smooth and seamless page transitions.
- Astro Dev Toolbar: The Astro Dev Toolbar provides a powerful set of tools for debugging and optimizing Astro applications.
React
Last year, the release of React Server Components introduced a new approach to React components. Since then the React team has been working on a variety of new features including the React Compiler and Server Actions features, as well as:.
- Server Components: React server components are components that fetch data and are rendered on the server before being streamed to the client. This moves rendering work to the server and reduces the amount of code that needs to be shipped to the client.
- React Compiler: React Compiler is a compiler that can automatically memoize components. This improves performance by reducing unnecessary re-renders. The React team has said that developers will be able to adopt the React Compiler without making any code changes.
- Server Actions: Server Actions enable client-to-server communication. With Server Actions, you can define server-side functions that can be invoked directly from your React components, eliminating the need for manual API calls and complex state management. This can be particularly useful for things like data mutations and form submissions.
- Asset Loading: React has been working on declarative APIs for preloading and loading assets like scripts, styles, fonts, and images.
- Offscreen Rendering: React has also been working on Offscreen Rendering. Offscreen Rendering is "an upcoming capability in React for rendering screens in the background without additional performance overhead. You can think of it as a version of the content-visibility CSS property that works not only for DOM elements but React components, too."
Remix
Remix, a full-stack web framework, has been gaining traction in the developer community. With its focus on web fundamentals and enhanced developer experience, Remix has introduced several notable updates:
- Remix 2.0 release: Remix 2.0, released in September 2023, brought significant improvements and new features to the framework.
- Stable support for Vite: Remix now offers stable support for Vite, a fast and lightweight build tool, providing faster development builds and improved performance.
- SPA mode: Remix introduced SPA mode, which allows building purely static sites without requiring a JavaScript server in production. This enables developers to use Remix's powerful features like file-based routing, automatic code splitting, and more, while maintaining the simplicity of static site deployment.
Next.js
The release of Next.js 13.4 in May 2023 was particularly noteworthy as it ushered in stable support for React Server Components, streaming, and Suspense. Since then, Next.js continues to build out support for new React APIs (for example, Server Actions) and iterate on the developer experience through initiatives like Turbopack. Other highlights include:
- App Router: App Router, which became stable in Next.js 13.4, is a new way of structuring and managing routing in Next.js applications. App Router is a prerequisite to using new Next.js features like shared layouts and nested routing, as well as new React APIs like React Server Components, Suspense, and Server Actions in your Next.js app.
Turbopack: currently experimental) approach to page rendering that is built on top of React's Suspense API. Partial prerendering renders a page using a static loading shell. However, the shell leaves "holes" for the dynamic content within the page, and this content is loaded asynchronously. This provides the performance benefits of a cacheable, static page while still being able to incorporate dynamic data into page content.
Vue
Vue's most recent release, Vue 3.4, included a variety of performance improvements. Vue is also currently working on Vue Vapor, which is also performance-oriented. Here are a few highlights of what's going on in this space:
- Vue 3.4 released: Features include "a completely rewritten parser that is twice as fast, faster SFC compilation, and a refactored reactivity system that improves re-compute efficiency."
- Vue Vapor Mode: Vue is working on Vapor Mode, an opt-in, performance-oriented compilation strategy that works with Vue Single File Components. Vapor Mode generates code that is more performant than the code currently produced by the Vue Compiler. Additionally, using Vapor Mode with all components eliminates the need for the Vue Virtual DOM (which reduces bundle size).
- Vue 2 reaches EOL: Vue 2's end-of-life (EOL) was December 31st, 2023. However, Vue 2 is still fairly widely used: ~50% of Vue npm package downloads are for Vue 2.
Nuxt
Nuxt is nearing the release of Nuxt 4. In addition to Nuxt's frequent framework releases over the past year, the Nuxt modules ecosystem has grown to almost 220 modules. Some recent developments in this space include:
- Nuxt 3.x releases: Nuxt usually ships new minor releases monthly. Some highlights from these releases include support for Vite 5, server-only and client-only pages, client-side Node.js support, and native web streams. * Nuxt Modules: Highlights from the Nuxt Modules ecosystem include the release of the new nuxt/fonts module, and the 1.0 releases of nuxt/image and Nuxt DevTools. Upcoming module releases will include nuxt/scripts, nuxt/hints, nuxt/a11y, and nuxt/auth.
- Server Components (islands components): Nuxt continues to build out their support for server components (which is currently experimental). In Nuxt, these server-rendered components can be used within static sites - enabling adoption of an Islands Architecture.
Solid
Solid has been working towards the stable 1.0 release of their meta-framework SolidStart. SolidStart boasts fine-grained reactivity, isomorphic routing, and support for a variety of rendering modes. Highlights include:
- Fine-grained reactivity: Solid's reactivity system allows for precise updates and optimal performance, enabling efficient rendering and state management.
- Isomorphic routing: SolidStart provides a unified approach to routing, allowing developers to define routes that work seamlessly on both the client and the server.
- Flexible rendering modes: SolidStart supports various rendering modes, including server-side rendering, static site generation, and client-side rendering, giving developers the flexibility to choose the best approach for their application.
Svelte
In the past year, the Svelte team has been focused on the upcoming release of Svelte 5, which will be significant. Other highlights include:
- Svelte 5 is coming: In addition to including a "rewrite of the Svelte compiler and runtime", Svelte 5 also introduces the concept of Runes.
- Runes announced: Runes are an upcoming feature in Svelte 5. "Runes unlock universal, fine-grained reactivity... With runes, reactivity extends beyond the boundaries of your .svelte files... Svelte 5's reactivity is powered by signals - however, [unlike other frameworks], in Svelte 5, signals are an under-the-hood implementation detail rather than something you interact with directly."
- SvelteKit 2 released: SvelteKit is the meta-framework for Svelte. Features in this release include shallow routing and support for Vite 5.
Chrome Aurora
Chrome Aurora is a team at Google that collaborates with various open-source web frameworks to improve the user experience—particularly performance—across the web. Here are some of the initiatives that we've contributed to over the past year:
- Images (next/image, NgOptimizedImage, and nuxt/image)
- Font utilities (next/font, nuxt/fonts, and unjs/fontaine (Vite plugin)
- Script loading (next/script and nuxt/scripts)
- Third-party script loading (next/third-parties, nuxt/third-parties, and Angular's YouTube and Google Maps components)
- Rendering: (Angular SSR / hydration)
Conclusion
The JavaScript framework ecosystem continues to evolve at a rapid pace, with each framework bringing its own set of innovations and improvements. Whether you're interested in the latest features of established frameworks like Angular, React, and Vue, or exploring newer options like Astro, Remix, and Solid, there's no shortage of exciting developments to keep up with.
As developers, staying informed about these advancements helps us make informed decisions when choosing a framework for our projects. By understanding the strengths and unique features of each framework, we can select the one that aligns best with our project requirements and development preferences.
We hope this overview has provided you with a glimpse into the current state of JavaScript frameworks. To dive deeper into the topics covered in this blog post, be sure to check out the accompanying talk from Google I/O. Happy coding!