{"record":{"id":"6776aa50cee7ebe2","repo":"mantinedev/mantine","slug":"mantine-core-local-storage-color-scheme-manager","errorCode":null,"errorMessage":"[@mantine/core] Local storage color scheme manager was unable to save color scheme.","messagePattern":"\\[@mantine/core\\] Local storage color scheme manager was unable to save color scheme\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/@mantine/core/src/core/MantineProvider/color-scheme-managers/local-storage-manager.ts","lineNumber":33,"sourceCode":"    get: (defaultValue) => {\n      if (typeof window === 'undefined') {\n        return defaultValue;\n      }\n\n      try {\n        const storedColorScheme = window.localStorage.getItem(key);\n        return isMantineColorScheme(storedColorScheme) ? storedColorScheme : defaultValue;\n      } catch {\n        return defaultValue;\n      }\n    },\n\n    set: (value) => {\n      try {\n        window.localStorage.setItem(key, value);\n      } catch (error) {\n        // oxlint-disable-next-line no-console\n        console.warn(\n          '[@mantine/core] Local storage color scheme manager was unable to save color scheme.',\n          error\n        );\n      }\n    },\n\n    subscribe: (onUpdate) => {\n      handleStorageEvent = (event) => {\n        if (event.storageArea === window.localStorage && event.key === key) {\n          isMantineColorScheme(event.newValue) && onUpdate(event.newValue);\n        }\n      };\n\n      window.addEventListener('storage', handleStorageEvent);\n    },\n\n    unsubscribe: () => {\n      window.removeEventListener('storage', handleStorageEvent);","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/mantinedev/mantine/blob/8a284e2c2c53a9cb6f39f5dc389bf41b7a2073f8/packages/@mantine/core/src/core/MantineProvider/color-scheme-managers/local-storage-manager.ts#L15-L51","documentation":"A console.warn from @mantine/core's default color scheme manager (localStorageColorSchemeManager) when saving the color scheme to window.localStorage throws. The color scheme still applies for the current session; it just won't persist across reloads. The error object is logged alongside the message to identify the cause.","triggerScenarios":"MantineProvider mounts or the color scheme changes (user toggles dark/light), and window.localStorage.setItem(key, value) throws — blocked storage in privacy settings, third-party iframe context, or storage quota exceeded. The default manager key is 'mantine-color-scheme' unless customized.","commonSituations":"Embedded apps (widgets, chat plugins) in third-party iframes with cookies blocked; Safari private mode / ITP; 'Block all cookies' browser settings; privacy extensions; SSR setups where localStorage access fails during hydration.","solutions":["Confirm storage access is the issue by reading the logged error object (quota vs SecurityError)","If persistence is optional, ignore the warning — color scheme switching still works per-session","Use a custom color scheme manager that falls back to cookies or in-memory storage: new MantineProvider({ forceColorScheme }) or pass a custom colorSchemeManager implementing get/set without localStorage","For iframes, request storage access via document.requestStorageAccess() before saving"],"exampleFix":"// before\n<MantineProvider>\n  <App />\n</MantineProvider>\n\n// after\nimport { MantineProvider, createTheme } from '@mantine/core';\n\n// in-memory manager: no localStorage, no warning\nconst memoryManager = {\n  get: () => undefined,\n  set: () => {},\n  clear: () => {},\n};\n\n<MantineProvider colorSchemeManager={memoryManager}>\n  <App />\n</MantineProvider>","handlingStrategy":"fallback","validationCode":"function canPersistColorScheme(): boolean {\n  try {\n    window.localStorage.setItem('__cs__', 'auto');\n    window.localStorage.removeItem('__cs__');\n    return true;\n  } catch {\n    return false;\n  }\n}","typeGuard":null,"tryCatchPattern":"// Library catches internally; to avoid the warning entirely, supply a manager that cannot fail:\n// see custom colorSchemeManager below.","preventionTips":["Pass a custom colorSchemeManager when embedding Mantine in iframes or privacy-sensitive contexts","Consider cookie-based persistence as a fallback medium","Do not rely on persisted color scheme being available; support forceColorScheme as an override","Silence expected warnings in tests with a console.warn spy"],"tags":["color-scheme","local-storage","mantine-provider","dark-mode","warning"],"backgroundTag":"local-storage-blocked","analyzedSha":"8a284e2c2c53a9cb6f39f5dc389bf41b7a2073f8","analyzedAt":"2026-08-28T10:25:51.087Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}