Dark Mode by GracePress
Gives every page a dark version that visitors can switch on and off, with filter tuning, media dimming, smooth transitions and a keyboard shortcut.
5.1.4current version
68releases
68saves
15files
2,505lines of code
October 26, 2026last updated
Recent releases
- v5.1.4
- The settings page's credit line, "Engineered by ChristP2P GracePress", is a fixed signature again, as on every GracePress plugin. 5.1.3 had made it translatable along with the rest of the footer; the verse, the links and "All Glory to Jesus Christ" stay translatable.
- v5.1.3
- Everything you read can be translated. The menu item, the admin bar switch, the settings page footer, the Configure link and the messages the Backup & Restore buttons show were fixed English; they now follow the site's language when a translation exists.
- The block's script is refreshed whenever it changes. Browsers used to keep an old copy until the plugin's version number changed.
- The Dashboard box's "Open Dark Mode" button goes straight to the settings page instead of through the old page address.
- v5.1.2
- The readme now gives the right current version (5.1.1 still said 5.1.0). No other changes.
- v5.1.1
- The switch animation can really be turned off. There is a new "No animation" choice under Switch effect, and a Switch time of 0 now turns the animation off as the setting always said (a bug put the 160 ms default back).
- Dim pictures and videos now has its own on/off switch, next to the dimming level. Off shows pictures and videos at full strength. (--media_dim_enable.)
- Removed "Only on these pages." If a site needs dark mode, it needs it on every page, and a page that must be dark should be designed dark. Leaving dark mode off chosen pages, post types, categories, tags, WooCommerce and elements is unchanged.
- The plugin's registry now lists every feature with what it is for and the setting that switches it, and the small block-editor file refuses to run on its own.
- v5.1.0
- Show the button by device. Choose desktop, tablet and phone separately. It hides the floating button, the shortcode, the block and the menu item on that screen size. Dark Mode itself still works there. (Command line: --show_desktop, --show_tablet, --show_mobile.)
- A logo for dark mode. Pick an image that suits a dark page; it replaces your logo while dark mode is on and the normal logo comes back in light mode. Choose it from the media library; the default finds the standard WordPress site logo, and you can point it at any other logo with a CSS selector. (--logo_dark_url, --logo_selector.)
- Only on chosen pages. Fill in page or post IDs and Dark Mode runs only on those. Empty means everywhere. (--include_pages.)
- Leave out more. Exclude by post type, by category, by tag (slugs or IDs, and their archive pages too), and with one switch the WooCommerce shop, products, cart, checkout and account pages. (--exclude_post_types, --exclude_categories, --exclude_tags, --exclude_woo.)
- A block and a widget for the switch. Add the Dark Mode switch in the block editor or in a widget area, with a choice of style. The block and the widget are twins.
- v5.0.13
- Fixed: in Auto mode the visitor's own choice was ignored, so the button seemed to work and then reverted on the next page. A visitor's choice now always wins; Auto only decides the first visit.
- New master switch, "Dark Mode on the public site" (command line: --site_enable). Off, visitors get nothing from Dark Mode. Before, switching off the floating button still left the script and styles in every page.
- The "Show in the WordPress admin" switch now actually controls the admin dark mode and the admin bar button (it did nothing before).
- Accessibility: every toggle style now has a name and an on/off state for screen readers; the Pill Switch can be reached and used from the keyboard (it was a plain box); the Paper Sketch style has a name (it had none); all toggles are at least 44px to touch; a visible focus ring.
- If the browser blocks storage (private windows, strict settings) the plugin no longer throws an error.
- The toggle is hidden when JavaScript is off (it did nothing) and when the page is printed, and animations respect the visitor's reduced-motion setting.
- Scripts and styles are now added the WordPress way (wp_print_inline_script_tag and wp_add_inline_style), still before the page draws.
- The on/off switches are now named for screen readers; real headings and no nested landmarks; the text and buttons meet the 4.5 to 1 contrast rule.
- No short echo tags; file work goes through WordPress's file tools; a visible one-time-token check; a direct-access guard in every file.
- The registry now declares the front end (surfaces, effects, modes, browser storage, the master switch) and the feature audit against the top paid rivals.