A simple and efficient dark mode manager for Svelte 5, supporting user preference persistence, system preference detection, and easy toggling.
prefers-color-scheme)localStoragenpm 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(): voidToggles 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.