Rust Reshapes the JavaScript World: Vinext, Warper, fnm, and a JS Engineer's Six Months with Rust

Published on 26.02.2026

bash — 80×24$pnpm dev▶ ready on localhost:3000$git commit -m "feat: og images"$npx tsc --noEmit✓ 0 errorsCODING

Vinext: Cloudflare Rebuilds the Next.js API Surface on Vite, Almost Entirely with AI

TLDR: Cloudflare released vinext, an experimental Vite plugin that reimplements roughly 94% of the Next.js API surface, enabling Next.js apps to run on Cloudflare Workers without the Next.js compiler toolchain. The kicker: the vast majority of the code was written by Claude Code in about a week.

Summary:

Let me tell you, this one made me sit up straight. Vinext is not a fork of Next.js, it is a ground-up reimplementation of the Next.js API surface on top of Vite. It supports both the App Router and the Pages Router, server-side rendering, React Server Components via the official Vite RSC plugin, server actions, ISR, middleware, streaming, metadata API, and a whole lot more. You drop it into your existing Next.js project, swap out the scripts, and suddenly you are running on Vite with Cloudflare Workers as the deployment target.

The real conversation starter here is the AI angle. Cloudflare explicitly states that "the vast majority of the code, tests, and documentation were written by AI (Claude Code). Humans direct architecture, priorities, and design decisions, but have not reviewed most of the code line-by-line." They have over 1,700 Vitest tests and 380 Playwright end-to-end tests serving as the primary quality gate instead of human code review. That is a bold statement about where software development is heading, and whether you find it exhilarating or terrifying probably says a lot about your current role.

Now, what the author tends to gloss over is the inherent risk. Ninety-four percent API compatibility sounds great until you hit the six percent that is not covered and your production app breaks at two in the morning. The "experimental" label is doing heavy lifting here. The fact that image optimization does not happen at build time, Google Fonts are not self-hosted, and some route segment configurations are just silently ignored could be real pain points for teams migrating production workloads. The project explicitly says "use at your own risk," and I would take that very seriously.

What is genuinely interesting from an architectural standpoint is the deployment story. Vinext deploys to Cloudflare Workers, which means zero cold starts and global distribution by default. The experimental Traffic-aware Pre-Rendering feature, which uses Cloudflare zone analytics to pre-render only pages that actually receive traffic, is a clever optimization that most teams should think about regardless of their platform. Why pre-render a thousand pages when only fifty get visited?

The competitive positioning is also worth noting. They explicitly call out OpenNext as a more mature and battle-tested alternative. If you need production-ready Next.js on non-Vercel platforms today, OpenNext is the safer bet. Vinext is more of a proof of concept for a possible future where the Next.js API surface becomes a portable standard that can run on any toolchain.

Key takeaways:

  • Vinext reimplements 94% of the Next.js 16 API surface on Vite, targeting Cloudflare Workers deployment
  • The project was built almost entirely by AI (Claude Code) in one week, with tests as the primary quality gate
  • Supports both App Router and Pages Router, RSC, server actions, ISR, middleware, and streaming
  • Migration can be done via an AI agent skill or the manual vinext init command
  • Not production-ready; explicitly experimental with known limitations around image optimization, fonts, and edge cases
  • OpenNext remains the more mature option for non-Vercel Next.js deployment today

Tradeoffs: Gain Vite's faster builds and Cloudflare Workers' edge deployment, but sacrifice the battle-tested stability of the official Next.js toolchain and accept incomplete API coverage in production.

cloudflare/vinext: Vite plugin that reimplements the Next.js API surface


Six Months of Rust: A JavaScript Engineer's Honest Field Report

TLDR: A long-time JavaScript and TypeScript engineer shares their experience learning Rust over six months while maintaining a production game server backend. The verdict: Cargo is a dream, the compiler is strict but brilliant, error handling is elegant, but deadlocks will humble you.

Summary:

This is one of those articles that resonates deeply if you have spent years in the JavaScript ecosystem. Kitty Giraudel, a frontend engineer with nearly 15 years of experience, picked up Rust to support a friend's mobile game server. The stack is straightforward: a Rust program on a single machine with MongoDB and websocket connections. What makes this perspective valuable is the raw honesty about what works, what does not, and what nobody warns you about.

The praise for Cargo is well-deserved and worth amplifying. If you have ever spent half a day fighting CommonJS and ESM compatibility issues, or juggled npm, pnpm, and yarn across different projects, you know the pain. Cargo just works. It handles compilation, dependency management, and workspaces without the drama. The comparison is not even close, and the author rightfully calls out that some older JavaScript projects are essentially untouchable not because they are boring, but because the tooling overhead of updating them is soul-crushing.

The section on the compiler is the real meat. Rust's compiler is famously strict, and the author describes it as a wall at first, especially around ownership and borrow checking. But the error messages are remarkably good, with stack traces, error codes, human-readable explanations, fix suggestions, and documentation links. Contrast that with "undefined is not a function" and you understand the appeal. The key insight is this: if the code compiles, it almost certainly runs correctly. Runtime failures become nearly impossible, which is an enormous confidence boost for deployment.

What I appreciate most is the honest section about deadlocks, which the author calls their nemesis. This is the thing that experienced Rust advocates often hand-wave away. When you are working with concurrent systems using read-write locks and mutexes, you can absolutely deadlock your server into an unrecoverable state. The author admits this is a "skill issue" but correctly points out that for anyone learning Rust on non-trivial systems, this is a real and painful obstacle. If you are a team lead considering Rust for your next backend, factor in the learning curve around concurrency, not just ownership.

One thing missing from this article is any discussion of the ecosystem maturity for web backends specifically. Rust's web frameworks like Actix and Axum are solid, but the ecosystem of middleware, authentication libraries, and ORM tooling is not as rich as what you get with Node.js and Express or Fastify. The author leaned heavily on AI coding agents to bridge their knowledge gaps, which is a pattern worth noting but also worth questioning for long-term maintainability.

Key takeaways:

  • Cargo's reliability and simplicity make JavaScript's package management ecosystem look chaotic by comparison
  • Rust's compiler errors are exceptionally clear, with actionable fix suggestions and documentation links
  • If Rust code compiles, it almost certainly runs correctly, eliminating most runtime failures
  • Error handling via the Result enum and pattern matching is more elegant and readable than try-catch
  • Deadlocks in concurrent systems remain a serious practical challenge for newcomers
  • AI coding agents significantly lowered the barrier to entry for learning Rust in a production context

Six months of Rust


Warper 7.2: Rust-Powered WebAssembly Meets React Virtualization

TLDR: Warper 7.2 is an open-source React virtualization library that offloads scroll calculations to a Rust-compiled WebAssembly module, achieving zero-allocation hot paths and constant-time operations for frame timing.

Summary:

Virtualization in React, rendering only the visible portion of a large list or grid, has been a solved problem for years with libraries like react-window and react-virtuoso. Warper takes a fundamentally different approach by moving the computationally intensive scroll calculations out of JavaScript entirely and into a Rust-compiled WebAssembly module.

The version 7 changes are architecturally interesting. Zero-allocation hot paths using TypedArrays mean that during scrolling, the performance-critical code paths do not trigger garbage collection pauses. The circular buffer operations for frame timing run in constant time, which matters when you are trying to maintain sixty frames per second during rapid scrolling. And the universal bundler support, covering Vite, Webpack, Rollup, esbuild, Parcel, and Next.js, means you can actually adopt this without restructuring your build pipeline.

The question I would push on is whether the added complexity of a WebAssembly dependency is justified for your specific use case. For most applications rendering a few hundred to a few thousand items, a pure JavaScript virtualization library is perfectly fine. Warper makes more sense when you are dealing with tens of thousands of items, complex grid layouts, or scenarios where scroll jank is a measurable business problem. The overhead of loading, compiling, and instantiating a WASM module at startup is a real cost, and it only pays off if the runtime performance gains matter for your users.

What is missing from the discussion is memory profiling data. Zero-allocation hot paths sound great in theory, but what is the baseline memory footprint of the WASM module itself? How does it compare to a well-optimized JavaScript virtualization library in real-world scenarios? Those numbers would make the case much more compelling.

This is also another data point in the growing trend of Rust and WebAssembly being used to optimize specific performance-critical paths in frontend applications, rather than rewriting entire applications. That pattern, surgical WASM optimization, is probably the most practical approach for most teams.

Key takeaways:

  • Offloads scroll calculations to Rust-compiled WebAssembly for zero-allocation performance during scrolling
  • Uses TypedArrays and circular buffers for constant-time frame timing operations
  • Supports all major bundlers out of the box including Vite, Webpack, Rollup, esbuild, Parcel, and Next.js
  • Best suited for applications with very large datasets where scroll performance is a measurable concern
  • Represents the broader trend of surgical WebAssembly optimization in frontend applications

Tradeoffs: Gain near-zero garbage collection pauses during scroll operations, but sacrifice simplicity and add a WebAssembly dependency with its own startup and memory costs.

Warper: Rust Powered React Virtualisation Library


Claude Code Skills: Reusable AI Workflows for Frontend Development

TLDR: Claude Code now supports custom "skills" that let developers define reusable, configurable AI workflows for frontend tasks like applying Three.js shader effects, turning one-off prompts into repeatable team tools.

Summary:

This one is about Anthropic's Claude Code introducing a "skills" feature that allows developers to package AI workflows into reusable, shareable units. The demonstration focuses on a Three.js shader hover effect skill that prompts for configuration options like effect type, intensity, and animation style, then applies chromatic aberration, wave, or other visual effects to your components.

The concept is straightforward but the implications are significant. Instead of writing the same long-winded prompt every time you want to accomplish a common frontend task, you define a skill once and invoke it with parameters. Think of it as functions for AI prompts. The skill knows what questions to ask, what configuration options to present, and how to apply the result to your codebase. For teams, this means you can standardize how AI-assisted development happens, rather than having every developer craft their own prompts with varying levels of quality.

What the article does not address, and what I think is the elephant in the room, is the maintainability question. When you package AI workflows into skills, who maintains them? How do you version them? What happens when the underlying model changes and the skill produces different output? The vinext project mentioned earlier in this newsletter actually uses Claude Code skills for migration, which shows the pattern is already being adopted, but the governance model for these skills in a team context is entirely undefined.

There is also the question of whether this creates a new kind of vendor lock-in. If your team builds a library of Claude Code skills, you are now dependent on that specific AI tool's API and behavior. The skills concept is sound, but I would want to see it evolve toward something more portable across different AI coding assistants.

Key takeaways:

  • Claude Code skills turn one-off AI prompts into reusable, configurable workflows
  • Skills can prompt for parameters, making them adaptable to different contexts and configurations
  • Useful for standardizing AI-assisted development practices across a team
  • Already being adopted in production tools like vinext for automated migration workflows
  • Governance, versioning, and portability across AI tools remain open questions

Claude Code Skills are the Future of Frontend


fnm: The Rust-Powered Node.js Version Manager That Replaces nvm

TLDR: fnm (Fast Node Manager) is a cross-platform Node.js version manager built in Rust that is faster and simpler than nvm, with support for automatic version switching, all major shells, and existing .node-version and .nvmrc files.

Summary:

If you are still using nvm and waiting seconds for your shell to start up, fnm is the upgrade you should have made a year ago. It is a Node.js version manager written in Rust that focuses on speed and simplicity. It is cross-platform, covering macOS, Windows, and Linux, and it works with your existing .node-version and .nvmrc files so the migration is essentially zero effort.

The installation story is genuinely good. You can install via curl script, Homebrew, Winget, Scoop, Chocolatey, or Cargo, which covers basically every platform and preference. Shell integration is available for Bash, Zsh, Fish, PowerShell, and even Windows Command Prompt. The automatic version switching via the --use-on-cd flag means fnm reads your project's .node-version or .nvmrc file when you cd into a directory and switches Node.js versions automatically. This is the feature that makes the biggest practical difference in day-to-day work.

What makes fnm worth talking about in the context of this newsletter's Rust theme is that it is yet another JavaScript ecosystem tool being rewritten in Rust for performance. The pattern is now unmistakable: SWC for compilation, Turbopack for bundling, Biome for linting and formatting, oxlint from OxC, and now fnm for version management. JavaScript developers are increasingly dependent on Rust-compiled tooling for their daily workflow without even realizing it.

The one thing I would flag is that fnm is essentially feature-complete for what it does. If you are on a team and standardizing tools, it is worth formalizing this choice and adding it to your onboarding documentation. The performance difference over nvm is not marginal; it is transformative for shell startup time, and that matters when you open dozens of terminal sessions a day.

Key takeaways:

  • Built in Rust for near-instant startup, dramatically faster than nvm
  • Cross-platform support covering macOS, Windows, and Linux with all major shells
  • Drop-in replacement that works with existing .node-version and .nvmrc files
  • Automatic version switching with the --use-on-cd flag eliminates manual version management
  • Part of the broader trend of Rust-powered JavaScript tooling replacing legacy Node.js-based tools
  • Installable via Homebrew, Winget, Scoop, Chocolatey, Cargo, or curl script

Schniz/fnm: Fast and simple Node.js version manager, built in Rust