mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Add User-Selectable Themes and a Dark Theme #2947
Closed
opened 2025-12-29 18:23:52 +01:00 by adam
·
22 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#2947
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 @ReK42 on GitHub (Oct 11, 2019).
Environment
Proposed Functionality
Add a dark theme to the user interface and allow the choice of theme to be selected and saved per-user. Potentially implement in a way which allows administrators to add more themes or customized versions of themes.
Use Case
Dark themes reduce eye strain and I have modified my own installation of netbox to use a dark theme, however some users prefer light themes. Implementing a way for users to select their preferred theme would satisfy all parties, plus allow for theme modification without forking or otherwise editing the netbox installation.
Database Changes
Add a theme preference field to the User model. The default theme can be set via the Django configuration file.
External Dependencies
As an example for implementation, I have added the Bootswatch Slate theme to my installation. See the attached screenshot. This involved replacing the default static/css/bootstrap.min.css file and making the following modifications to base.css to touch up the styling of select2 and netbox itself:
@jeremystretch commented on GitHub (Oct 14, 2019):
Blocked by #3294
@ReK42 commented on GitHub (Oct 15, 2019):
Would it make sense to split this out into two issues? One to add the ability to install additional themes and have the administrator select the default, and a separate one to then allow users to choose a personal theme?
@Grokzen commented on GitHub (Oct 16, 2019):
I tried it out locally in our fork and poeple loved the looks of it for like 95% of the times. The main point i got back from the people i viewed this for was the main issue of being able to select it as a preference in your profile. But the other main place where it looked iffy was in the Rack detail view where you see what devices is racked where back and front view. I also had a few other GUI artifacts that needed some touchups as the theme did not properly work on liek table headers and a few other places, but that might just be that i did not bring in the extra patch you included.
@ReK42 commented on GitHub (Oct 16, 2019):
Yes, the patch addresses table headers, the page footer and some hard to read fonts on select2. We haven't made use of the rack diagramming feature yet so I can't comment on whether or not that needs some touching up.
I have noticed that, with the dark theme, the row colouring for the interface table on the device view is OK but could be improved. If the colours were more muted it would be easier to read the lighter fonts.
@lampwins commented on GitHub (Oct 16, 2019):
I would not be interested in directly supporting theming of the UI other than dark mode. We have much more pressing matters to throw development time at and after all, we are an IT utility application.
Given that most major browsers are supporting dark mode now via
prefers-color-schemeI think it would be unwise for us to implement this directly. Instead, most of the heavy lifting should be taken care of when boostrap implements support forprefers-color-schemehttps://github.com/twbs/bootstrap/issues/27514. AS already pointed out, I am sure we will need to tweek some things here and there but the industry as a whole is clearly moving away from custom dark themes.@jeremystretch commented on GitHub (Oct 17, 2019):
To be clear, we will not be introducing support for customizable themes; only the option to toggle between the default theme and a "dark" theme.
I had originally marked this as blocked pending implementation of a mechanism for storing user preference (#3294), but if we can accomplish this in CSS alone all the better.
@ReK42 commented on GitHub (Oct 21, 2019):
Bootstrap does not currently have a date for CSS media dark theme support, it seems to be targeted for version 6, possibly partial support in 5. Considering netbox still utilizes version 3, it may be quite a while before that becomes a reality.
In the meantime, could this be implemented as an administrator choice via configuration variable? The work towards a dark theme should not be wasted as it can be reused once the dynamic CSS support is there.
@bellwood commented on GitHub (Oct 25, 2019):
Could I request that if we tackle this, we allow the browser to natively select dark/light based on the device preference using the CSS media feature:
@media (prefers-color-scheme: dark)Docs:
https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme
Example:
https://tombrow.com/dark-mode-website-css
I'm all for allowing the user to set a preference as well, but as a dark mode user myself, this would be handy.
@agn-7 commented on GitHub (Dec 23, 2019):
I used bootstrap bootswatch theme version 3.4.1 which is compatible with the NetBox bootstrap version:
Replace the
bootswatch-3.4.1/slate/bootstrap.min.csswithnetbox/netbox/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.cssto make it dark.Change footer section to dark color:
<footer>attribute to<footer class="section footer-classic context-dark bg-image" style="background: #3e444c;">innetbox/netbox/templates/_base.htmlpath.@hSaria commented on GitHub (Dec 29, 2019):
I've done a bit of experimenting with this and can safely say that
prefers-color-schemeis very clean. I'm gonna take a crack at this (just need to go around to all of the different pages and take comparison screenshots). Here are a few key points:prefers-color-schemeis not supported, it will default to the current (light) theme.media-based is automatically handled by the web engine so no need for us to write redundant code._base.htmltemplate.I'm not sure if this will be included in v2.6 or v2.7; guidance here from the maintainers would be greatly appreciated, but I'll error on the safe side and assume v2.6.
@hSaria commented on GitHub (Dec 29, 2019):
It would appear that the themes in Bootswatch also modify the size of lots of elements which is throwing off the layout, like the search field on the navbar on a mac will extend to another line. If it's okay with this project to maintain our own dark theme css file (largely inspired by some other theme, but excluding any layout-changing modifications), then I'm willing to write it up, but I'm not sure if it's acceptable with the maintainers to do so.
@agn-7 commented on GitHub (Dec 30, 2019):
@hSaria Because you used the latest version of
bootswatch, while you must use the bootswatch theme version 3.4.1 as I mentioned in the above comment.@hSaria commented on GitHub (Dec 30, 2019):
I did use 3.4.1
@jeremystretch commented on GitHub (Apr 24, 2020):
Marking this as open for anyone who wants to take on the CSS component. Bear in mind that we cannot modify the stock Bootstrap template, or interfere with the existing style. Implementation of an optional dark mode must exist in parallel to the current theme.
@stale[bot] commented on GitHub (May 8, 2020):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Please see our contributing guide.
@stale[bot] commented on GitHub (May 23, 2020):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Please see our contributing guide.
@abrahamvegh commented on GitHub (May 25, 2020):
Is this a wontfix, or just needs an owner? Or is that the intended behavior of the bot?
@DanSheps commented on GitHub (May 25, 2020):
Needs owner, but if no one claims ownership within the allotted him it marks it as wontfix as preparation for closure.
Are you interested in taking this on @abrahamvegh?
@abrahamvegh commented on GitHub (May 25, 2020):
Sure, I could take a crack at trying to build out the CSS, although I have zero Python knowledge, which may hinder me.
@jeremystretch commented on GitHub (May 26, 2020):
While I appreciate the offer to help, I want to point out that the
needs ownertag means just that: This issue is in need of someone to own it. It needs someone to take on the design, implementation, testing, documentation, and bug fixes. None of the maintainers currently have bandwidth to work on this, so if we can't find a committed volunteer it will drop off the board for the immediate future.@stale[bot] commented on GitHub (Jun 9, 2020):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Please see our contributing guide.
@stale[bot] commented on GitHub (Jun 16, 2020):
This issue has been automatically closed due to lack of activity. In an effort to reduce noise, please do not comment any further. Note that the core maintainers may elect to reopen this issue at a later date if deemed necessary.