With LLMs Web Frameworks Become Irrelevant 📎
Web frameworks solve human problems. Readable abstractions, conventions a team can share, a line on a CV that outlasts the project. All of it is about people, and all of it assumes a human types the code and another human reads it.
A list component is about twenty lines, imports and registration included. The application ships without a package.json, a bundler or a transpiler: an import map resolves the imports, so what the browser loads is what is on disk.
There is also no install step, and no lockfile, transitive graph or postinstall script to audit. What a small library used to provide, an agent can generate. That matters more with agents than without: an agent adds packages on its own, faster than a human would, and checking what it pulled in is the review that stops happening first.
An agent does not need a short learning curve, and gets nothing from an abstraction whose purpose is to be read. Consistency across a codebase comes from the skill the agent follows, not from the framework.
The second reason is the platform. What frameworks were invented for keeps arriving as standards:
- Custom Elements and Shadow DOM for the component model;
- form-associated custom elements with
ElementInternalsfor validation and form participation; - ES modules and import maps for dependency resolution without a build step;
structuredClone()for immutable state updates, in place of Immer;- Navigation API and URLPattern for routing;
<dialog>,popoverand View Transitions for overlays and animated view changes;- CSS nesting,
:has(), container queries and cascade layers for what used to need a preprocessor.
The gap keeps closing, and it closes faster than it used to. Ideas that start in frameworks now reach the specifications within a release cycle or two, and the interop work behind Baseline gets them into all three engines in months instead of years. Custom elements already carry the interfaces of GitHub, YouTube, Photoshop on the web, SAP UI5 and Adobe Spectrum. React 19 added proper custom element support, so the frameworks are moving toward the platform rather than away from it.
What remains is small enough to stop calling a framework. Templating is lit-html at a few KB. State management is a hundred lines of unidirectional store code. Neither locks the application in.
Widget libraries are needed either way. React and Angular do not ship a data grid or a rich text editor, so both stacks add one, and the interface decides which one an agent can drive. A custom element exposes attributes, properties, events and slots, and that interface is specified, so an agent knows the calling convention for an element it never saw during training. A React component exposes arbitrary props that changed between major versions, and the agent needs correctly versioned documentation to drive it.
Platform code outlives the conventions that produced it. Revise the conventions in a skill, and the code generated last year still runs. Move from one framework major version to the next, and the code itself has to move.
One gap stays open: interruptible rendering for very heavy UIs, where the platform primitives exist but the coordination is manual. Applications without that requirement, which is most of them, no longer have a reason to start with a framework.