Providers

If you’re building software, it’s generally a good idea to avoid the Not-Invented-Here syndrome. This is when you insist on writing absolutely everything from scratch even if it would make more sense to use a third-party provider.

Need your app to take payments? Don’t try to become your own payment provider—use an existing provider instead.

Need your app to send email? Don’t try to code all that up yourself—just use an existing service.

This same thinking seems to apply to JavaScript libraries too. If you don’t use a library or framework, you’ll just end up writing your own library or framework instead, right?

Except that’s not the way that JavaScript frameworks work. At least not any more.

There was a time when JavaScript libraries really did abstract away browser differences that you probably didn’t want to deal with yourself. In the early days of jQuery—before querySelector existed—trying to work with the DOM could be a real pain. Libraries like jQuery helped avoid that pain.

Maybe it was even true in the early days of Angular and React. If you were trying to handle navigations yourself, it probably made sense to use a framework.

But that’s not the case any more, and hasn’t been for quite a while.

These days, client-side JavaScript frameworks don’t abstract away the underlying platform, they instead try to be an alternative. In fact, if you attempt to use web platform features, your JavaScript framework will often get in the way. You have to wait until your framework of choice supports a feature like view transitions before you get to use it.

This is nuts. Developers are choosing to use tools that actively get in the way of the web platform.

I think that most developers have the mental model of JavaScript frameworks completely backwards. They believe that the framework saves them time and effort (just like a payment provider or an email service). Instead these frameworks are simply limiting the possibility space of what you can do in web browsers today.

When you use a JavaScript framework, that isn’t the end of your work, it’s just the beginning. You still have to write your own code that makes use of that framework. Except now your code is restricted to only what the framework can do.

And yet most developers still believe that using a JavaScript framework somehow enables them to do more.

Jim Nielsen has a great framing on this. JavaScript libraries aren’t like payment providers or email services. Rather, it’s the features built into web browsers today that are like these third-party providers. When you use these features, you’re benefiting from all the work that the browser makers have put into making them as efficient as possible:

Browser makers have teams of people who, day-in and day-out, are spending lots of time developing and optimizing new their offerings.

So if you leverage what they offer you, that gives you an advantage because you don’t have to build it yourself.

Want to do nifty page transitions? Don’t use a library. Use view transitions.

Want to animate parts of the page as the user scrolls? Don’t use a library. Use scroll-driven animations.

Want to make something happen when the user clicks? Don’t use a library. For the love of all that is holy, just use a button.

If you agree that using a button makes more sense than using a div, then I encourage you to apply the same thinking to everything else your app needs to do.

Take advantage of all the wonderful things you can do in web browsers today. If instead you decide to use a JavaScript framework, you’re basically inventing from scratch.

Except now all of your users pay the price because they’re the ones who have to download the JavaScript framework when they use your app.

Responses

bsky.app

# Friday, November 7th, 2025 at 11:45am

bsky.app

You knowingly skip the part that apis you’re talking about are not even close to the wide rollout?..

# Friday, November 14th, 2025 at 2:08am

Zach Leatherman

apropos of exactly this I wish async were supported in more frameworks and template languages as a first-class feature

13 Shares

# Shared by KB on Thursday, November 6th, 2025 at 4:41pm

# Shared by Roberto Baca on Thursday, November 6th, 2025 at 6:07pm

# Shared by Thomas Vander Wal on Thursday, November 6th, 2025 at 6:07pm

# Shared by jrlarsen on Thursday, November 6th, 2025 at 8:24pm

# Shared by Sue on Thursday, November 6th, 2025 at 8:27pm

# Shared by Valentino Gagliardi on Thursday, November 6th, 2025 at 9:36pm

# Shared by Carlos Espada on Friday, November 7th, 2025 at 6:58am

# Shared by Eric Newport on Friday, November 7th, 2025 at 12:54pm

# Shared by Luke Peters on Friday, November 7th, 2025 at 6:18pm

# Shared by Risto Yrjänä on Thursday, November 13th, 2025 at 9:13pm

# Shared by Zach Leatherman on Thursday, November 13th, 2025 at 9:13pm

# Shared by Damien Solimando on Thursday, November 13th, 2025 at 10:19pm

# Shared by Tim Wuyts on Sunday, November 16th, 2025 at 7:11am

28 Likes

# Liked by https://feed.city/c/dan on Thursday, November 6th, 2025 at 4:21pm

# Liked by Martin Splitt on Thursday, November 6th, 2025 at 5:08pm

# Liked by Jamie And Lion (aka, SpacedOutSmiles) on Thursday, November 6th, 2025 at 5:08pm

# Liked by castastrophe on Thursday, November 6th, 2025 at 6:07pm

# Liked by Thomas Vander Wal on Thursday, November 6th, 2025 at 6:07pm

# Liked by mb21 on Thursday, November 6th, 2025 at 7:12pm

# Liked by Mastro.{js,ts} on Thursday, November 6th, 2025 at 8:23pm

# Liked by jrlarsen on Thursday, November 6th, 2025 at 8:23pm

# Liked by Robin Bakker on Thursday, November 6th, 2025 at 8:23pm

# Liked by katie buechner on Thursday, November 6th, 2025 at 8:24pm

# Liked by Sue on Thursday, November 6th, 2025 at 8:27pm

# Thursday, November 6th, 2025 at 9:20pm

# Liked by Tom Brown🏒 on Thursday, November 6th, 2025 at 9:36pm

# Liked by Ralph on Thursday, November 6th, 2025 at 9:46pm

# Friday, November 7th, 2025 at 3:45am

# Liked by Carlos Espada on Friday, November 7th, 2025 at 6:58am

# Liked by claudio. on Friday, November 7th, 2025 at 9:01am

# Liked by Eric Newport on Friday, November 7th, 2025 at 12:53pm

# Liked by Matthias Zöchling on Friday, November 7th, 2025 at 1:51pm

# Liked by Joe Crawford on Friday, November 7th, 2025 at 6:47pm

# Liked by Max Duval on Thursday, November 13th, 2025 at 9:13pm

# Liked by Turbodad ⚡ on Thursday, November 13th, 2025 at 9:13pm

# Liked by Zach Leatherman on Thursday, November 13th, 2025 at 9:13pm

# Liked by Michael G on Thursday, November 13th, 2025 at 9:13pm

# Liked by Jared White on Thursday, November 13th, 2025 at 9:45pm

# Liked by Damien Solimando on Thursday, November 13th, 2025 at 10:19pm

# Liked by Stuart Rutherford on Thursday, November 13th, 2025 at 10:19pm

# Liked by geeky Chakri 🚀 on Friday, November 14th, 2025 at 7:35am

Related posts

That was Web Day Out

An excellent day of talks in Brighton exactly 37 years after the birth of the World Wide Web.

A web font strategy

How I’m prioritising performance when it comes to typography on The Session.

Installing web apps

BeforeInstallPromptEvent vs. navigator.install

Installing web apps

Here’s an HTML web component you can use if you’re participating in the origin trial for the Web Install API.

Manuel Matuzovič is speaking at Web Day Out

The line-up is now complete and you don’t want to miss this!

Related links

Tagged with

Web Day Out - 12 March 2026 — Polytechnic

This was another fantastic conference from the Clearleft team, and one that I hope is repeated next year. It is absolutely incredible what you can do in the browser these days, and even though I thought I was keeping up with the latest developments, it astounded me how far things have come.

Tagged with

An in-depth guide to customising lists with CSS - Piccalilli

Think you know about styling lists with CSS? Think again!

This is just a taste of the kind of in-depth knowledge that Rich will be beaming directly into our brains at Web Day Out

Tagged with

What’s new in web typography? | Clagnut by Richard Rutter

There have been so many advances in HTML, CSS and browser support over the past few years. These are enabling phenomenal creativity and refinement in web typography, and I’ve got a mere 28 minutes to tell you all about it.

I’ve been talking to Rich about his Web Day Out talk, and let me tell you, you don’t want to miss it!

It’s gonna be a wild ride! Join me at Web Day Out in Brighton on 12 March 2026. Use JOIN_RICH to get 10% off and you’ll also get a free online ticket for State of the Browser.

Tagged with

Try text scaling support in Chrome Canary - Josh Tumath

There’s a new meta tag on the block. This time it’s for allowing system-level text sizing to apply to your website.

Tagged with

Previously on this day

8 years ago I wrote Installing Progressive Web Apps

Trying to get the balance right between discoverability and intrusiveness.

12 years ago I wrote Icon fonts, unicode ranges, and IE8’s compatibility mode

A tricksy browser issue raises a dark spectre from the past.

16 years ago I wrote Burge Pitch Torrent

Even more perfect pitch.

18 years ago I wrote Berlin, day 2

A panel, a presentation and two minutes of Roy Orbison wrapped in clingfilm.

20 years ago I wrote A quick turnaround

I’m back in Brighton for less than 24 hours.

24 years ago I wrote Bonfire night

Last night was bonfire night. In England, November 5th is celebrated in rhyme: