terminal
Weekly Digest // JS_FRAMEWORKS — Week 2-2026
codeWeekly Report

JavaScript — 2026 Week 2

JS frameworks, React/Vue/Svelte, and runtime updates

calendar_todaysummarizeWeek 2-2026
ECOSYSTEM

Web dependencies are broken. Can we fix them?

Lea Verou argues that the web platform has never given JavaScript a first-class dependency management system, forcing bundlers like Webpack, Rollup, and esbuild to fill a gap they were not designed for. All current bundler-free alternatives — deploying node_modules/, importing from CDNs like Unpkg/JSDelivr, copying packages locally, or using import maps — share fatal flaws: security risks, broken encapsulation, inability to handle transitive dependencies, and dependency on HTML templating. Import maps in particular violate locality, composability, and scalability, effectively recreating a bundler in JSON. Verou proposes concrete platform-level fixes: external import maps via <script type=importmap src>, import maps injectable through DOM methods (already working in all browsers, she discovers mid-post), import maps delivered via HTTP Link headers, and a clientDependencies field in package.json. A more radical strawman treats bare specifiers as a new specifier: URL protocol resolvable server-side. The practical consequence is clear: until the platform owns dependency resolution, even simple projects pay a usability cliff the moment they add a first dependency.

Web dependencies are broken. Can we fix them?
Read Articlearrow_forward
Video · DX32:20

I'm addicted to Claude Code (i get it now)

Theo (t3.gg) documents how running up to six parallel Claude Code instances over a two-week holiday break—after Anthropic doubled rate limits—changed his workflow entirely. He built a full-stack image generation studio (web + React Native mobile app in a Turbo Repo monorepo using Expo, Nativewind, and Convex) without opening an IDE once, and a browser extension that locks him out of Twitter while Claude Code jobs are running. A single prompt asking Claude to convert the web project into a Turbo Repo monorepo with a new Expo app took over an hour and produced a 2,300-line PR that Greptile scored 5/5 confidence. He estimates the $200/month subscription delivered roughly $1,500 of inference, hitting only 14% of the weekly limit even at full throttle. Key caveats: these tools work significantly better for experienced engineers who can catch model mistakes, --dangerously-skip-permissions mode is powerful but risky, and context compaction and history management remain rough edges.

AI_INFOGRAPHIC
I'm addicted to Claude Code (i get it now) — infographicWATCH_VIDEOarrow_forward
Article · TOOLINGREAD TIME: 4m

ESLint v10.0.0-rc.0 released

ESLint's first v10 release candidate ships three notable developer-facing changes. The RuleTester API gains a requireData assertion option: when set to true, any invalid test case whose messageId references a placeholder-bearing message must now supply a matching data object, catching inconsistencies between rule messages and test definitions. Stack traces for failing test cases are also improved, decorating output with invalid[N] indices and clickable file:line references compatible with VS Code terminals. Separately, the max-params rule adds a countThis option (superseding the deprecated countVoidThis) that, when set to "never", excludes TypeScript this annotations from the function parameter count. The release candidate is installable via npm i eslint@next --save-dev or pinned as eslint@10.0.0-rc.0; a full migration guide is available for the breaking changes introduced in v10.

READ_FULL_LOGarrow_forward
Article · FRAMEWORK UPDATEREAD TIME: 12m

Why Does Your Angular Component State Reset When You Move It? A Deep Dive into CDK Portals

Moving an Angular component between DOM locations with conditional rendering or ngTemplateOutlet silently destroys and recreates it, resetting all signals, timers, and form state. The article benchmarks three CDK approaches: ngTemplateOutlet creates a fresh embedded view on every attach; TemplatePortal from @angular/cdk/portal provides lifecycle control but still creates a new view on attach; DomPortal is the only approach that physically reparents the existing DOM node, preserving the live component instance, all Angular signals, and — crucially — the origin injector context so feature-scoped DI providers remain intact. Implementation uses viewChild<ElementRef> with an effect() to initialize new DomPortal(element), then [cdkPortalOutlet] on a real div outlet. A caveat: a portal can only be attached to one outlet at a time, so moving it detaches from the previous outlet automatically. The performance benefit is also measurable: avoiding destroy/recreate cycles matters for frequently repositioned interactive widgets.

READ_FULL_LOGarrow_forward
Article · LANGUAGE THEORYREAD TIME: 7m

Streaming JSON in just 200 lines of JavaScript

Inspired by Dan Abramov's writing on progressive JSON (a technique used in React Server Components), Krasimir Tsonev walks through building a minimal streaming JSON library called Streamson in roughly 200 lines of code. The server side uses Transfer-Encoding: chunked with Content-Type: application/x-ndjson, traverses the data object with a normalize() function that replaces unresolved Promises with placeholder IDs like _$1, then flushes each resolved chunk as { i: id, c: value } via res.write() before calling res.end() when all promises settle. The client reads the stream with the Fetch API's getReader(), parses each NDJSON line, and uses a mirror walk() function to swap placeholders back into live Promises that resolve as later chunks arrive. The caveat is that both server and client must be under your control. The library is published to npm as streamson and ships a 1KB browser bundle at unpkg.com/streamson@latest/dist/streamson.min.js.

READ_FULL_LOGarrow_forward
Article · TOOLINGREAD TIME: 4m

What's New in ViteLand: December 2025 Recap

VoidZero's December 2025 roundup covers meaningful advances across all five of its core projects. Oxlint now ships type-aware linting in alpha — 8–12× faster than typescript-eslint — alongside ESLint-compatible JS plugins, while Oxfmt alpha adds embedded language support and experimental import sorting; a npx oxfmt --migrate prettier command eases migration. Vitest gains built-in experimental OpenTelemetry tracing to diagnose slow tests and an experimental.fsCache flag for caching transformed files between runs. Rolldown improves its default chunking algorithm to reduce chunk count, adds postBanner/postFooter options, and supports TypeScript project references. Vite 8 beta continues with native plugin improvements. Community adoption is accelerating: Bun, Vue, Preact, date-fns, Shopify, Miro, Airbnb, and MonkeyType (which saw a ~3× linting speed gain) have all switched to Oxlint, and Facetpack's React Native toolkit achieves 36× faster transforms by swapping Babel for Oxc.

READ_FULL_LOGarrow_forward
Article · FRAMEWORK UPDATEREAD TIME: 2m

Ember 6.9 Released

Ember 6.9 is a standard minor release on the Ember Release Train, bringing no user-facing framework changes — all Ember.js 6.9 changes are internal, documentation updates, or backported bugfixes. The more significant news is that Ember.js 6.8 is simultaneously promoted to Long Term Support (LTS), receiving security patches for 9 release cycles (54 weeks) and bugfixes for 6 cycles (36 weeks); the previous LTS was 6.4. On the tooling side, Ember CLI 6.9 upgrades broccoli to ^4.0.0, which addresses security vulnerabilities and deprecation warnings in broccoli's dependency tree; the new major is fully API-compatible. The upgrade raises the minimum supported Node.js version to 20.19, specifically because that version backported the require(esm) feature needed by the updated broccoli.

READ_FULL_LOGarrow_forward
summarizeDigest_Summary

The JavaScript story of week 2 begins where the platform has always struggled: dependency management. Lea Verou's landmark essay tears open the wound that bundlers have been papering over for a decade — the web platform never gave JavaScript a first-class resolution model, so every alternative (CDN imports, node_modules/ deployment, import maps) carries its own category of fatal flaw. Her proposals are concrete: <script type=importmap src>, import maps injectable via DOM methods (already cross-browser, she discovers mid-post), HTTP Link header delivery, and a clientDependencies field in package.json. The throughline is sobering — until the platform owns resolution, even simple projects pay a usability cliff the moment a first dependency arrives.

The tooling layer is moving fast in response. VoidZero's December 2025 roundup shows five projects advancing simultaneously: Oxlint ships type-aware linting at 8–12× the speed of typescript-eslint, Oxfmt alpha adds a npx oxfmt --migrate prettier path, Vitest gains OpenTelemetry tracing and experimental.fsCache, and Rolldown tightens its chunking algorithm. The adoption curve is validating the bet — Shopify, Airbnb, and Bun have migrated to Oxlint; Facetpack achieved 36× faster transforms by swapping Babel for Oxc.

On linting governance, ESLint v10.0.0-rc.0 introduces a requireData option on RuleTester that enforces consistency between messageId placeholders and test data objects, plus a countThis option on max-params to exclude TypeScript this annotations. Krasimir Tsonev's 200-line Streamson library demonstrates how Transfer-Encoding: chunked and NDJSON can deliver progressive JSON in a framework-agnostic way, serializing unresolved Promises as placeholder IDs and resolving them via the Fetch API's getReader() on the client side — the same mental model React Server Components use, distilled to its essence.

On the framework periphery, Angular teams dealing with component state resets when moving DOM elements get a clear answer this week: DomPortal from @angular/cdk/portal is the only CDK approach that physically reparents the existing DOM node, preserving signals, timers, and the origin injector context. Ember 6.9 and the concurrent LTS promotion of 6.8 close out the release news — a quiet week for Ember users but a notable governance moment. And Theo's video documenting six parallel Claude Code instances building a Turbo Repo monorepo during the holidays lands as a candid practitioner report on where AI-assisted engineering sits today: powerful for experienced engineers, rough around context and history management edges.

Key Takeaways
  • Import maps injected via DOM methods already work cross-browser — prototype that dependency-injection approach today before the broader platform proposals land.
  • Migrate a lint-heavy project to Oxlint to validate the 8–12× speed claim; run npx oxfmt --migrate prettier alongside to consolidate tooling in one pass.
  • When moving Angular components across DOM positions, reach for DomPortal rather than TemplatePortal — it is the only option that preserves signals and the origin injector context.