HTML-First, Framework-Second: Is JavaScript Finally Growing Up?

For a long time now, JavaScript has been the hero of the modern web, swooping in to build full-scale apps in the browser. But lately, a quiet rebellion has been brewing. Developers are turning back to HTML-first approaches — faster, simpler, more resilient.
Instead of reaching for frameworks by default, more teams are treating HTML and CSS as first-class citizens again, leaning on JavaScript only when it genuinely enhances the experience. This isn’t nostalgia — it’s a calculated correction. The real question now is: Is this shift a sign of JavaScript’s maturity or the emergence of a more grounded web development philosophy?
A Framework Hangover
For more than 10 years, web development has been entrenched in JavaScript-first thinking. With the rise of single-page applications (SPAs), JavaScript stopped being just a scripting language and became the foundation of the entire frontend — to the point that HTML and CSS were often generated by JavaScript, manipulated by JavaScript or even outright replaced by JavaScript abstractions. We told ourselves this was progress, that the developer experience warranted the trade-offs.
And in some ways, it did. SPAs let us build dynamic, interactive interfaces. Frameworks like React gave us component models that were far more powerful than static HTML templates. But the pendulum swung too far. Apps started breaking without JavaScript. Pages rendered blank until hydration was completed. Entire sections of content were inaccessible to crawlers or screen readers. What was once meant to enhance the user experience had become a dependency that could undermine it.
The underlying question became harder to ignore: Are we solving the right problems or just building more elaborate solutions?
Developers became ops engineers — wrangling build pipelines, webpack configs, bundlers, tree-shaking and hydration strategies. What used to be a simple website was now a JS-based machine with dozens of moving parts. The result? Slower performance, steeper learning curves and a web that increasingly catered to developers more than users. The underlying question became harder to ignore: Are we solving the right problems or just building more elaborate solutions?
Well, other than innovative solutions like Elixir, many devs are now returning to the ol’ reliable: HTML.
The Rise of HTML-First Tools
New tools and philosophies like Astro, HTMX, Enhance and MarkoJS are flipping the traditional frontend paradigm on its head. Instead of starting with a framework and sprinkling in HTML, they begin with clean, semantic HTML and enhance it progressively with JavaScript. The emphasis is on speed, accessibility and simplicity.
Take Astro as an example. It ships zero JavaScript by default, letting developers opt in only when needed. You write mostly HTML and CSS, and only hydrate components client-side if interactivity demands it. This isn’t a return to static sites, but rather a more thoughtful, performance-first architecture.
The web’s foundational language, HTML, still deserves top billing.
HTMX, meanwhile, lets you send HTML over the wire and attach behavior declaratively using attributes. It’s elegant, terse and incredibly effective for building interactive apps without spinning up a full JS framework.
These tools represent more than just new options. They signify a deeper cultural shift, a recognition that the web’s foundational language, HTML, still deserves top billing.
JavaScript’s Maturity Moment
Rather than disappearing, JavaScript is evolving. Its role is being redefined from “render everything all the time” to “enhance where it counts.” This is, in many ways, a sign of maturity. JS isn’t being thrown out, it’s just (finally) being asked to act its age.
For example, server-side rendering (SSR) has made a huge comeback, powered by tools like Next.js and SvelteKit. Even traditionally JS-heavy frameworks are adapting: React Server Components, Remix’s emphasis on the server and Vue’s leaner ecosystem reflect a broader desire to rein in client-side excess.
HTML for content, CSS for styling, JavaScript for interaction (only where necessary).
With increasing concerns around distributed denial-of-service (DDoS) attacks, modern JavaScript ecosystems are embracing SSR and edge computing to reduce the attack surface, decentralize workload bottlenecks and mitigate client-side vulnerabilities.
What’s changing is the default mindset. Developers are encouraged to reach for native browser capabilities first: HTML for content, CSS for styling, JavaScript for interaction (only where necessary). This progression echoes the ethos of progressive enhancement and accessibility that many modern devs ignored in the framework craze.
Why This Shift Matters
This isn’t just a nerdy debate about developer preferences. It’s a conversation that directly affects users. HTML-first designs load faster, degrade better and play nicer with search engines and assistive tech. Sites become more resilient, more maintainable and often more enjoyable to build.
Likewise, you must also consider the rise of Core Web Vitals as a ranking factor. Or the ubiquity of mobile-first performance budgets. Developers are no longer judged solely on features — they’re judged on how efficiently those features arrive and behave. An HTML-first approach aligns perfectly with this reality.
It also reduces the barrier to entry. New developers can learn the web’s building blocks without being overwhelmed by a webpack config or a JSX syntax tree. In this way, HTML-first is not only a performance win but also a pedagogical one.
But Will It Scale?
The natural question is whether HTML-first architectures can support complex, dynamic apps. And the answer increasingly looks like yes.
Projects like Enhance and Qwik are proving that progressive enhancement can coexist with scalability. Instead of reinventing the wheel, they use platform-native features like Web Components and the DOM itself. And they do so while allowing lazy-loading, hydration and dynamic updates, just without the all-or-nothing approach of traditional frameworks.
When you stop treating the browser like a dumb canvas and start leveraging its native behavior, you can go surprisingly far.
Even big teams at companies like Google, Netlify and Shopify are exploring HTML-first or island-based architectures to tame their growing frontend codebases. It turns out that when you stop treating the browser like a dumb canvas and start leveraging its native behavior, you can go surprisingly far.
The complexity doesn’t vanish. But it becomes more deliberate, more modular and less tied to a single framework’s life cycle or state model. That’s a big deal.
What Developers Need to Relearn
If you’ve spent the last five years thinking in terms of props, state and client-side routing, the HTML-first shift might feel jarring. But it’s not about abandoning your hard-earned skills. It’s about rediscovering the web’s original intent.
As a result, developers now need to know how to:
- Write semantic, accessible HTML that communicates structure and intent clearly to both browsers and assistive technologies.
- Embrace HTTP verbs like GET and POST, and lean on server-rendered responses to handle state transitions instead of offloading everything to the client.
- Use CSS capabilities like transitions for animations, media queries for responsive layouts and container queries for component-level responsiveness, avoiding JavaScript when native solutions suffice.
- Design interactions around forms and navigable URLs, enabling better fallbacks, shareability and reduced frontend complexity, rather than relying on encapsulated shadow DOMs or routing via APIs alone.
This isn’t about regression. It’s about rediscovering tools that never stopped working. The HTML-first philosophy forces developers to think about architecture, delivery and performance from the start. It encourages intentionality.
The Future Is Layered, Not Stacked
Frameworks aren’t dying; they’re evolving. The future of frontend won’t be a return to HTML-only, but a layered approach where HTML is the bedrock, not an afterthought. You can still use React, Svelte or Vue, but as enhancements, not foundations.
We might be witnessing the long-awaited adulthood of JavaScript.
And that’s the most mature thing JavaScript can do: learn when to lead and when to follow. Let HTML structure your page, let CSS paint it and let JavaScript bring it to life — carefully, precisely, and only when needed.
We might be witnessing the long-awaited adulthood of JavaScript. It’s not flashy, it’s not dogmatic, it’s not trying to dominate the stack anymore. It’s just trying to fit in.
And honestly? That might be the most exciting thing to happen to frontend in years.