14.04.2025, Ссылка на статью, Документация на MDN

В браузере у нас есть устоявшийся способ работы с куками - document.cookie, но API по работе с ними не самое удобное:

// Записываем куку со значением темы
document.cookie = 'theme=dark; max-age=31536000; path=/';
 
// Читаем куку со значением темы
const cookies = Object.fromEntries(
	document.cookie
		.split(';')
		.map((cookie) => {
			const preparedCookie = cookie.trim();
			const delimiterPos = preparedCookie.indexOf('=');
			return [
				preparedCookie.slice(0, delimiterPos),
				preparedCookie.slice(delimiterPos + 1)
			];
		})
);
const theme = cookies['theme'] ?? 'light';

С новым CookieStore API работать с куками становится очень легко:

await cookieStore.set({
	name: 'theme',
	value: 'dark',
	expires: Date.now() + 31536000,
});
 
const { value: theme } = await cookieStore.get('theme');

Помимо удобного и понятного декларативного API мы получили возможность отследить что кука поменялась или была удалена, или вообще подписаться на изменение всех кук страницы с помощью CookieStorageManager. И это сработает даже в том случае, если кука была изменена на другой странице.

Единственный минус - только появилось в Firefox Nightly 139 и наполовину в свежем Safari 18.4.