User Preferences API

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The User Preferences API allows users to override user preference related media queries.

Concepts and Usage

A user agent defines values for the CSS media queries prefers-color-scheme, prefers-contrast, prefers-reduced-motion, prefers-reduced-transparency, and prefers-reduced-data. The PreferencesManager object provides programmatic access to these preferences, allowing you to listen for preference changes and override them.

Examples

Dark Mode Toggle

The following code implements a minimal dark mode toggle.

HTML

html
<form>
  <label>
    <input type="radio" name="color-scheme" value="system" /> System default
  </label>
  <label>
    <input type="radio" name="color-scheme" value="light" /> Light
  </label>
  <label> <input type="radio" name="color-scheme" value="dark" /> Dark </label>
</form>

JavaScript

js
for (const input of document.getElementsByName("color-scheme")) {
  input.addEventListener("change", () => {
    if (input.value === "system") {
      navigator.preferences.colorScheme.clearOverride();
    } else {
      navigator.preferences.colorScheme.requestOverride(input.value);
    }
  });
}

Specifications

Specification
Media Queries Level 5
# preferences-attribute

Browser compatibility

api.Navigator.preferences

api.PreferencesManager

api.PreferenceObject