Cookie Store API: Modern Cookie Management for Web Applications

Replace document.cookie with a promise-based API that supports service workers, event-driven change detection, and modern JavaScript patterns for performant applications.

The web platform has long relied on document.cookie for cookie management, but this synchronous, string-based API presents significant challenges for modern web development. The Cookie Store API emerges as a standardized, asynchronous solution that integrates seamlessly with contemporary JavaScript patterns and service workers. This modern API is essential for building performant applications where user preferences, session tracking, and consent management directly impact user experience and search engine optimization metrics.

Why Modern Applications Need the Cookie Store API

Promise-Based Operations

Async/await integration eliminates callback complexity and synchronously blocking the main thread during cookie operations.

Built-in Change Events

Native event system for detecting cookie modifications without polling, enabling real-time multi-tab synchronization.

Service Worker Support

First-class cookie access in service workers enables background authentication, offline sync, and push notification scenarios.

Structured Data Access

Object-oriented cookie handling eliminates string parsing and manipulation errors inherent in document.cookie.

Setting and Reading Cookies with Cookie Store API
1// Setting a cookie with the Cookie Store API2async function setUserPreference(name, value, daysToExpire = 30) {3 const expirationDate = Date.now() + daysToExpire * 24 * 60 * 60 * 1000;4 5 await cookieStore.set({6 name: `pref_${name}`,7 value: value,8 expires: expirationDate,9 path: '/',10 sameSite: 'lax'11 });12}13 14// Reading a cookie15async function getUserPreference(name) {16 const cookie = await cookieStore.get(`pref_${name}`);17 return cookie?.value ?? null;18}19 20// Deleting a cookie21async function clearUserPreference(name) {22 await cookieStore.delete({23 name: `pref_${name}`,24 path: '/'25 });26}

Core Cookie Store API Interfaces

CookieStore: The Primary Interface

The CookieStore interface serves as the foundation for all cookie operations, providing methods for getting, setting, and deleting cookies through promise-based APIs. Unlike document.cookie, which operates on a global string, CookieStore treats each cookie as an independent object with clearly defined properties.

Reading cookies through CookieStore.get() returns a promise that resolves to a CookieItem object containing all available properties. Writing cookies through CookieStore.set() accepts a CookieInit dictionary that specifies the cookie's name, value, and optional attributes in a clean, structured format. This object-oriented approach aligns with modern JavaScript development patterns and integrates well with Node.js server-side JavaScript.

CookieChangeEvent and Change Detection

The Cookie Store API introduces a native event system for detecting cookie changes, eliminating the need for polling or manual tracking mechanisms. The CookieChangeEvent is dispatched whenever a script-visible cookie change occurs, providing details about which cookie was modified, added, or removed. This event-driven model enables sophisticated use cases like multi-tab synchronization, where changes in one browser tab instantly reflect across all open tabs running the same application.

Theme Switcher Implementation with Event Handling
1class ThemeManager {2 constructor() {3 this.currentTheme = 'light';4 this.init();5 }6 7 async init() {8 const savedTheme = await cookieStore.get('app-theme');9 if (savedTheme) {10 this.currentTheme = savedTheme.value;11 this.applyTheme();12 }13 14 cookieStore.addEventListener('change', (event) => {15 if (event.changed.some(c => c.name === 'app-theme')) {16 const newTheme = event.changed.find(c => c.name === 'app-theme').value;17 this.currentTheme = newTheme;18 this.applyTheme();19 }20 });21 }22 23 async toggleTheme() {24 const newTheme = this.currentTheme === 'light' ? 'dark' : 'light';25 await cookieStore.set({26 name: 'app-theme',27 value: newTheme,28 expires: Date.now() + 365 * 24 * 60 * 60 * 1000,29 path: '/',30 sameSite: 'lax'31 });32 }33 34 applyTheme() {35 document.documentElement.setAttribute('data-theme', this.currentTheme);36 }37}

Service Worker Integration

The Cookie Store API uniquely provides cookie access within service worker contexts, addressing a long-standing limitation of the document.cookie approach. Service workers can access the cookieStore property on their global scope, enabling cookie operations in the background execution context. This capability is particularly valuable for AI-powered applications that require offline-first functionality and background data synchronization.

Cookie Change Events in Service Workers

The cookiechange event provides service workers with notifications when cookies matching their subscription criteria are modified. Service workers must explicitly subscribe to cookie changes during installation, specifying which cookies or cookie patterns they want to monitor. This subscription model prevents unnecessary event dispatching while ensuring service workers receive relevant notifications for authentication and session management scenarios.

Service Worker Cookie Subscription
1self.addEventListener('install', (event) => {2 event.waitUntil(async () => {3 await self.registration.cookies.subscribe({4 name: 'auth-token',5 url: { path: '/' }6 });7 });8});9 10self.addEventListener('cookiechange', (event) => {11 for (const change of event.changed) {12 if (change.name === 'auth-token') {13 if (!change.value) {14 self.caches.delete('api-cache');15 }16 }17 }18});

Browser Support and Compatibility

The Cookie Store API has achieved significant adoption in Chromium-based browsers including Chrome, Edge, and Opera. Firefox has implemented partial support behind feature flags, with active development toward full implementation. Safari's support remains limited.

Implementing Feature Detection and Fallbacks

Production applications require comprehensive fallback strategies that maintain functionality across all browsers while progressively enhancing capable environments. Our web development team recommends implementing feature detection and maintaining legacy support for older browsers to ensure broad compatibility.

Cookie Management with Fallback Support
1class CookieManager {2 constructor() {3 this.useModernAPI = 'cookieStore' in window;4 }5 6 async setCookie(name, value, options = {}) {7 if (this.useModernAPI) {8 return cookieStore.set({ name, value, ...options });9 }10 return this.fallbackSetCookie(name, value, options);11 }12 13 async getCookie(name) {14 if (this.useModernAPI) {15 const cookie = await cookieStore.get(name);16 return cookie?.value ?? null;17 }18 return this.fallbackGetCookie(name);19 }20 21 fallbackSetCookie(name, value, options = {}) {22 let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;23 if (options.expires) {24 cookie += `; expires=${new Date(options.expires).toUTCString()}`;25 }26 if (options.path) cookie += `; path=${options.path}`;27 if (options.sameSite) cookie += `; samesite=${options.sameSite}`;28 if (options.secure) cookie += '; secure';29 document.cookie = cookie;30 }31 32 fallbackGetCookie(name) {33 const cookies = document.cookie.split(';');34 const target = `${encodeURIComponent(name)}=`;35 for (const cookie of cookies) {36 const trimmed = cookie.trim();37 if (trimmed.startsWith(target)) {38 return decodeURIComponent(trimmed.slice(target.length));39 }40 }41 return null;42 }43}

Frequently Asked Questions

Build Modern Web Applications with Digital Thrive

Our team specializes in building performant web applications using the latest web APIs and frameworks like Next.js.