Note
This blog-post is WIP/unfinished.
I'm not here to tell you "JS bad", because many people have already done that:
I'm writing this for other reasons:
- spreading awareness of the crap that
noscriptusers have to deal with, and how this effects "normies" as well - venting, because I'm fucking sick of this shit
- propose alternatives, for people with good intentions™
- shame and mock entities that are incompetent, don't care, or willfully do this shit
- a (rhetorical) cry for help, coming from a developer who had to deal with piles of abstractions (React + Redux + MaterialUI + ReactRouter = NIGHTMARE)
- the accessibility challenges of dynamic content
- how this connects to enshittification and bloat
Keep in mind, I ain't a luddite. And I don't hate JS in particular. I love when JS is used right! such as:
- Demoscene
- Competitive stuff
- Make an abomination for fun, and to prove a point!
- Even coding as a form of art ✨
Notice how the "competitive" one abuses ES/JS behavior to optimize the size of the program. That's called code-golfing, and it's totally acceptable to break best-practices to reach your goal, simply because the result pushes the boundaries of what was believed to be possible, and that's cool, not disgusting.
- LibRedirect explaining why it exists, and how MV3 limits it
- https://daringfireball.net/linked/2017/06/22/navistone-form-data
- https://daringfireball.net/linked/2017/06/27/web-without-javascript
- https://daringfireball.net/linked/2025/01/18/google-search-javascript
- https://blog.jim-nielsen.com/2025/javascript-required/
- https://techcrunch.com/2025/01/17/google-begins-requiring-javascript-for-google-search/
- https://serpapi.com/blog/google-now-requires-javascript/
- gluegle has beef with Firefox users
- "meta" inc, spitting in your face
- websites being obnoxious to
noscriptusers - disbloat
- "Enough with the JavaScript already!"
- "Maybe we could tone down the JavaScript"
- "You don't need JavaScript for that"
- "You really don't need all that JavaScript, I promise"
- https://jakearchibald.com/2013/progressive-enhancement-still-important
- Unobtrusive JS
- "Everyone has JS, right?"
- The humble "grug-brain" developer (this is for the "cry for help" part)
- Web Obesity Crisis
- How web bloat impacts users with slow connections
- JS bloat (2024)
- Software disenchantment
- https://www.gnu.org/philosophy/javascript-trap.html
- https://www.gnu.org/philosophy/wwworst-app-store.html : I don't agree with this, but I love the ending!
if you wish your site to give its users a taste of how the WWWorst app store feels to us, add to web pages you control the following JavaScriptlet:
document.body.textContent = 'Please disable JavaScript to view this site.'
- 🖱️Click ×4. This is about tracking/privacy-invasion. Excessive tracking is bloat.
- Comprehensive collections of fingerprinting methods:
These exception-filters prove that enshittification effects everyone. I had to rewrite one of my filters because I never allow JS on windowscentral, so I never need to prevent uBO from being detected. The uBO team is forced to design filters for the lowest-common-denominator, leading to sad stuff like that.
If you visit any Discourse forum, you'll notice they have graceful degradation (not PE). However, if you visit it using a phone, you'll be greeted by this ✨ wonderful ✨ message:
"HTML content omitted because you are logged in or using a modern mobile device"
for _ in 0..=u16::MAX {
println!("WHY?");
}I'll steal borrow a quote:
Honestly, I am at a loss of words as to how to describe this without being extremely rude.
Hidden content
This just boils my blood:
- You visit a page
- It's "empty" or there's a "spinner" or loading-bar
- You look inside via
view-source:or DOM-inspector - You see the fucking content
This feels much worse than a page that uses JS to fetch the content. The content was there all the time! they ain't "loading" shit! They just wasted your time and network bandwidth by tricking your browser into downloading something and then not showing it to you.
They deserve a special place in hell for requiring JS to render the PP. As I said earlier, if you view-source: and Ctrl+F any substring of the PP, you'll find it.
Ideally, visitors should agree to the PP before any privacy-invasive code is allowed to execute.
All of these docs (and more!):
If Bluesky... THE BlueSky... can step that low, I feel like humanity is hopeless. How am I expected to have faith in humanity when I see a "good organization" do that? Shit like that makes me question why am I a Clippy/Clippit. Crap like that implicitly says "Enshittification is more than natural, it's inevitable. Do not resist. Embrace it". This is disappointing.
We need to talk about dark and light modes. Yes, this is so bad that it needs its own section.
Let me preface by asserting that your page only needs 1 line of HTML to support both preferences:
<meta name=color-scheme content="light dark">That's it! Just add that inside the <head> and your pages now can automatically ("dynamic" if you will) switch between both themes in real-time, adapting to user preference!
This is not new, it has existed for many years. No need to worry about "compatibility"!
I can already hear you complaining:
But the default browser stylesheet is ugly!
or:
But I NEED my pages to look the same in all browsers!
or:
But I have a Brand™! I have my own stylesheets to theme my site!
Fine, here you go:
/* default light */
html {
background: #ccc;
color: #111;
/* etc... */
}
/* conditional override */
@media (prefers-color-scheme: dark) {
html {
background: #111;
color: #ccc;
}
/* etc... */
}No excuses!
But I NEED it to be configurable!
...why would you want that? It already is?
No! We want an obvious UI that allows users to choose a theme that doesn't match the browser!
Again, why would you want that? Are your users complaining about "lack of choice"?
No...?
Then shut up.
But-
OK FINE!!! If you insist, just use a <form> element to take input and send it to the server, then the server response should set a cookie on the client, to remember the preference. Are you happy now?
but-
Now that the preface is done, let me tell you how much I despise youtube!
YT theme requires JS to detect preference:
This is bad, but it's "forgivable" since YT needs JS for many things. However, it's worth noting that YT remembers the last preference. I know because the server returns a page colored like my last visit. This is better than other sites, which fallback to a hard-coded (or none at all) stylesheet ([cough] disbloat [cough])
YT theme needs a full-page reload (?themeRefresh=1) to apply...
wait, WHAT?!
what 👏 is 👏 the 👏 point 👏 of 👏 a 👏 "dynamic" 👏 language? 👏
seriously, WHAT IS THE DAMN FUCKING POINT OF JS IF YOU NEED TO RELOAD ANYWAYS‽‽‽
WHAT HAPPENED TO "single-page application™"‽‽‽
AND THEY HAVEN'T FIXED THIS FOR YEARS!!!
And you know what's worse? That "Device theme" option (the one that "adapts" to your preference) requires you to manually reload the damn page just so that YT notices the change.
Have they heard of matchMedia?:
const light_query = matchMedia("(prefers-color-scheme: light)");
// sync
let is_light = light_query.matches;
// async
light_query.addEventListener("change", (e) => {
is_light = e.matches;
});What kind of incompetence YT has??? No sane human should think that is "acceptable"!
But nooo, they're too busy fighting ad-blockers, so they end up being "resource constrained" to actually improve UX
Let's take a moment of silence to pray for our beloved YT...
After a word from our sponsor! RAID SHA- 🔫💥
I respect WP, I even like it, but I'm sorry, nobody can convince me that WP is "struggling" to implement auto-color-scheme for more than 6 years, that's plain bullshit.
The CRW is powered by MediaWiki as well, and its theme is fully adaptive without JS. So why does WP still consider "Auto" an "experimental feature"? and why does it require JS?
WP has much more money and contributors/volunteers than CRW, and they still fail to provide such a simple feature?
I'm sorry, again, if anyone gets offended, but this implies that WP doesn't care about its users. And if they do care, they're lazy and incompetent. There is no other explanation.
Here's a quote from the "What we’re all about" section of the home-page:
Web standards since day one
Piccalilli was founded in 2018 and since then we’ve always been focused on the web platform. We write less about frameworks and tools and more about embracing standards, progressive enhancement along with building excellent websites that work for everyone.
And yet, auto-dark mode only works with JS enabled. "progressive enhancement" my ass!
Roasting others is unfair, so here I'll roast myself, for the sake of "redemption".
If you've visited my GH-Pages site, you'll notice that I'm a hypocrite! Some of my pages are either light or dark, even with JS enabled.
I'd like to blame Jekyll themes for this, but this is my mistake, and I have to deal with it.
Don't worry, I'm working on fixing it!
I don't want you, dear reader, to feel like a doomer/gloomer after reading this. So here are some good news to give you hope!
- There's many people in favor of simpler web development!
- There's a big community pushing back against sloppy and/or corporate software!
- Someone made this parody (not satire) site, lol
- People do amazing things with only HTML and CSS:
- SoundCloud (yes, that one!): A few weeks ago, their pages now show more content than before! (in
noscript). Previously, it was just a generic page telling you to enable JS. I guess they're experimenting with SSR or pre-rendering. Update 2026: some features seem like they intentionally work without JS! (for example, switching between Home/Feed and Search pages. Query-submission doesn't work though) I was wrong, they do care about their users! - Deno making dark-mode work in
noscript - ESlint team concerned about accessibility and productivity