{"_id":"create-ls","_rev":"6-29b9224281422c5a2a2f1dfae143b44c","name":"create-ls","dist-tags":{"latest":"1.2.2"},"versions":{"1.0.0":{"name":"create-ls","version":"1.0.0","author":{"url":"https://jp.coffee","name":"JP.Coffee"},"license":"MIT","_id":"create-ls@1.0.0","maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"homepage":"https://github.com/jp-coffee/ls-state#readme","bugs":{"url":"https://github.com/jp-coffee/ls-state/issues"},"dist":{"shasum":"919f768a78f4915b43c27b3c3c479319ac9f8cd3","tarball":"https://registry.npmjs.org/create-ls/-/create-ls-1.0.0.tgz","fileCount":9,"integrity":"sha512-gAdiy1AIl0uPuFrskllh4Oz4L+TJ1LEzuGHx6XQQqZ42KPZ1gdCuW6D9fiA8zdPxB5lzuFhYiPQg76Q3zB33gA==","signatures":[{"sig":"MEQCIBDi9n9dql2Ltt0C6xi6pq7afGRY01kv7RoKxYpktguKAiBFLbepTuyeW6HJt84NlhZG9ArPUGDyHc3nDLSWVPG5KQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14458},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"0166c0bde17acf1daf209889069667a3314ea085","scripts":{"lint":"eslint .","test":"vitest run","build":"npm run prebuild && tsc","clean":"rimraf dist","lint:fix":"eslint . --ext .ts,.tsx --fix","prebuild":"npm run clean","test:watch":"vitest --watch"},"_npmUser":{"name":"jp.coffee","email":"me@jp.coffee"},"repository":{"url":"git+https://github.com/jp-coffee/ls-state.git","type":"git"},"_npmVersion":"10.9.2","description":"A simple state manager for local storage in React applications.","directories":{},"displayName":"Create React Local Storage State","_nodeVersion":"22.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.3","jsdom":"^26.0.0","eslint":"^9.23.0","rimraf":"^6.0.1","vitest":"^3.0.9","typescript":"^5.8.2","@types/react":"^19.0.12","eslint-plugin-react":"^7.37.4","@vitejs/plugin-react":"^4.3.4","eslint-plugin-import":"^2.31.0","@testing-library/react":"^16.2.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.28.0","eslint-plugin-react-hooks":"^5.2.0","@typescript-eslint/eslint-plugin":"^8.28.0"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/create-ls_1.0.0_1743168071043_0.869279161941187","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"create-ls","version":"1.0.1","author":{"url":"https://jp.coffee","name":"JP.Coffee"},"license":"MIT","_id":"create-ls@1.0.1","maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"homepage":"https://github.com/jp-coffee/ls-state#readme","bugs":{"url":"https://github.com/jp-coffee/ls-state/issues"},"dist":{"shasum":"152a5a1de16c0f6099a2db873a680aa380b4cfd8","tarball":"https://registry.npmjs.org/create-ls/-/create-ls-1.0.1.tgz","fileCount":9,"integrity":"sha512-4dqnPhE4zC9GtAHgW96ebeWW6KioMAOVAqheZ/+67pgG9zrzkjqwOA8OGjPiry1AxQi0nDvnZyKY1m29pdYERw==","signatures":[{"sig":"MEQCIEZScH52Uu3xfupwzE1rvlN9r3eg48xUhR7ZStTA8XfRAiB3Wi2p7J2hT9ARKDZlQSi2oQjzVHCzZM0EgMpZwpev+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14513},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"91ff9390d0026f1e4e5b456c4ef8408793eba203","scripts":{"lint":"eslint .","test":"vitest run","build":"npm run prebuild && tsc","clean":"rimraf dist","lint:fix":"eslint . --ext .ts,.tsx --fix","prebuild":"npm run clean","test:watch":"vitest --watch"},"_npmUser":{"name":"jp.coffee","email":"me@jp.coffee"},"repository":{"url":"git+https://github.com/jp-coffee/ls-state.git","type":"git"},"_npmVersion":"10.9.2","description":"A simple state manager for local storage in React applications.","directories":{},"displayName":"Create React Local Storage State","_nodeVersion":"22.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.3","jsdom":"^26.0.0","eslint":"^9.23.0","rimraf":"^6.0.1","vitest":"^3.0.9","typescript":"^5.8.2","@types/react":"^19.0.12","eslint-plugin-react":"^7.37.4","@vitejs/plugin-react":"^4.3.4","eslint-plugin-import":"^2.31.0","@testing-library/react":"^16.2.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.28.0","eslint-plugin-react-hooks":"^5.2.0","@typescript-eslint/eslint-plugin":"^8.28.0"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/create-ls_1.0.1_1743168354314_0.9420177344892713","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"create-ls","version":"1.0.2","author":{"url":"https://jp.coffee","name":"JP.Coffee"},"license":"MIT","_id":"create-ls@1.0.2","maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"homepage":"https://github.com/jp-coffee/create-ls#readme","bugs":{"url":"https://github.com/jp-coffee/create-ls/issues"},"dist":{"shasum":"c4adb61d101d3c1336f797de7dc1058c5ed4aa0c","tarball":"https://registry.npmjs.org/create-ls/-/create-ls-1.0.2.tgz","fileCount":6,"integrity":"sha512-UL1rRx/BTzX2a6EX5pyrI7rl5AG5cCCFsJFpjfgYrL1j8iMNWD1iBU9Feeh7eMVlbI+vwO+0Ajd5v1pV7lw5jQ==","signatures":[{"sig":"MEYCIQCU87Y81eEbOyWgNyLFB7breTzx/pJ9JsHKduWHsUU4/AIhALcIc3BWAVkSSKZIyX8SpgyIOflWGRbvaP6d8qy79mj2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10887},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8a9b67adde398e807aaa028b2bf35bbed30c3aae","scripts":{"lint":"eslint .","test":"vitest run","build":"npm run prebuild && tsc","clean":"rimraf dist","lint:fix":"eslint . --ext .ts,.tsx --fix","prebuild":"npm run clean","test:watch":"vitest --watch"},"_npmUser":{"name":"jp.coffee","email":"me@jp.coffee"},"repository":{"url":"git+https://github.com/jp-coffee/create-ls.git","type":"git"},"_npmVersion":"10.9.2","description":"A simple state manager for local storage in React applications.","directories":{},"displayName":"Create React Local Storage State","_nodeVersion":"22.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.3","jsdom":"^26.0.0","eslint":"^9.23.0","rimraf":"^6.0.1","vitest":"^3.0.9","typescript":"^5.8.2","@types/react":"^19.0.12","eslint-plugin-react":"^7.37.4","@vitejs/plugin-react":"^4.3.4","eslint-plugin-import":"^2.31.0","@testing-library/react":"^16.2.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.28.0","eslint-plugin-react-hooks":"^5.2.0","@typescript-eslint/eslint-plugin":"^8.28.0"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/create-ls_1.0.2_1743197136616_0.8767634039588095","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"create-ls","version":"1.0.3","author":{"url":"https://jp.coffee","name":"JP.Coffee"},"license":"MIT","_id":"create-ls@1.0.3","maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"homepage":"https://github.com/jp-coffee/create-ls#readme","bugs":{"url":"https://github.com/jp-coffee/create-ls/issues"},"dist":{"shasum":"296e096f054555c08e2c7f5f0af46b3fb762ebc0","tarball":"https://registry.npmjs.org/create-ls/-/create-ls-1.0.3.tgz","fileCount":6,"integrity":"sha512-eD3AcooUsjvPqebxF3gZb4H59vbYg4r3JOtMllWjUD6bsp9b4CTAsy3Vh4HPTDz77o00V+N0zYwVPf0EDtKclg==","signatures":[{"sig":"MEUCIDm4+9guMc1S3t/VYChbluKvb/uisM9/bTKIawzCszwYAiEA6JIKdw8v+zDKKkAyXVmORu81DdM7Qt/4Lto8d0FTn7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10894},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"422713b74d3d00718e971affcd1726b9a04aebfc","scripts":{"lint":"eslint .","test":"vitest run","build":"npm run prebuild && tsc","clean":"rimraf dist","lint:fix":"eslint . --ext .ts,.tsx --fix","prebuild":"npm run clean","test:watch":"vitest --watch"},"_npmUser":{"name":"jp.coffee","email":"me@jp.coffee"},"repository":{"url":"git+https://github.com/jp-coffee/create-ls.git","type":"git"},"_npmVersion":"10.9.2","description":"A simple state manager for local storage in React applications.","directories":{},"displayName":"Create React Local Storage State","_nodeVersion":"22.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.3","jsdom":"^26.0.0","eslint":"^9.23.0","rimraf":"^6.0.1","vitest":"^3.0.9","typescript":"^5.8.2","@types/react":"^19.0.12","eslint-plugin-react":"^7.37.4","@vitejs/plugin-react":"^4.3.4","eslint-plugin-import":"^2.31.0","@testing-library/react":"^16.2.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.28.0","eslint-plugin-react-hooks":"^5.2.0","@typescript-eslint/eslint-plugin":"^8.28.0"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/create-ls_1.0.3_1743442466865_0.9951902405346502","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"create-ls","version":"1.1.0","author":{"url":"https://jp.coffee","name":"JP.Coffee"},"license":"MIT","_id":"create-ls@1.1.0","maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"homepage":"https://github.com/jp-coffee/create-ls#readme","bugs":{"url":"https://github.com/jp-coffee/create-ls/issues"},"dist":{"shasum":"aa657ae8726cbc19e51bf44816b796e579360644","tarball":"https://registry.npmjs.org/create-ls/-/create-ls-1.1.0.tgz","fileCount":6,"integrity":"sha512-QtGvF6KWiXmWevvfIA/PDJpFbmuiv0PKFN6NACpxkzhnnE0WHqguoWfmBeGgSh8eIIsny85mhzSJXNRkonNUkA==","signatures":[{"sig":"MEYCIQDXZLel0m+RTRoBAKxo7nQ09g8J4Q11XP9VpsInqDYUYAIhAOV87OHemzJQdP5shXspPvthDtfD3YmncrozpB806un4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12673},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b8bf63e02363bd409239320edad62b69209262eb","scripts":{"lint":"eslint .","test":"vitest run","build":"npm run prebuild && tsc","clean":"rimraf dist","lint:fix":"eslint . --ext .ts,.tsx --fix","prebuild":"npm run clean","typecheck":"tsc --noEmit","test:watch":"vitest --watch"},"_npmUser":{"name":"jp.coffee","email":"me@jp.coffee"},"repository":{"url":"git+https://github.com/jp-coffee/create-ls.git","type":"git"},"_npmVersion":"10.9.2","description":"A simple state manager for local storage in React applications.","directories":{},"displayName":"Create React Local Storage State","_nodeVersion":"22.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.3","jsdom":"^26.0.0","eslint":"^9.23.0","rimraf":"^6.0.1","vitest":"^3.0.9","typescript":"^5.8.2","@types/react":"^19.0.12","eslint-plugin-react":"^7.37.4","@vitejs/plugin-react":"^4.3.4","eslint-plugin-import":"^2.31.0","@testing-library/react":"^16.2.0","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^8.28.0","eslint-plugin-react-hooks":"^5.2.0","@typescript-eslint/eslint-plugin":"^8.28.0"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/create-ls_1.1.0_1748548570332_0.8715276529942781","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"create-ls","displayName":"Create React Local Storage State","version":"1.2.2","description":"A simple state manager for local storage in React applications.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"license":"MIT","author":{"name":"JP.Coffee","url":"https://jp.coffee"},"repository":{"type":"git","url":"git+https://github.com/jp-coffee/create-ls.git"},"bugs":{"url":"https://github.com/jp-coffee/create-ls/issues"},"homepage":"https://github.com/jp-coffee/create-ls#readme","keywords":["react","local-storage","state-management","hooks","persistent-state","cross-tab-sync","real-time-sync"],"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"npm run prebuild && tsc","clean":"rimraf dist","lint":"eslint .","lint:fix":"eslint . --ext .ts,.tsx --fix","prebuild":"npm run clean","test":"vitest run","test:watch":"vitest --watch","typecheck":"tsc --noEmit","verify-provenance":"./scripts/verify-provenance.sh"},"devDependencies":{"@testing-library/jest-dom":"^6.6.3","@testing-library/react":"^16.2.0","@types/react":"^19.0.12","@typescript-eslint/eslint-plugin":"^8.28.0","@typescript-eslint/parser":"^8.28.0","@vitejs/plugin-react":"^4.3.4","eslint":"^9.23.0","eslint-plugin-import":"^2.31.0","eslint-plugin-react":"^7.37.4","eslint-plugin-react-hooks":"^5.2.0","jsdom":"^26.0.0","rimraf":"^6.0.1","typescript":"^5.8.2","vite":"^6.2.3","vitest":"^3.0.9"},"peerDependencies":{"react":"^19.0.0"},"_id":"create-ls@1.2.2","gitHead":"85cf066ed6c01a9aaa1e181ff19edecd9089c505","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-BaaQrrs6hVHbRD2QkkR2fNagpNgV6EdnYiz23myNruKQEy78zMIPkLYm1VjPMFlI1l80YbKUFagY3BAX97b/fw==","shasum":"6f8c939517eb9168037ec0c16c7b97d9c2a8e0dc","tarball":"https://registry.npmjs.org/create-ls/-/create-ls-1.2.2.tgz","fileCount":6,"unpackedSize":13396,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/create-ls@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB+Mzr/8sbArRK99mBVEDej5P1c4kgz+h3xIM5O6x9PGAiEA8d50svCo0Iq1Kj+dSIJtzI3t5OqsmsBdjezlpFS7Ntw="}]},"_npmUser":{"name":"jp.coffee","email":"me@jp.coffee"},"directories":{},"maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/create-ls_1.2.2_1754493818390_0.14342881833594157"},"_hasShrinkwrap":false}},"time":{"created":"2025-03-28T13:21:10.925Z","modified":"2025-08-06T15:23:38.939Z","1.0.0":"2025-03-28T13:21:11.236Z","1.0.1":"2025-03-28T13:25:54.494Z","1.0.2":"2025-03-28T21:25:36.815Z","1.0.3":"2025-03-31T17:34:27.052Z","1.1.0":"2025-05-29T19:56:10.513Z","1.2.2":"2025-08-06T15:23:38.566Z"},"bugs":{"url":"https://github.com/jp-coffee/create-ls/issues"},"author":{"name":"JP.Coffee","url":"https://jp.coffee"},"license":"MIT","homepage":"https://github.com/jp-coffee/create-ls#readme","repository":{"type":"git","url":"git+https://github.com/jp-coffee/create-ls.git"},"description":"A simple state manager for local storage in React applications.","maintainers":[{"name":"jp.coffee","email":"me@jp.coffee"}],"readme":"![create-ls Banner](https://raw.githubusercontent.com/jp-coffee/create-ls/main/media/create-ls-banner.png)\n\n**Persistent, Real-Time Storage for React – No State Management Needed** Automatically sync local storage across components, tabs, and sessions with ease.\n\n[![npm version](https://img.shields.io/npm/v/create-ls.svg)](https://www.npmjs.com/package/create-ls)\n[![npm downloads](https://img.shields.io/npm/dt/create-ls.svg)](https://www.npmjs.com/package/create-ls)\n[![License](https://img.shields.io/github/license/jp-coffee/create-ls)](LICENSE)\n[![Tests Status](https://img.shields.io/github/actions/workflow/status/jp-coffee/create-ls/lint-and-test.yml?branch=main)](https://github.com/jp-coffee/create-ls/actions)\n\n## 🚀 Features\n\n- 🔄 **Real-time Sync** – Watch and react to local storage changes instantly across components.\n- 💾 **Persistent State** – Data remains intact across page reloads and sessions.\n- ⚡ **Lightweight & Fast** – No dependencies, minimal overhead.\n- 🛠 **Simple API** – Get, set, and reset to changes effortlessly.\n- 📡 **Cross-Tab Communication** – Sync updates across different tabs/windows.\n- 🚫 **No External State Management** – Eliminate the need for Redux, Context API, or Zustand.\n\n## 🔒 Security & Provenance\n\nThis package is published with NPM package provenance, which provides cryptographic proof that this package was built from the source code in this repository using the GitHub Actions workflow.\n\nTo verify the provenance of this package:\n\n```bash\nnpm audit signatures\n```\n\nThis will verify that the package was signed by the trusted GitHub Actions environment and matches the source code in this repository.\n\n## 📦 Getting Started\n\n### Installation\n\nInstall via your preferred package manager:\n\n```sh\n# npm\nnpm install create-ls\n\n# yarn\nyarn add create-ls\n\n# pnpm\npnpm add create-ls\n\n# bun\nbun add create-ls\n```\n\n### Basic Usage\n\n```tsx\n\"use client\";\n\nimport { createLS } from \"create-ls\";\n\nconst Page: React.FC = () => {\n  const counter = createLS(\"count\", 0);\n\n  return (\n    <div>\n      <h1>Count: {counter.get()}</h1>\n      <button onClick={() => counter.set(counter.get() + 1)}>\n        Increment by 1\n      </button>\n    </div>\n  );\n};\n\nexport default Page;\n```\n\n## 🔍 API Reference\n\n### `createLS<T>(key: string, initialValue?: T)`\n\nA React hook for reading and updating local storage with real-time sync.\n\n#### Parameters\n\n- `key` (string): The key under which the value is stored in local storage.\n- `initialValue` (T, optional): The initial value to set if the key does not exist in local storage.\n  If not provided, the value will be an empty string if the key does not exist.\n\n#### Returns\n\n- An object with the following properties:\n  - `get`: A function to retrieve the current value from local storage.\n  - `set`: A function to update the value in local storage and trigger re-renders.\n  - `reset`: A function to reset the value in local storage to the initial value.\n  - `hasValue`: A boolean indicating whether the key exists in local storage.\n\n### `get()`\n\nA function to retrieve the current value from local storage.\n\n**Returns**\n\n- The current value stored in local storage for the specified key.\n\n### `set(value: T)`\n\nA function to update the value in local storage and trigger re-renders.\n\n**Parameters**\n\n- `value` (T): The new value to set in local storage.\n\n**Returns**\n\n- `void`\n\n### `reset()`\n\nA function to reset the value in local storage to the initial value.\n\n**Returns**\n\n- `void`\n\n### `hasValue()`\n\nA boolean indicating whether the key exists in local storage.\n\n**Returns**\n\n- `boolean`: `true` if the key exists in local storage, `false` otherwise.\n\n## 💡 Examples\n\n### Using all methods\n\n```tsx\n\"use client\";\n\nimport { createLS } from \"create-ls\";\n\nconst Page: React.FC = () => {\n  const counter = createLS(\"count\", 0);\n\n  return (\n    <div>\n      {counter.hasValue() ? (\n        <h1>Count: {counter.get()}</h1>\n      ) : (\n        <h1>Click the button to set the count</h1>\n      )}\n      <button onClick={() => counter.set(counter.get() + 1)}>\n        Increment by 1\n      </button>\n      <button onClick={() => counter.reset()}>Reset Count</button>\n    </div>\n  );\n};\n\nexport default Page;\n```\n\n### Using Multiple Local Storage Keys\n\n```tsx\n\"use client\";\n\nimport { createLS } from \"create-ls\";\n\nconst Page: React.FC = () => {\n  const counter1 = createLS(\"count1\", 0);\n  const counter2 = createLS(\"count2\", 0);\n\n  return (\n    <div>\n      <h1>Count 1: {counter1.get()}</h1>\n      <h1>Count 2: {counter2.get()}</h1>\n      <button onClick={() => counter1.set(counter1.get() + 1)}>\n        Increment Count 1 by 1\n      </button>\n      <button onClick={() => counter2.set(counter2.get() + 1)}>\n        Increment Count 2 by 1\n      </button>\n    </div>\n  );\n};\n\nexport default Page;\n```\n\n## 🛠 Contributing\n\nContributions are welcome! To contribute:\n\n1. Fork the repository.\n2. Create a feature branch.\n3. Commit your changes.\n4. Open a Pull Request.\n\n## 📜 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 👨‍💻 Created By\n\nThis package is developed and maintained by [JP.Coffee](https://github.com/jp-coffee). Feel free to reach out or open an issue for any questions or suggestions!\n","readmeFilename":"README.md","keywords":["react","local-storage","state-management","hooks","persistent-state","cross-tab-sync","real-time-sync"]}