Rolldown 1.0 RC, JavaScript Frameworks in 2026, and Lazy Iterator Helpers

Published on 27.01.2026

Announcing Rolldown 1.0 RC

TLDR: Rolldown, the Rust-based JavaScript bundler designed to replace both esbuild and Rollup in Vite, has reached Release Candidate status. It's 10-30x faster than Rollup while maintaining plugin API compatibility, and will ship as the default bundler in Vite 8.

This is the announcement the Vite ecosystem has been waiting for. Rolldown — the bundler that Evan You and the VoidZero team have been building to unify Vite's split-brain bundler architecture — is now at Release Candidate, meaning the API is stable and no breaking changes are planned before 1.0.

The numbers are impressive but the strategic implications are even more interesting. Vite currently uses two different bundlers: esbuild for development and Rollup for production builds. This dual-bundler architecture has been one of Vite's most persistent pain points, causing subtle behavior differences between dev and prod. Rolldown eliminates this by being fast enough for development (thanks to Rust and parallel processing) while also being compatible enough for production (thanks to Rollup plugin API support). Vite 8 will ship with Rolldown as the default, finally giving developers a single, consistent build pipeline.

Since the beta, the team has landed over 3,400 commits: 749 features, 682 bug fixes, 109 performance optimizations. The compatibility story is strong — Rolldown now passes 900+ Rollup tests and 670+ esbuild tests. They've also added features that neither Rollup nor esbuild offer, like granular code splitting control similar to what webpack provides, giving you the best of all worlds.

For teams running Vite projects, the migration path is straightforward: try the Vite 8 beta, which uses Rolldown out of the box. Existing Rollup plugins should work without changes. For teams using Rollup directly (outside Vite), you can drop in Rolldown as a replacement with minimal config changes. The RC period is the right time to test it on real projects and report issues before the stable release locks things in.

For architects evaluating build tooling, this is a significant moment. The Rust-rewrite trend in JavaScript tooling has been building for years (SWC, Oxc, Biome, Turbopack), but Rolldown is the first one positioned to become the default bundler for the most popular build tool in the ecosystem. If you're making build infrastructure decisions, Rolldown/Vite 8 should be on your evaluation roadmap.

Key takeaways:

  • Rolldown RC is API-stable — no breaking changes expected before 1.0
  • 10-30x faster than Rollup with full Rollup plugin API compatibility
  • Vite 8 will use Rolldown as its sole bundler, eliminating the esbuild/Rollup split
  • Includes features from both Rollup and esbuild, plus webpack-style granular chunking
  • Over 150 contributors, 3,400+ commits since beta

Tradeoffs:

  • Rust-native performance comes at the cost of a more complex contributor experience for the bundler itself
  • Rollup plugin compatibility enables ecosystem migration but constrains API evolution

Link: Announcing Rolldown 1.0 RC


JavaScript Frameworks — Heading into 2026

TLDR: The JavaScript framework landscape in 2026 is defined by three major shifts: AI-first framework design (led by Remix 3), isomorphic-first architecture replacing the server-first pendulum swing, and async-first primitives becoming foundational across React, Svelte, and others.

This is Ryan Carniato's annual JavaScript frameworks review, and this year it's less about new frameworks and more about fundamental shifts in how we think about building web applications. Three themes dominate, and they're all interconnected.

First, the AI-first framework. Remix 3 has taken the boldest position here by completely rebuilding from scratch — no longer on React — with an explicit goal of reducing domain-specific language so that AI can generate generic solutions more easily. Ryan Florence demonstrated asking AI to generate plain routines that slot directly into the framework without framework-specific knowledge. This is a direct contrast to frameworks that have invested heavily in specialized primitives (signals, effects, derived state). The question becomes: will ease of AI generation beat the guarantees that domain-specific primitives provide? Nobody knows yet, but it's the right question to be asking.

Second, isomorphic-first architecture. Last year saw pushback against server-heavy patterns like React Server Components and Islands architecture. Developers building complex, interactive applications found these models too constraining. The response has been a return to isomorphic patterns — code that runs in both server and client environments — but enhanced with modern capabilities like out-of-order streaming, server functions, and single-flight mutations. Tanstack Start and SvelteKit have joined SolidStart in adopting these patterns. The key insight is that you can get most of the server-rendering efficiency benefits without fundamentally changing your application architecture.

Third, and arguably most important: async-first primitives. Most JavaScript frameworks were built around synchronous guarantees — the VDOM and Signals both derive their power from synchronous consistency. But async operations (data fetching, optimistic updates, transitions) have always been bolted on awkwardly. React's years-long investment in Concurrent Mode and Transitions is finally paying off, and interestingly, Svelte has arrived at similar behavioral patterns through its compiler. The convergence suggests this is a genuine evolution, not just one framework's experiment.

The meta-observation that ties everything together is AI's impact on framework design philosophy. AI generates code the way a developer who doesn't understand a system does — it goes lower-level and sticks to what it knows. This is pushing frameworks toward solutions that provide explicit local control while implicitly playing nicely with the broader system. It's almost like designing for a team even when there's only one developer.

For architects and team leads, the practical takeaway is that the framework landscape is stabilizing around fundamentally better patterns, not just new APIs. If you're evaluating framework choices, look for how well a framework handles async operations natively, whether it supports isomorphic patterns without architectural constraints, and how well AI tools can generate code for it.

Key takeaways:

  • Remix 3 is rebuilt from scratch with AI-first design — no longer based on React
  • Isomorphic-first architecture is replacing the server-first pendulum swing of recent years
  • Async-first primitives are becoming foundational, with React and Svelte converging on similar patterns
  • AI is pushing frameworks toward simpler, more generic patterns that don't require deep domain knowledge
  • Framework stability matters more than framework novelty in the current landscape

Tradeoffs:

  • AI-friendly generic patterns sacrifice the safety guarantees of domain-specific primitives
  • Isomorphic-first gains architectural simplicity but sacrifices the server-only optimizations that Islands/RSC provide
  • Async-first design enables better UX patterns but requires ecosystem-wide adoption to realize full benefits

Link: JavaScript Frameworks - Heading into 2026


March Mad CSS

TLDR: A new competitive CSS event pits 16 developers against each other in single-elimination matches to recreate target UIs using only HTML and CSS — timed at 15 minutes per round.

This is just delightful. March Madness, but for CSS developers. Sixteen of the world's top CSS practitioners will compete in a single-elimination tournament where they race to recreate a target UI using only HTML and CSS within a 15-minute time limit.

The format is simple and compelling. Two participants get shown a target design. They have 15 minutes. The first person to hit 100% match wins, or if nobody gets there, the highest percentage takes it. Tie-breaker rules include checking the match in another browser and comparing total code written — a nice touch that rewards efficiency.

What makes this interesting beyond the spectacle is what it reveals about CSS mastery in 2026. We're at a point where CSS has become extraordinarily powerful — container queries, cascade layers, has() selectors, view transitions, subgrid, anchor positioning — and the gap between someone who deeply understands modern CSS and someone who relies on utility frameworks is wider than ever. A competition format like this showcases pure CSS knowledge in a way that's both entertaining and educational.

For teams, this is a great watercooler event. It's also a subtle reminder that investing in CSS fundamentals pays off. When your developers understand the platform deeply, they write less code, need fewer dependencies, and solve layout problems that would otherwise require JavaScript hacks.

Key takeaways:

  • 16 CSS developers compete in single-elimination matches to recreate UIs in 15 minutes
  • Winners determined by target match percentage or speed to 100%
  • Highlights the growing importance of deep CSS knowledge in an era of increasingly powerful CSS features

Link: March Mad CSS


Introducing Lix: A Universal Version Control System

TLDR: Lix is a version control system built on SQL databases that can meaningfully diff any file format — not just text — making it particularly relevant for AI agent workflows where changes to binary files need human review.

Git is brilliant for code. Git is terrible for everything else. Lix is built on this observation, and its timing couldn't be better given the rise of AI agents that modify files beyond source code.

The core insight is simple but powerful: Git does line-based diffs, which means binary files are effectively opaque. An AI agent updates a price in an Excel spreadsheet, and Git shows you "binary files differ." Lix understands file structure, so it shows you "price: 10 to 12" or "cell B4: pending to shipped." This makes AI agent changes to non-code files reviewable, reversible, and auditable — the same workflow we take for granted with code.

The architecture is genuinely interesting. Rather than inventing a new storage format, Lix adds version control on top of SQL databases. You get virtual tables like file, file_history, branches — queryable with standard SQL. This means it inherits all the durability, ACID guarantees, and corruption recovery of battle-tested databases. It's clever engineering that avoids reinventing what already works well.

Lix already has over 90K weekly NPM downloads, driven by its origins in the inlang localization infrastructure. The next version is being refactored to work as a preprocessor layer, which will enable support for any SQL database (SQLite, Postgres, Turso, MySQL) and SDKs for Python, Rust, and Go alongside the existing JavaScript SDK.

For teams working with AI agents that modify non-code assets — spreadsheets, documents, configuration files, design assets — Lix fills a gap that Git fundamentally cannot address. It's also relevant for teams doing localization, content management, or any workflow where structured data changes need review and rollback capabilities.

Key takeaways:

  • Lix diffs any file format semantically, not just line-by-line text changes
  • Built on SQL databases, inheriting ACID guarantees and standard query capabilities
  • Particularly relevant for AI agent workflows where non-code file changes need human review
  • Already at 90K+ weekly NPM downloads, expanding to Python, Rust, and Go SDKs

Tradeoffs:

  • Semantic diffing across file formats requires format-specific parsers, limiting extensibility to supported formats
  • SQL-based architecture gains query power and durability but adds database dependency compared to Git's self-contained model

Link: Introducing Lix: A universal version control system


Stop Turning Everything Into Arrays (and Do Less Work Instead)

TLDR: JavaScript's new iterator helpers provide native, lazy alternatives to eager array chains — processing only the data you need, when you need it, without intermediate array allocations.

This article addresses a pattern every JavaScript developer has written hundreds of times: chain .filter().map().slice() and move on. It works, it's readable, and it's also doing way more work than necessary. Every step in that chain creates a new array and processes every element, even if you only need the first 10 results from a thousand items.

Iterator helpers — now supported in all modern browsers and Node 22+ — give you the same expressive chaining syntax but with lazy evaluation. The key difference: instead of starting with an array, you start with an iterator via .values(), and each step only processes elements as they're requested by the next step in the chain. Call .take(10) at the end, and the entire pipeline stops after finding 10 matches. No intermediate arrays, no wasted computation.

The practical applications are exactly where front-end developers spend their time: virtualized lists (only process rows in the viewport), infinite scrolling (stop when you have enough items), paginated API calls (don't buffer entire responses), and large data tables. The async variant works with async iterables, making it a natural fit for streaming APIs and paginated fetches.

The article is honest about when NOT to use iterator helpers: when you need random access, when you rely on array mutation, or when your data is small enough that simplicity wins. Iterators are also one-shot — once consumed, they're done. And debugging can actually consume data, which is a gotcha worth remembering.

For teams adopting this pattern, the transition is gentle. The API surface mirrors array methods (map, filter, flatMap, reduce, find, some, every), and .toArray() converts back when you need an actual array. The main mental shift is remembering to start with .values() instead of working directly on the array. It's one of those features that, once you internalize it, makes the eager approach feel unnecessarily wasteful.

Key takeaways:

  • Iterator helpers provide lazy, chainable alternatives to eager array methods
  • .values().filter().map().take(10).toArray() processes only what's needed
  • Supported in all modern browsers and Node 22+ — no polyfills needed
  • Best suited for large datasets, virtualized lists, streaming data, and paginated APIs
  • One-shot consumption and no random access are key gotchas to remember

Tradeoffs:

  • Lazy evaluation reduces memory and CPU usage but introduces one-shot consumption semantics that prevent reuse
  • Iterator syntax gains efficiency but sacrifices the familiarity and random access of plain arrays

Link: Stop turning everything into arrays (and do less work instead)


Electron 40.0.0

TLDR: Electron 40 ships with Chromium 144, Node.js 24, and V8 14.4, bringing HDR rendering support, improved accessibility APIs, and deprecating direct clipboard access from renderer processes.

Electron keeps its relentless release cadence going with version 40, which is a significant stack upgrade: Chromium jumps from 142 to 144, Node.js leaps from v22 to v24, and V8 moves to 14.4. For Electron app developers, the Node.js 24 upgrade is the headline — it brings all the latest Node features and performance improvements to your desktop apps.

Notable new features include HDR color space support for offscreen rendering (RGBAF16 with scRGB), improved accessibility management with more granular controls, the ability to persist File System API grants within sessions, and support for dynamic ESM imports in non-context-isolated preloads. There's also a nice quality-of-life improvement where DevTools automatically focuses when you inspect an element or hit a breakpoint.

The breaking changes are worth noting. Direct clipboard API access from renderer processes is now deprecated — you'll need to move clipboard calls to your preload script and expose them via contextBridge. This follows Electron's ongoing security tightening around renderer process capabilities. MacOS debug symbols also changed from zip to tar.xz compression to handle larger file sizes.

For teams maintaining Electron applications, the Node 22 to 24 jump is the most impactful change. Ensure your app's dependencies are compatible with Node 24 before upgrading. The clipboard deprecation requires code changes but follows the security best practice of limiting renderer process capabilities.

Key takeaways:

  • Major stack upgrade: Chromium 144, Node.js 24, V8 14.4
  • New HDR rendering support and improved accessibility APIs
  • Clipboard API deprecated in renderer — move to preload + contextBridge
  • Electron 37.x reaches end of support

Link: Electron 40.0.0