The three-state dark mode toggle is the correct answer
An application should not take away the decision a user has previously selected. That is the main point of the argument. All other details are insignificant.
The debate that split frontend Twitter Lea Verou brought back to everyone's memory the battle from long ago about two-state vs three-state dark mode toggles in August 2026, this time Josh Collinsworth was a major advocate for her approach. Verou, in her Modern Web Advice, advocated for the simple two-state Light/Dark toggle. Her rationale: a "System" choice is cognitive load people didn't want. Fewer buttons feels like better design. Having a smaller number of buttons and having the right behavior are not identical concepts. In this case, those who believe less is more are simply mistaken. ๐
The bug hiding in two states
Bramus Van Damme, a web developer on Google's Chrome Developer Relations team, posted a response on August 18, 2026, that completely dismantled the two-state argument in a fashion that's pretty tough to refute. He named the real problem: the time-of-day bug.
Here's the gotcha. A two-state toggle only has two visible values, so it has to secretly map one of them back to "System." So the user clicks "Light." Their OS is set to switch to dark at sunset. They return that evening, the page is dark, and they never asked for it.
Van Damme put it simply:
Since the two-state toggle maps one of its values back to 'System' internally, the site is dark, even though they selected light the last time they interacted with the control.
Please, read it one more time. The user knowingly made a specific choice, and your "basic" toggle just dismissed it without any notice. That isn't minimalism. It's a design that deceives people regarding its memory.
Respecting the preference the user already set
The purpose of prefers-color-scheme is defeated if websites have to ask the user again. The media query was standardized by the W3C across all popular browsers in January 2020. It took six years for a media query to exist that actually reads a real, intentional user setting.
Three states are truthful about the three real intentions:
- Light - I want light, always
- Dark - I want dark, always
- System - follow my OS, which I already configured
The third choice is not clutter because it is the specific option indicating "continue doing what I deliberately planned." When you drop a choice, you're not actually eliminating a possibility, you're simply taking away the user's freedom to express that particular decision they have already chosen.
The people who ship this already agree
This is not just a theory. You can observe what real developer platforms are already implementing. GitHub, StackOverflow, and CodePen use three-state toggles. These are teams that care a lot about polish, and none of them thought the third state was too confusing.
Van Damme also conducted a survey among frontend developers, with 43 votes in favor of tri-state and 7 in favor of two-state. That's not even a close call. When the folks actually constructing the things are six times more likely to be in favor, the whole "cognitive load" rationale seems pretty weak.
Accessibility and UX expert Erik Kroes summed it up cleanly:
Tri-state believes that clarity is more important than being concise.
The cost is basically zero
This is the piece of the puzzle that I find most damaging to the argument in favor of minimalism. The third option is almost negligible in cost. We would just need to add one more value in a state enum, one additional label, and possibly have a default value of "System" upon the first load.
We incorporated this feature into our product settings, and there were no issues. There were no support tickets from confused customers, it did not cause any problems, and we did not regret it. By removing "System" from names, you don't protect users from the details. You save three keystrokes. That's it.
The takeaway
Simplicity is good unless it masks actual user needs being violated. The two-state toggle isn't easier in the important ways. It just doesn't clearly indicate its failure. It is better to respect a preference that the user has already set, rather than removing a button from your UI, especially when the button is almost costless.
So, in your opinion, is "System" necessary truthfulness, or an alternative that is unnecessary?
Comments
No comments yet. Start the discussion.