mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-05 00:29:48 +03:00
Use prefers-color-scheme to set light/dark mode by default #1972
Closed
opened 2026-02-05 02:22:12 +03:00 by OVERLORD
·
10 comments
No Branch/Tag Specified
development
l10n_development
further_theme_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#1972
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Baptistou on GitHub (Dec 12, 2020).
Describe the feature you'd like
Set light/dark mode by default according to prefers-color-scheme.
Moreover, if an .env variable is created (#2081), provide 3 values :
light--> use light modedark--> use dark modeauto--> mode based on prefers-color-scheme, set by defaultDescribe the benefits this feature would bring to BookStack users
Improve UX in the same way as language auto detection from user agent.
@ssddanbrown commented on GitHub (Dec 12, 2020):
Thanks for the suggestion @Baptistou.
I thought about using
prefers-color-schemewhen implementing dark mode but decided against it.prefers-color-schemeis primarily built for use in CSS media queries. I'd want to provide the user an option to control the preference on BookStack, non-dependant on browser/OS setting, so straight away that means we can't use the media query directly. We could detect theprefers-color-schemestate with JavaScript and set the controlling parent class depending on value but now we're adding mixed front-end and back-end logic for this control which means things are getting more complex. Upon that we would have to provide some level of 'auto' control as suggested so now we're needing some more complex user-control than just the toggle-button(s) we have now.To me I didn't deem the use of the
prefers-color-schemeworth implementing. If the option was provided by the browser as a header, as the language is, it'd be a bit more open to it.@Baptistou commented on GitHub (Dec 13, 2020):
And what about delegating the light/dark mode implementation to client side ?
I see in the code that the mode button is sending a POST request to server
/settings/users/toggle-dark-mode.This is a cost that could be avoided by handling the mode change directly in client side.
You even don't need JavaScript at all, the following is a working example with pure CSS :
@ssddanbrown commented on GitHub (Dec 13, 2020):
Sure, But you're already having to do hacky workarounds, duplicating styles and abusing the intention of the media query. Additionally you'd still need to store the preference which, yeah, could be done with JS localStorage but that won't be cross-device.
Currently we control dark mode via a single CSS class on the html. The easiest way to achieve auto based on
prefers-color-schemewould be to have some JavaScript to query the CSS media state than add that class. As said above though, we'd need to re-think the controls to be, what I think would be, less intuitive. Again, I just didn't seeprefers-color-schemebeing something worth implementing. Especially as, In my opinion, the browser implementation of that preference is half-baked.@Baptistou commented on GitHub (Dec 13, 2020):
Yes sure, JavaScript is the easiest way.
Maybe we could use Cookie via JS to save the preference. This has the benefit to work cross-device and on public access.
Having to reset the mode each time you arrive at home page or when you log out is quite annoying.
Of course, this is not a big deal, this feature is not a priority.
@ssddanbrown commented on GitHub (Dec 13, 2020):
Cookies themselves would not be a cross-device solution unless the browser happens to sync them.
Cool, I'll therefore going to close this off due to the reasons provided in my previous messages.
@geins commented on GitHub (Apr 26, 2021):
For those interested in a little dirty tinkering:
It adds automatic dark-mode capability in most browsers.
BUT the manual selection of the user doesn't work (switches will be removed) and it doesn't work on the settings page itself.
Add this to the custom header:
(Don't forget to change https://YOURDOMAIN.XYZ to your actual domain)
@Write commented on GitHub (Jan 20, 2024):
2024 edition :
@jasonpincin commented on GitHub (Aug 29, 2024):
Thanks @Write ! FWIW - I'd love to see three options for color scheme in Bookstack: Light, Dark, and Auto. Default to auto. Seems like it'd solve some of the complexities described? Maybe? Some users like the mode to changed based on time of day. Others like to pin it one way or the other.
Edit to say: other apps I've used employ the term "system" instead of "auto". To imply the mode matches your system preference.
@Kali187 commented on GitHub (Jul 15, 2025):
It is a good practice.
User can specifically fix the mode per app, but default should be auto (system). In this case I can just use my system settings to toggle all apps automatically, or like you said, adapt to time of the day automatically.
@hepdci commented on GitHub (Oct 4, 2025):
Here’s an alternative solution: If no initialization has been done, the OS is in dark mode, and BookStack is not yet in dark mode, then simulate a click on the dark mode button. This way, both the light and dark mode buttons remain available.