frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

The Overcomplexity of the Shadcn Radio Button

https://paulmakeswebsites.com/writing/shadcn-radio-button/
212•dbushell•2h ago•92 comments

Giving University Exams in the Age of Chatbots

https://ploum.net/2026-01-19-exam-with-chatbots.html
82•ploum•2h ago•50 comments

Level S4 solar radiation event

https://www.swpc.noaa.gov/news/g4-severe-geomagnetic-storm-levels-reached-19-jan-2026
431•WorldPeas•13h ago•148 comments

Linux kernel framework for PCIe device emulation, in userspace

https://github.com/cakehonolulu/pciem
17•71bw•2h ago•2 comments

Reticulum, a secure and anonymous mesh networking stack

https://github.com/markqvist/Reticulum
203•brogu•10h ago•44 comments

Increasing the performance of WebAssembly Text Format parser by 350%

https://blog.gplane.win/posts/improve-wat-parser-perf.html
13•gplane•5d ago•3 comments

x86 prefixes and escape opcodes flowchart

https://soc.me/interfaces/x86-prefixes-and-escape-opcodes-flowchart.html
54•gaul•6h ago•13 comments

Apple testing new App Store design that blurs the line between ads and results

https://9to5mac.com/2026/01/16/iphone-apple-app-store-search-results-ads-new-design/
380•ksec•17h ago•299 comments

What came first: the CNAME or the A record?

https://blog.cloudflare.com/cname-a-record-order-dns-standards/
365•linolevan•16h ago•130 comments

Nanolang: A tiny experimental language designed to be targeted by coding LLMs

https://github.com/jordanhubbard/nanolang
155•Scramblejams•12h ago•116 comments

The coming industrialisation of exploit generation with LLMs

https://sean.heelan.io/2026/01/18/on-the-coming-industrialisation-of-exploit-generation-with-llms/
143•long•1d ago•107 comments

Scaling long-running autonomous coding

https://simonwillison.net/2026/Jan/19/scaling-long-running-autonomous-coding/
96•srameshc•9h ago•33 comments

Show HN: Artificial Ivy in the Browser

https://da.nmcardle.com/grow
68•dnmc•6h ago•6 comments

Notes on Apple's Nano Texture (2025)

https://jon.bo/posts/nano-texture/
188•dsr12•15h ago•103 comments

Nova Launcher added Facebook and Google Ads tracking

https://lemdro.id/post/lemdro.id/35049920
248•celsoazevedo•9h ago•102 comments

3D printing my laptop ergonomic setup

https://www.ntietz.com/blog/3d-printing-my-laptop-ergonomic-setup/
66•kurinikku•10h ago•9 comments

King – man and woman is queen; but why?

https://p.migdal.pl/blog/2017/01/king-man-woman-queen-why/
3•CGMthrowaway•4d ago•1 comments

British redcoat's lost memoir reveals realities of life as a disabled veteran

https://phys.org/news/2026-01-british-redcoat-lost-memoir-reveals.html
82•wglb•4d ago•78 comments

I was a top 0.01% Cursor user, then switched to Claude Code 2.0

https://blog.silennai.com/claude-code
120•SilenN•1d ago•190 comments

Porsche sold more electrified cars in Europe in 2025 than pure gas-powered cars

https://newsroom.porsche.com/en/2026/company/porsche-deliveries-2025-41516.html
302•m463•9h ago•358 comments

Kahan on the 8087 and designing Intel's floating point (2016) [video]

https://www.youtube.com/watch?v=L-QVgbdt_qg
21•bananaboy•4d ago•0 comments

Face as a QR Code

https://bookofjoe2.blogspot.com/2025/12/your-face-as-qr-code.html
18•surprisetalk•3d ago•6 comments

Prediction markets are ushering in a world in which news becomes about gambling

https://www.theatlantic.com/technology/2026/01/america-polymarket-disaster/685662/
291•krustyburger•1d ago•295 comments

The assistant axis: situating and stabilizing the character of LLMs

https://www.anthropic.com/research/assistant-axis
93•mfiguiere•12h ago•13 comments

Understanding ZFS Scrubs and Data Integrity

https://klarasystems.com/articles/understanding-zfs-scrubs-and-data-integrity/
49•zdw•5d ago•21 comments

Targeted Bets: An alternative approach to the job hunt

https://www.seanmuirhead.com/blog/targeted-bets
65•seany62•12h ago•64 comments

Show HN: E80: an 8-bit CPU in structural VHDL

https://github.com/Stokpan/E80
10•Axonis•2d ago•0 comments

From Nevada to Kansas by Glider

https://www.weglide.org/flight/978820
145•sammelaugust•4d ago•45 comments

The microstructure of wealth transfer in prediction markets

https://www.jbecker.dev/research/prediction-market-microstructure
153•jonbecker•18h ago•140 comments

Legal Structures for Latin American Startups (2021)

https://latamlist.com/legal-structures-for-latin-american-startups/
28•walterbell•8h ago•7 comments
Open in hackernews

The Overcomplexity of the Shadcn Radio Button

https://paulmakeswebsites.com/writing/shadcn-radio-button/
212•dbushell•2h ago

Comments

neya•2h ago
I have absolutely no doubt that somehow all these projects and similar ones - started with good intentions - good looking UI, implement and forget. And then, one fine day you're sitting on top of 200+ lines of code for a radio button and 7 imports and it's too hard to go back now without tearing the whole codebase apart. This is how code rot starts.
PunchTornado•1h ago
and people complain about AI code?
helloplanets•1h ago
Shadcn most likely contains a lot of LLM generated code. Isn't it owned by Vercel these days?
worldsayshi•1h ago
Well Shadcn gives you more freedom to fix stuff like this and rewrite how you want the component to work and look, since everything lives in your own code base. In a regular component lib it would be less likely that you'd think about this complexity, since it would be "hidden" away in node_modules or even transpiled and minified.
scoot•1h ago
> everything lives in your own code base

A common misconception.

In reality Shadcn is a thin wrapper around libraries such as Radix, recharts, etc. The article says as much.

worldsayshi•1h ago
Sure, that's true. I oversimplified.
eddie1o•1h ago
There has to be a reason for picking button instead of input type="radio", right?
curtisblaine•41m ago
Yep, radio buttons weren't easily stylable in all evergreen browsers back on 2020.
mastermedo•1h ago
The shadcn radio button in action: https://ui.shadcn.com/docs/components/radio-group
maelito•1h ago
This interactivity definitely adds a wow effect.
supriyo-biswas•1h ago
Is it sarcastic or does it appear only on high frame rate devices? To me it simply feels like another radio button.
hu3•1h ago
> Is it sarcastic or does it appear only on high frame rate devices? To me it simply feels like another radio button.

You're absolutely right!

Today I'm using a friends gaming computer. It's a 244hz monitor powered by a RTX 5070 TI and a screamingly fast AMD Ryzen 7 9800X3D CPU with 128GB of overclocked 6000MT/s RAM.

Not only does the radio look mundane for such overcomplicated component, but it also misses clicks where I would expect it to register. Like slightly above or below it.

For example, clicking where the pointer is in this image does NOT select the first radio button. It's not forgiving with regards to precision.

https://i.imgur.com/PNoCJeL.png

skrebbel•44m ago
It also doesn't catch clicks between the label and the radio button.
skibz•1h ago
I'm pretty sure it was a sarcastic comment.

On a recent MBP, it's indistinguishable from a vanilla radio button.

promiseofbeans•1h ago
In a hilarious turn of fate, on iOS safari the first time one of the radio options is clicked after loading, the css focus style is applied, but a click is not always registered so the radio item ends up stuck in an invalid weird-looking state. I highly doubt the issue would occur if the built in radio were being used
tobyhinloopen•43m ago
Is this developed by these 10x developers I've heard about?
rpastuszak•25m ago
Protip: the space between the UI control and the label should be done using padding (or achieved via label nesting) so that the entire area is clickable.

    [ x ]   some long label
         ꜛꜛꜛ
         padding here, not margins or gaps
(clicking between the control and the label does nothing now)
xearl•1h ago
Did they ask the original authors of Radix why it's the way it is?
leoff•1h ago
Exactly this. OP fails to understand that there are reasons why it was done this way, and that someone who spent thousand of hours working on this might know something that they don't.
pftburger•1h ago
Can here to say this exactly. Not saying they don’t raise an interesting point but the complete lack of curiosity why a group of experts in simplicity and accessibility decided to take this path is jarring
stephenr•1h ago
> a group of experts in simplicity and accessibility

According to who? This alone is a pretty damning case against such a claim.

Alupis•1h ago
Perhaps this is the original PR for the Radio/RadioGroup[1].

It does seem the complexity was a deliberate decision.

[1] https://github.com/radix-ui/primitives/pull/121

chrismorgan•52m ago
Half of that complexity springs from the requirement of being able to put any element as the radio button. If you’re willing to say “you can only use anything that can be expressed with CSS applied to the <input type=radio>, including psuedoelements”, it melts away.

The other half of it looks to come from an overloaded Label component which should probably have been split into two. There’s a reason that HTML has <fieldset> and <label> as different things. The implementation is also trivially incorrect: role=label isn’t a thing. Other parts of it are wrong or dubious too. In general, if the HTML way of expressing something isn’t permitted, the ARIA way of expressing the same thing is probably wrong too.

And so it goes, through the entire system. They assume you might want something ridiculously complex, and so they complicate and make worse the normal case.

stephenr•1h ago
I mean, that much is obvious just based on casual reading of a few articles/discussions about "modern" front-end dev.

I am 100% convinced that "Modern" front end developers are in fact, afraid of CSS and HTML. Like, "it will steal my eyeballs and look back at my face with them" scared.

Nothing else explains things like this, tailwind, JSX components, etc. Nothing. There is no explanation besides absolute morbid fear of the underlying technology - because the browser support has improved immensely but apparently they're all deathly scared of using it.

Before you tell me that I don't know what challenges these problems solve: I was primarily doing front-end development.... 20ish years ago. One of my first jobs in the space was adapting the client side code for a J2EE app - mostly this meant removing an IKEA worth of tables and using CSS - in IE6 of all fucking things. Subsequently I created reusable UI frontend components (i.e. output some HTML, maybe this little bit of corresponding JS, you'll get a usable interactive components in a browser) for two different organisations.

I have said it before and I'll say it again. I think JavaScript developers heard about (or saw over someone's shoulder) how J2EE guys had ant/etc build toolchains, and had abstraction like FactoryFactoryImplementationFactoryBuilderFactory and said HEY THAT LOOKS COOL, and if it's harder to understand they can't fire me!!

It's like NIH syndrome but for an entire community of people whose primary goal is chasing the shiny, followed closely by resume padding.

antisol•1h ago
well said!
snowmobile•38m ago
"There are reasons" is a pretty bland defense of why something was done in a bad way. You'd have to show that the reasons are valid, which I highly doubt. Also, somebody spending thousands of hours on making a worse version of something existing, isn't a good justification either. That's on the level of counting lines of code as a measure of productivity.
ErroneousBosh•12m ago
Okay, what exactly are those reasons?

Why does it need so much complexity to draw a radio button that doesn't look all that different to the normal one you'd get with a perfectly ordinary <input> field, except it takes around ten seconds to draw and then doesn't work properly?

curtisblaine•43m ago
In 2020, radio buttons weren't easily stylable in all mainstream evergreen browsers. That's usually the case why some components are over engineered. Of course they should have simplified them when all browsers fell in line, but tech debt is hard.
parhamn•1h ago
I normally share the sentiments of the article. But I am also curious, if the goal was:

- Implement the radio as the designer sent in the figma file (e.g. something like the radix demo one they're commenting on: https://www.radix-ui.com/primitives/docs/components/radio-gr...)

- Make sure it looks the exact same across all browsers

How doable is it with vanilla css? The example they gave was rendered to a black/white circle, most teams wouldn't ship that.

atoav•1h ago
Where do you draw the line tho? How many kilobytes and how much future maintenance work is avoiding a potential slight visual inconsistency with a radio button worth? Is it worth to lose the x amount of people who have bad network connection?

Use this approach everywhere and the actual content of the page (you know: the stuff people came for) suffers.

All I can think about is a quote by world famous video artist Nam June Paik: When to perfect, Gott böse ("God gets mad when too perfect", the original isn't exactly a full sentence and mixes English and German).

rustystump•1h ago
Based on profits of many webapps, there is no line. What eng here forget is that they are oft not the targeted consumer. The hypothetically perfect website doesnt sell as well as a colorful fat choncker does. It is like fast food, not every cares about farm to table.
stephenr•1h ago
> It is like fast food, not every cares about farm to table

I mean, a "colorful fat choncker" website is literally the opposite of fast food - its slower to arrive, and focuses way too much on appearances.

In this analogy, the website using these ridiculous abstractions is more like Salt Bae or whatever idiotic trend has replaced him. All glitz, zero substance, slower, and for no apparent reason.

The fast food equivalent is stuff like the Google home page: it doesn't validate, is actively harmful to you, the community, and the planet but is immensely popular.

Dylan16807•1h ago
Except the correct way can be just as colorful, and it takes more effort to implement the bad way.
girvo•29m ago
The bad ways effort was already paid by someone else, though.
going_north•1h ago
You can get a lot closer with only small modifications:

    input[type="radio"] {
      appearance: none;
      margin: 0;
      width: 25px;
      height: 25px;
      background: white;
      border-radius: 50%;
      display: inline-grid;
      place-content: center;
      box-shadow: 0 2px 10px color(display-p3 0 0 0/0.5);

      &::before {
        content: "";
        width: 11px;
        height: 11px;
        border-radius: 50%;
      }

      &:checked::before {
        background: color(display-p3 0.383 0.317 0.702);
      }
    }
Here's a link to a codepen so you can see what it looks like without rendering it yourself: https://codepen.io/erikaja/pen/RNRVMyB
antisol•1h ago

  > - Make sure it looks the exact same across all browsers
  > How doable is it with vanilla css? 
It's not doable with your fancy frontend framework and your 20 imports and your ten thousand lines of typescript.

"Make sure it looks the exact same across all browsers" is, and always has been, fundamentally at odds with how the web is intended to work.

How well does this shadcn crap render in arachne? ladybird? netsurf? links? dillo? netscape 3? The latest version of chrome with user styles applied?

When you say "exactly the same", I assume you mean that the design only uses black and white, because some people might have black and white monitors, right? But you're also going to use amber-on-black because some people might have amber screen monitors, right? How do you plan on ensuring it looks exactly the same on a braille terminal?

Maybe you think I'm being silly. Because nobody uses monochrome monitors in 2026, right? So it's safe to ignore that and put an asterisk next to "exactly the same" (And also just forget that e-ink is a thing that exists).

(Just like how it was safe in 2006 to assume people would always have 800x600 or bigger displays, and nobody would ever come along using a screen with, say, 480×320 resolution)

What measures have you taken to ensure that your colours appear exactly the same across a bunch of different types/brands of monitors that render colours differently? Or, perhaps we should just add another asterisk next to "exactly the same"?

I could go on.

How many asterisks is acceptable before "exactly the same" isn't a thing anymore?

If "exactly the same on all browsers" is one of your goals, you are wrong. If your designer tells you that's what they want, they are wrong. If you ever tell a client that's what you're providing, you are wrong.

bandrami•1h ago
Particularly given that on a screen reader -- which yes is an example of a browser -- it doesn't "look like" anything at all
curtisblaine•45m ago
Exactly the same when rendered by the evergreen mainstream browsers. That's perfectly doable.
Kinrany•18m ago
Displaying the same thing on every monitor to the degree that monitor allows is well-defined. The browser may not be able to show some colors and the browser may decide to display things differently on purpose, but it's perfectly reasonable to want to unambiguously express what you _want_ the browser to display.
DecoySalamander•19m ago
> How doable is it with vanilla css?

Under all of the framework complexity that specific look is still achieved with CSS. In fact, you could rip out the CSS they use with very little modification and pair it with a ~five-line React component that doesn't require any third-party imports.

maelito•1h ago
Note on the fact that this would add JS that needs to be loaded to see the page. No, because similar smart people created server-side rendering, adding another layer of complexity.
dchest•1h ago
How do you implement this keyboard navigation with SSR (if you use buttons)?

https://www.radix-ui.com/primitives/docs/components/radio-gr...

DougBTX•1h ago
I can’t tell if this is sarcasm or not! Radio buttons support keyboard navigation without JS.
dchest•1h ago
That's what I mean: if you reimplement it, you need client-side JS to support keyboard navigation.
shubhamjain•1h ago
This is the reason I absolutely hate shadcn. The number of dependencies and files you introduce for trivial components is insane. Even tiny little divs are their own component for no good reason. I genuinely don’t understand how front-end developers accept this level of needless complexity.

Shoutout to Basecoat UI[1], so implementing the same components using Tailwind and minimal JS. That's what I am preferring to use these days.

[1]: https://basecoatui.com/

discomrobertul8•1h ago
> I genuinely don’t understand how front-end developers accept this level of needless complexity.

in my anecdotal experience as a bit of an old fogey with a greying beard, the enthusiastic juniors come along, watch a video by some YouTube guru (who makes videos about code for a living instead of making actual software) proselytizing about whatever the trendy new library is, and they assume that it's just what everyone uses and don't question it. It's not uncommon for them to be unaware that the vanilla elements even exist at times, such is the pervasiveness of React bloat.

rustystump•1h ago
Please name some names of these performative developer/engineers. I want to know how many are on my bingo card. Ill start, something imegen and tnumber geegee.
esskay•1h ago
I'd never heard of basecoat but it looks great. IMO this is what Tailwind UI should have been. It was utter stupidity that they forced you to use their preferred shiny new JS framework of the week for UI components.

> I genuinely don’t understand how front-end developers accept this level of needless complexity.

I call it 'Shiny Object Syndrome' - Frontend devs tend to love the latest new JS frameworks for some reason. The idea of something being long running, tried and tested and stable for 5-10 years is totally foreign to many FE devs.

Despite its age JS and its ecosystem have just never matured into a stable set of reliable, repeatable frameworks and libraries.

jiangplus•28m ago
This looks awesome.
nake89•14m ago
Another shoutout to Basecoat. Easy to use. Makes your website look nice. Works with any/no framework.
benrutter•1h ago
This radio selection is brilliant silly, especially because the end result is indecipherable from a vanilla css rqdio button.

For some reason people keep going back to complex UI and interactivity frameworks though, does anyone have a good example of a large website built without all this bloat?

Asking because I've seen hundreds of small sites built with elegance and simplicity, and few large ones. Is it just inevitable that as a team size grows, someone introduces insanity? Do these tools solve an actual problem that I'm missing?

rustystump•1h ago
Cant speak for shady lib specifically but yes as you grow you do find that default styling doesnt work or you want something which doesn’t exist.

The crux tho is that this usually happens in what id call web apps and not websitess. Web apps are far more complex and powerful. It is a spectrum tho and sometimes websites grow into web apps which is why people oft over engineer early on.

yellow_lead•1h ago
> does anyone have a good example of a large website built without all this bloat?

How about this one?

teaearlgraycold•54m ago
Don’t think it counts
rrr_oh_man•42m ago
Why not?
946789987649•35m ago
I'm assuming they're asking for large in terms of complexity, not in terms of popularity.
Levitz•19m ago
Because this site is only "large" in the context of userbase. It could be developed by a single guy in what, a week? Two tops?
hu3•51m ago
https://www.mcmaster.com

2022 post about it. 1400 points. ~500 comments:

https://news.ycombinator.com/item?id=32976978

Surac•1h ago
Im not in web development. Reading this article makes me think: is it realy neccersary to use all those complex frameworks? Isn't html/css enough? People always say "every line not written can't be a bug" but moving those lines into a library was not the idea behind the words
curtisblaine•52m ago
> Isn't html/css enough?

No, obviously. If you are writing complex web applications with state, local processing of data and asynchronous interactions it's not enough. You need javascript. If your javascript is especially complex and you desire it to be declarative, you probably need a framework. Do you need, I don't know, Tomcat in Java? Probably yes for a complex application and no for a simple proof of concept. Do you need a database? Aren't files enough? And so on.

Shadcn is a framework for developers who develop highly interactive web apps. If all you need is a static form that submits data to a web service, you probably don't need a framework (except when you need it - for example, selects are not yet fully styleable in all browsers).

Next objection usually is: do you need complex apps on the client? Can't they be reduced to a series of simple forms controlled by the server? Sometimes they can and sometimes they can't, but of course I will decide the shape, behaviour, complexity and look of the applications I build (or have others build for me), thank you very much.

That said, radio buttons have been styleable in all non-legacy browsers for at least 5-6 years, there's no excuse for rewriting them from scratch with svgs.

dreadnip•14m ago
Most web apps are a combination of static pages, simple forms and highly interactive content though. That's what makes the choice so hard.
demarq•1h ago
So many things wrong with this blog post. Any seasoned frontend dev would have EASILY pointed these out for you.

OP, I think your being a bit hasty here, more curiosity will do you good.

Dylan16807•1h ago
If all you have to contribute is being insulting, you don't have to comment.
anonymous908213•1h ago
Go on, then. Point them out.

As it is, you've joined the ranks of multiple others commenters who sound like cargo cultists, attacking OP for not understanding frontend dev without actually pointing out any issues in their writing. If it's easy to point out, then surely you can show how easy it is.

iammrpayments•4m ago
What makes you think reading the code makes someone less curious than relying on someone else’s made up answer about it.
joduplessis•1h ago
Yup. Unfortunately common I think - not just with UI components. Occam's razor is sometimes only for others.
pembrook•1h ago
It has to be this way because we (the collective we) refuse to agree on adding proper UI primitives to the web.

We’re like 20+ years into web apps being a big thing and there’s still nothing like what’s offered in OS-native frameworks like Swift.

So anybody building a web app has to recreate SwiftUI in the browser every time via various bloated hacks (basically what Shadcn is).

If we could just agree on adding non-terrible cross-browser primitives for multiselect, popovers, modals, proper radio buttons, tabs, etc to the HTML spec and allow extensive CSS styling on every part of the element we could avoid these massive UI frameworks.

mad182•43m ago
Radio buttons are in html spec for over 30 years and they allow extensive CSS styling on every part of the element.
jackfranklyn•1h ago
The real cost of this complexity isn't the code itself - it's onboarding. Every new dev joining the project has to understand why a radio button needs 47 lines of JSX with Radix primitives, context providers, and styled variants.

I've watched teams spend weeks just getting comfortable with component library internals before they can be productive. Meanwhile the "simpler" vanilla approach might have taken an afternoon to build but takes 20 minutes to explain.

That said, if you're building something like Figma or Linear where you genuinely need the accessibility primitives and keyboard navigation that Radix provides, the complexity pays for itself. Most CRUD apps don't need it though.

snowmobile•35m ago
> It isn't A -dash- it's B

Suspicious choice of words.

normie3000•5m ago
> I've watched teams spend weeks just getting comfortable with component library internals

Would a good library allow developers to ignore internals and get on with higher-level stuff?

ehnto•1h ago
I don't touch frontend very often anymore, but you could see the writing on the wall for complexity when React took over and newer devs were working exclusively in that abstraction.

Unlike other abstractions where things get tidied up and more simple, React is much more complex than the technology it's building on. Necessarily, to enable it's features, but none the less it is a consequence of this that when all someone knows is React or other frameworks, things get overengineered. They didn't realise it could be so much simpler if they just knocked it back a layer instead of climbing higher and higher.

teaearlgraycold•55m ago
Worse still is the misunderstanding that React is simple. It’s an endless stream of cache invalidation bugs. Linters are getting better at catching these. But they also have false positives.
hahahahhaah•51m ago
The problem is app-document impedence mismatch. CSS makes stuff easier but for doc-like pages. In addition doc-like pages want some app-like niceness too.

If you need to be an app you usually need a framework to stay sane (evidence: most other native UI kits are frameworks of some sort) and thus React etc. But they want full contol. Thus 2 ways to do a radio etc.

wouldbecouldbe•42m ago
It was fine when it started, it's the addition of useEffect and hooks that messed everything up. Although normaly I prefer functional, for react classes were 100 times better
realusername•27m ago
I also have the same somewhat controversial opinion, the frontend community wasn't ready and (still isn't) to organise a functional codebase.

The second problem is that React has a "draw the rest of the owl" mindset. Sure you have nice frontend components but now what about caching? data transfers? static rendering? bundle size & spliting? routing?

curtisblaine•38m ago
Managing state and syncing it to the DOM manually is much harder than React (or any other big framework) for any non-trivial web app. Reactive, inherently asynchronous, event driven applications get complex easily.
smartmic•21m ago
You make a good point. From a philosophical point of view, abstractions should hide complexity and make things easier for the human user. It should be like a pyramid: the bottom layer should be the most complex, and each subsequent layer should be simpler. The problem is that many of today's abstractions are built on past technology, which was often much better designed and simpler due to the constraints of that time. Due to the divergent complexity of today's abstractions and unavoidable leaks, we have a plethora of "modern" frameworks and tools that are difficult to use and create mental strain for developers. In short, I always avoid using such frameworks and prefer the old, boring basics wherever possible.
WA•20m ago
> when all someone knows is React or other frameworks, things get overengineered

The next level annoyance is that everybody just assumes React to be the default for everything.

Check the Shadcn website. The landing page doesn’t mention that this is a React-only UI library at all. Same with Radix. The marketing sounds like a general-purpose UI lib. You gotta dig around a bit to realize that this is React-only.

dagss•49m ago
I am pretty new to frontend development (but have 20 years of backend)

I assumed I would need to use one of these libraries at some point. But, perhaps since I am using Svelte instead of React, whenever I ask AI to do something, then since I don't already use a component lib it just spits out the HTML/CSS/TS to do the job from scratch (or, depending on how you look at it, output the mean component from its training data).

I have to point out it should organize the code and give the component a dedicated Svelte file (sure I could fix AGENTS md to do that).

I think with AI the usecase for these libraries is much lower. If there is anything complex you need AI can build it in some seconds specifically tailored for you, so..

ErroneousBosh•33m ago
I've been dabbling in backend and frontend stuff for about 25 years now, but for the past 15 years or so I haven't really had to do any webby stuff for work (and that's kind of how I like it).

Recently I've needed to put together a few things as "proof of concept" for things like internal directories and catalogues, and it's one of those "How Hard Can It Possibly Be" situations where we've had folk prevaricating for months with outline drawings and sketches and mockups.

So I knocked together a backend for it in Django, which worked okay, and then styled up the raw template with MinCSS[1], and then to do stuff like "find-as-you-type" and other "magical dynamic page" things I used HTMX[2] which has been discussed here endlessly.

No need for AI sloppiness. Just write some code, look at some examples, stick in some styles, and away you go.

[1] https://mincss.com/examples.html

[2] https://htmx.org/

supermatt•40m ago
> Why would you want to do this?

Have you tried completely customising a radio button with CSS? Feel free to demonstrate a heavily customised radio button style where you don’t hide the native appearance.

snowmobile•36m ago
There's literally an example of that in the post.

> where you don’t hide the native appearance

What do you mean by this? Seems like an arbitrary requirement to set. Could you show an actual example of how this overengineered style is easier to customize?

supermatt•32m ago
The pseudo element solution alone is extremely limiting in its ability to be customised. For more complex customisation you will need to decorate with additional elements within a ref’ed label - and then you are effectively back to what radix does.
interstice•32m ago
The dropdown systems are something else, I spent almost as much time on that as I did on the rest of the interface when I tried Shadcn.
jwr•31m ago
Incidentally, radio buttons are a (sadly) forgotten art and are neglected in modern browsers. There are many issues with them, which is why people reimplement them on their own.
feverzsj•29m ago
That's why I never touch web frontend dev.
ediatedia•20m ago
Ok, I'll bite. I've been coding for almost 25 years so have seen various things come and go, so hopefully have a bit of capital in the bank.

Don't get me wrong, a HTML5 radio button is a beautiful thing, and sometimes React is a hammer and everything is a nail.

However, I think something that OP doesn't mention super explicitly in their post is the codebase they are working on is probably a React codebase. React is a great abstraction for building UIs. I've built a ton of them and the complexity only needs to go above a certain degree until you need a way more descriptive way of explaining your UI based upon other state, instead of trying to wire a load of DOM elements together.

If you are already using the React ecosystem, for things like form validation (again, possible with HTML5 but as soon as the complexity cranks or you can't use the server - you probably need a library), then using something like Radix is a great choice, OP even mentions how although it's not technically a visible radio button that is shipped to the DOM, it acts like one for a11y reasons, and this is due in part because it's very, very easy to write inaccessible HTML. And ShadCN is pre-made components on top of that, and they all work pretty well together.

Nothing is perfect, but even in my "old man yells at cloud" era, I personally don't think this one is worth yelling at the cloud for.

caseyross•18m ago
This is only "overcomplex" from a naive point of view.

Radio buttons, as with all UI controls, have tremendous inherent complexity, which comes to light once requirements ask for something beyond the blessed happy path of the default browser button. Pixel perfect styling, animations, focus behaviors, interactions with external state, componentized branding to fit in with companies' ecosystems, etc.

The baseline <input> paradigm struggles to provide the tools needed to adequately handle this complexity, even today, after many decades of web development.

And of course --- you can also argue that we should all just use the default browser button and everything should be solved. But this is also suboptimal, as it's clear from research that users prefer custom buttons if they provide more "features" than the defaults.

snowmobile•7m ago
> it's clear from research that users prefer custom buttons if they provide more "features" than the defaults.

Hate to be asking for a "source", but what research? And what "features" can a radio button even have? You click it and it's selected. I suppose accessibility can be considered "features", but I'm strongly suspecting that the overcomplex button has worse accessibility.

> all UI controls, have tremendous inherent complexity

Well, this is true in a sense, but it's not exactly a good argument for re-implementing all that complexity in JS / HTML, instead of simply using the browser's implementation that's written in a real language.

invalidusernam3•6m ago
Agree, this kind of complexity is there for a reason. I would rather have a complex component that handles all the cases within its usage in the codebase over having a bunch of little hacks/changes in the usage. It's far easier to maintain one complex component than many different usages of that component.

And you don't have to use such a complex component library if you don't need it. For small codebases it often is overkill. But for large codebases it's a massively worthwhile investment.

yen223•4m ago
This is the kind of stuff we have to do because almost all <input> elements are terrible in terms of customisability.

If you're one of those who think we should just use the default, bear in mind that the default radio button has poor usability for mobile users.