
Web Components: The Framework Killer We’ve Been Ignoring for a Decade
Let’s be honest: frontend developers have commitment issues. We jump from framework to framework like a squirrel on espresso, always chasing the high of that next shiny JavaScript toy.
React? Been there. Vue? Done that. Svelte? So last year. Solid? Getting boring already.
Meanwhile, web components—the browser-native component system that works everywhere without transpilation, bundling, or framework lock-in—have been steadily improving for over a decade while we’ve been busy arguing about whether hooks are better than classes.
It’s time to face a hard truth: your favorite framework might just be unnecessary overhead in a world where the platform itself offers a component model that does most of what you need.
The Web Component Revolution Is Already Here (And You Missed It)
Web components aren’t new. They’ve been around since Chrome 59, with the core specs (Custom Elements, Shadow DOM, HTML Templates) supported in all major browsers since 2021.
But much like your gym membership, their existence doesn’t mean you’re using them.
The current state of web components in 2025:
- Browser Support: 98%+ of global users have browsers that fully support web components
- Performance: Native implementation means they’re faster than framework components
- Ecosystem: 2,000+ published components on webcomponents.org
- Adoption: Used by Google, Adobe, Microsoft, GitHub, Netflix, and thousands of other sites
- Tooling: Full IDE support, including TypeScript definitions
- Libraries: Lit, Stencil, Hybrids, and others make development a breeze
Yet you’re probably still wrapping your components in 500KB of framework code while complaining about bundle sizes and hydration delays.
”But My Framework Does Things Web Components Can’t!”
Does it though? Let’s bust some myths:
Myth: “Web components don’t have state management.” Reality: Custom elements can manage internal state, and you can use any state management library (Redux, XState, MobX) with web components. Plus, context-like features are coming to the platform.
Myth: “Web components don’t have reactive props.” Reality: Observed attributes and properties provide the same reactivity as framework props, just with slightly different syntax.
Myth: “Shadow DOM makes styling difficult.” Reality: Shadow parts, CSS custom properties, and constructable stylesheets give you more styling control than most frameworks, not less.
Myth: “Web components don’t work with SSR.” Reality: Use declarative shadow DOM (supported in Chrome and Safari) or simply SSR the light DOM content and hydrate on the client.
Myth: “The API is too verbose compared to JSX.” Reality: Libraries like Lit give you a concise, declarative template syntax that’s competitive with JSX while still producing native web components.
Myth: “But React has a huge ecosystem!” Reality: Web components work with React (and every other framework). Your React component can use web components, and your web components can be used in React apps.
The Framework Addiction Cycle
We’ve been caught in a dysfunctional relationship with frameworks that follows a predictable pattern:
-
Honeymoon Phase: “This new framework is amazing! It solves all the problems of the last one!”
-
Complexity Creep: “We just need to add this state management library, routing solution, form validation library, and 12 more dependencies…”
-
Performance Concerns: “Why is our bundle so big? Why is first load so slow? We need to optimize!”
-
Fatigue Sets In: “Keeping up with all these breaking changes and best practices is exhausting.”
-
New Shiny Thing Appears: “Have you seen this new framework? It solves all these problems!”
And thus the cycle continues, while browser standards quietly improve in the background, ignored by many developers too busy chasing the next dopamine hit of a new framework.
Frameworks vs. The Platform: A Tale of Two Approaches
The Framework Way | The Web Component Way |
---|---|
Learn framework-specific API | Learn web standards that transfer to any project |
Bundle 50K+ of framework code with each component | Ship just your component code |
Risk breaking changes with every major version | Rely on stable browser standards |
Lock into framework ecosystem | Work in any context or with any framework |
Require complex build systems | Can work without transpilation |
Risk framework abandonment | Standards never go away |
Suffer runtime performance overhead | Get native browser performance |
When you build with web components, you’re not just creating components; you’re creating future-proof assets that can be used across frameworks, projects, and time.
”But the Developer Experience Isn’t as Good!”
Let’s translate that: “I don’t want to learn slightly different syntax.”
Because that’s all it is. The developer experience gap has narrowed dramatically:
// A React component
function Counter({ initial = 0 }) {
const [count, setCount] = useState(initial);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
// The same component with Lit (web components)
@customElement('my-counter')
class Counter extends LitElement {
@property({ type: Number }) initial = 0;
@state() count = 0;
connectedCallback() {
super.connectedCallback();
this.count = this.initial;
}
render() {
return html`
<p>Count: ${this.count}</p>
<button @click=${() => this.count++}>Increment</button>
`;
}
}
Not exactly a radical difference, is it? Both are declarative, reactive, and component-based. The web component just happens to work natively in browsers without a framework dependency.
The Rise of the Framework-Independent Developer
As web components continue to mature, we’re seeing the emergence of a new breed of frontend developer: the framework-independent developer.
These developers:
- Focus on web standards first, framework patterns second
- Build shareable component libraries that work across projects regardless of framework
- Reduce technical debt by creating future-proof components
- Improve performance by leveraging native browser capabilities
- Enhance career longevity by investing in skills that outlast framework cycles
They’re the polyglots of the frontend world, able to work in any codebase because they understand the underlying platform rather than just framework abstractions.
How to Break Your Framework Dependency
Ready to break free from framework addiction? Here’s your step-by-step recovery plan:
- Start small: Replace a simple UI component with a web component
- Use a gentle transition library: Lit, Stencil, or Hybrids make the transition easier
- Create a component library: Build your design system as web components that can be used anywhere
- Think interoperability: Design components that can be consumed in any framework
- Embrace incremental adoption: You don’t have to rewrite everything at once
- Learn Shadow DOM properly: It’s different, not harder, once you understand the mental model
- Stay connected to standards: Follow the WHATWG and W3C to see what’s coming next
The beauty of web components is that you don’t need a big-bang migration. You can incrementally adopt them alongside your existing framework.
The Final Framework?
Here’s a thought experiment: What if web components are the final “framework”? What if, instead of jumping to the next hot JS framework, we instead build on a stable foundation of browser standards that continue to improve?
Imagine a world where:
- Components work across project boundaries without conversion
- Framework updates don’t break your components
- Your skills transfer completely between jobs and projects
- Performance is a given, not something you have to optimize for
- You’re building with the platform instead of working around it
That world already exists—if you’re willing to step off the framework treadmill and give web components the serious consideration they deserve.
Conclusion: The Choice is Yours
You have two paths before you:
-
Continue the cycle: Keep jumping from framework to framework, constantly learning new APIs that will be obsolete in a few years.
-
Break the cycle: Invest in web components and web standards that will serve you for the rest of your career.
Web components aren’t perfect. They still have rough edges. But they’re improving at a steady pace while offering something no framework can: native browser support and true interoperability.
The choice is yours. But remember, while you’re deliberating, another framework will probably launch, gain popularity, and burn out—all while web components continue their slow, steady march toward becoming the obvious choice for component-based development.
Choose wisely. Your future self will thank you.

About Emma Stylesheet
The CSS purist who judges your design choices with the severity of a 90s web design professor. Emma has strong opinions about semantic HTML, responsive approaches, and will fight you about cascade layers. She's equal parts excited and terrified by how CSS is evolving, and can spot a z-index issue with her eyes closed. Every design crime you commit ends up in her 'responsive failures' collection.
Continue Your Descent Into Tech Madness

Those TypeScript Patterns You're Using? Yeah, They're Wrong
You've been told TypeScript makes your code safer, but you're probably using it to create even more elaborate ways to shoot yourself in the foot. Here's why your favorite TypeScript patterns are actually making things worse.

Rust is Coming for JavaScript's Lunch Money and You're Not Ready
While you're busy debating which JS framework to use next, Rust is quietly infiltrating the entire JavaScript ecosystem. Server-side JS? Under threat. Browser DOM manipulation? Targeted. Your job security? Let's talk about that.

Why Your Tech Stack Is Already Obsolete (And Why It Doesn't Matter in the Age of AI)
A sarcastic take on being caught between bleeding-edge AI frameworks and Web Components in 2025, while everyone's busy arguing about Rust vs. Go.