A simple and efficient dark mode manager for Svelte 5, supporting user preference persistence, system preference detection, and easy toggling.
prefers-color-scheme
)localStorage
npm install dark-mode-svelte
<script>
import { DarkMode, darkMode } from 'dark-mode-svelte';
</script>
To prevent flashing from light to dark, place the <DarkMode />
component as close to your
root component as possible. In Sveltekit this is usually your first +layout.svelte
.
<DarkMode />
console.log(darkMode.mode); // 'light' or 'dark'
// Explicitly set mode darkMode.mode = 'dark'; // Set to dark mode darkMode.mode = 'light'; // Set
to light mode darkMode.mode = undefined; // Reset to system preference
<button on:click={() => darkMode.toggle()}>
Toggle {darkMode.mode === 'dark' ? '🌞' : '🌙'}
</button>
light
.mode: 'light' | 'dark' | undefined
'light'
or 'dark'
), considering user and system preferences.undefined
resets it to follow system preference.toggle(): void
Toggles between light and dark mode.
The component toggles a dark
class on document.documentElement
. Use CSS to define dark mode styles:
/* Light Mode */
body {
background-color: white;
color: black;
}
/* Dark Mode */
.dark body {
background-color: black;
color: white;
}
MIT License. Feel free to use and modify it.
Pull requests and improvements are welcome! If you find any issues, feel free to open an issue or create a PR.