{"_id":"@convex-localfirst/react","_rev":"5-7857b2be805cc49e321a8ef8a8ed7555","name":"@convex-localfirst/react","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@convex-localfirst/react","version":"0.1.0","keywords":["convex","local-first","offline","react","hooks"],"license":"MIT","_id":"@convex-localfirst/react@0.1.0","maintainers":[{"name":"fanzzzd","email":"fanzzzd@outlook.com"}],"dist":{"shasum":"2772e4514f7dbbabeb84b35bfe96201ba46d6534","tarball":"https://registry.npmjs.org/@convex-localfirst/react/-/react-0.1.0.tgz","fileCount":7,"integrity":"sha512-QYeCNwpRPTT/Z7sdvB2w+5jLOHBPsFFm1sxNBC8mJC6/LOYE34l6SgwaHDF5WLFTC/a7pR23BVFLuynNcGF/Rg==","signatures":[{"sig":"MEQCIFs8o8tw5A5Tnb3punRDzLYp6UfThoKumWbyTc9VPy+6AiB2MIg/aR0+VBTg+EJwST4zzaqJkY8ZyyQP0jVQ96qyLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25818},"main":"./dist/index.js","type":"module","_from":"file:convex-localfirst-react-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./shadow":{"types":"./dist/shadow.d.ts","import":"./dist/shadow.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json --noEmit false --emitDeclarationOnly false","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"fanzzzd","email":"fanzzzd@outlook.com"},"_resolved":"/private/var/folders/2b/3_lqmflj4qx3nl8cf287333r0000gn/T/27b8af5943db9ee5c9e2426d3f668d87/convex-localfirst-react-0.1.0.tgz","_integrity":"sha512-QYeCNwpRPTT/Z7sdvB2w+5jLOHBPsFFm1sxNBC8mJC6/LOYE34l6SgwaHDF5WLFTC/a7pR23BVFLuynNcGF/Rg==","_npmVersion":"11.17.0","description":"Convex-compatible React hooks (useQuery/useMutation/useSyncStatus) for local-first, offline-capable apps.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@convex-localfirst/core":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","react":"^19.2.7","vitest":"^2.1.0","react-dom":"^19.2.7","typescript":"^5.7.0","@types/react":"^19.0.0","fake-indexeddb":"^6.2.5","@types/react-dom":"^19.0.0","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2"},"peerDependencies":{"react":">=18.0.0","convex":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.0_1782715469077_0.6259443924306145","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved into convex-localfirst (one package). Install convex-localfirst and import convex-localfirst/<subpath> instead."},"0.1.1":{"name":"@convex-localfirst/react","version":"0.1.1","keywords":["convex","local-first","offline","react","hooks"],"author":{"name":"Fanzzzd"},"license":"MIT","_id":"@convex-localfirst/react@0.1.1","maintainers":[{"name":"fanzzzd","email":"fanzzzd@outlook.com"}],"homepage":"https://github.com/Fanzzzd/convex-localfirst#readme","bugs":{"url":"https://github.com/Fanzzzd/convex-localfirst/issues"},"dist":{"shasum":"9628c377bb533ed466bcfece9f2c52add5d74837","tarball":"https://registry.npmjs.org/@convex-localfirst/react/-/react-0.1.1.tgz","fileCount":7,"integrity":"sha512-xLS1oUWp4EV8Tu1Oel/e61pNzT+ozU+cwzbeO3d8XOnS1l7PcU3/zRrh/44JwHj4gyGW1BS/0qblYrNsX4eorw==","signatures":[{"sig":"MEYCIQDO9f7Zu/CIM4RVPNj/lVtNxpcL6yJdQLF4jMF0cURGugIhAN7udePjSfINB7St00MIKOFffFpXArBZVOHmrqYqLY8+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@convex-localfirst%2freact@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":26174},"main":"./dist/index.js","type":"module","_from":"file:convex-localfirst-react-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./shadow":{"types":"./dist/shadow.d.ts","import":"./dist/shadow.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json --noEmit false --emitDeclarationOnly false","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"fanzzzd","email":"fanzzzd@outlook.com"},"_resolved":"/tmp/d295c2151efca15514a7b945aaef7c35/convex-localfirst-react-0.1.1.tgz","_integrity":"sha512-xLS1oUWp4EV8Tu1Oel/e61pNzT+ozU+cwzbeO3d8XOnS1l7PcU3/zRrh/44JwHj4gyGW1BS/0qblYrNsX4eorw==","repository":{"url":"git+https://github.com/Fanzzzd/convex-localfirst.git","type":"git","directory":"packages/react"},"_npmVersion":"10.8.2","description":"Convex-compatible React hooks (useQuery/useMutation/useSyncStatus) for local-first, offline-capable apps.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@convex-localfirst/core":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","react":"^19.2.7","vitest":"^2.1.0","react-dom":"^19.2.7","typescript":"^5.7.0","@types/react":"^19.0.0","fake-indexeddb":"^6.2.5","@types/react-dom":"^19.0.0","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2"},"peerDependencies":{"react":">=18.0.0","convex":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.1_1782748210405_0.28176156646606065","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved into convex-localfirst (one package). Install convex-localfirst and import convex-localfirst/<subpath> instead."},"0.2.0":{"name":"@convex-localfirst/react","version":"0.2.0","keywords":["convex","local-first","offline","react","hooks"],"author":{"name":"Fanzzzd"},"license":"MIT","_id":"@convex-localfirst/react@0.2.0","maintainers":[{"name":"fanzzzd","email":"fanzzzd@outlook.com"}],"homepage":"https://github.com/Fanzzzd/convex-localfirst#readme","bugs":{"url":"https://github.com/Fanzzzd/convex-localfirst/issues"},"dist":{"shasum":"2fb244910211721eee78441e92a8cc75f8baa155","tarball":"https://registry.npmjs.org/@convex-localfirst/react/-/react-0.2.0.tgz","fileCount":7,"integrity":"sha512-QKmDUoMVJCCRwQIo7fD5F6LowkgQJfTJWlHcWf8aGPN3RuoAAtjoqcovNhqQQHsxJAAw2zAqM+TL16W4uvGhLg==","signatures":[{"sig":"MEYCIQDMql1e7Vxh2FK1S5s4Is4Urdof5ZjtMDvIyW4RB81dRQIhANSXgBvD137yCTgR+2viAw6EVQnMTa7+HxjbuVQFWKFc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@convex-localfirst%2freact@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35235},"main":"./dist/index.js","type":"module","_from":"file:convex-localfirst-react-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./shadow":{"types":"./dist/shadow.d.ts","import":"./dist/shadow.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json --noEmit false --emitDeclarationOnly false","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"fanzzzd","email":"fanzzzd@outlook.com"},"_resolved":"/tmp/748ad4f23b61b113dad8f20f4df5c642/convex-localfirst-react-0.2.0.tgz","_integrity":"sha512-QKmDUoMVJCCRwQIo7fD5F6LowkgQJfTJWlHcWf8aGPN3RuoAAtjoqcovNhqQQHsxJAAw2zAqM+TL16W4uvGhLg==","repository":{"url":"git+https://github.com/Fanzzzd/convex-localfirst.git","type":"git","directory":"packages/react"},"_npmVersion":"10.8.2","description":"Convex-compatible React hooks (useQuery/useMutation/useSyncStatus) for local-first, offline-capable apps.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@convex-localfirst/core":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","react":"^19.2.7","vitest":"^2.1.0","react-dom":"^19.2.7","typescript":"^5.7.0","@types/react":"^19.0.0","fake-indexeddb":"^6.2.5","@types/react-dom":"^19.0.0","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2"},"peerDependencies":{"react":">=18.0.0","convex":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.2.0_1784389733834_0.26561175961899575","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved into convex-localfirst (one package). Install convex-localfirst and import convex-localfirst/<subpath> instead."},"0.2.1":{"name":"@convex-localfirst/react","version":"0.2.1","keywords":["convex","local-first","offline","react","hooks"],"author":{"name":"Fanzzzd"},"license":"MIT","_id":"@convex-localfirst/react@0.2.1","maintainers":[{"name":"fanzzzd","email":"fanzzzd@outlook.com"}],"homepage":"https://github.com/Fanzzzd/convex-localfirst#readme","bugs":{"url":"https://github.com/Fanzzzd/convex-localfirst/issues"},"dist":{"shasum":"e2092d50e896326fb6400296290bb72935a54eb2","tarball":"https://registry.npmjs.org/@convex-localfirst/react/-/react-0.2.1.tgz","fileCount":7,"integrity":"sha512-4gKIJbFPTk7sQGgxPcDqo8PpPqU5cDhjNYH+eDWwmuJEhvW2hRHJ2L9MGgdVhIy9zuC90U/ARNGBxCMUg/YOKg==","signatures":[{"sig":"MEQCIAhLniMfVP9FFeSSiqtGTvUR+hf44PEwv5ayfA1E+vgCAiAGBSX8FSkGNINbOMc2Bzuf+0XY0UemPGrfAOcFxc8Ieg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@convex-localfirst%2freact@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35235},"main":"./dist/index.js","type":"module","_from":"file:convex-localfirst-react-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./shadow":{"types":"./dist/shadow.d.ts","import":"./dist/shadow.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json --noEmit false --emitDeclarationOnly false","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:057216ca-e52d-45d3-8935-02b15ee0c845"}},"_resolved":"/tmp/1868c3b393c250b2e6832094587e865c/convex-localfirst-react-0.2.1.tgz","_integrity":"sha512-4gKIJbFPTk7sQGgxPcDqo8PpPqU5cDhjNYH+eDWwmuJEhvW2hRHJ2L9MGgdVhIy9zuC90U/ARNGBxCMUg/YOKg==","repository":{"url":"git+https://github.com/Fanzzzd/convex-localfirst.git","type":"git","directory":"packages/react"},"_npmVersion":"11.16.0","description":"Convex-compatible React hooks (useQuery/useMutation/useSyncStatus) for local-first, offline-capable apps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@convex-localfirst/core":"0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","react":"^19.2.7","vitest":"^2.1.0","react-dom":"^19.2.7","typescript":"^5.7.0","@types/react":"^19.0.0","fake-indexeddb":"^6.2.5","@types/react-dom":"^19.0.0","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2"},"peerDependencies":{"react":">=18.0.0","convex":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.2.1_1784445128597_0.05084597559043713","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved into convex-localfirst (one package). Install convex-localfirst and import convex-localfirst/<subpath> instead."}},"time":{"created":"2026-06-29T06:44:28.970Z","modified":"2026-07-19T08:08:10.014Z","0.1.0":"2026-06-29T06:44:29.212Z","0.1.1":"2026-06-29T15:50:10.539Z","0.2.0":"2026-07-18T15:48:53.999Z","0.2.1":"2026-07-19T07:12:08.738Z"},"bugs":{"url":"https://github.com/Fanzzzd/convex-localfirst/issues"},"author":{"name":"Fanzzzd"},"license":"MIT","homepage":"https://github.com/Fanzzzd/convex-localfirst#readme","keywords":["convex","local-first","offline","react","hooks"],"repository":{"url":"git+https://github.com/Fanzzzd/convex-localfirst.git","type":"git","directory":"packages/react"},"description":"Convex-compatible React hooks (useQuery/useMutation/useSyncStatus) for local-first, offline-capable apps.","maintainers":[{"name":"fanzzzd","email":"fanzzzd@outlook.com"}],"readme":"# @convex-localfirst/react\n\nConvex-compatible React hooks for local-first, offline-capable apps. Keep writing\n`useQuery` / `useMutation` — local-first tables read and write optimistically, work\noffline, and sync in the background, with Convex as the source of truth.\n\n```bash\nnpm install @convex-localfirst/react\n```\n\n```tsx\nimport { useMutation, useQuery, useSyncStatus } from \"@convex-localfirst/react\";\nimport { api } from \"../convex/_generated/api\";\n\nexport function Todos({ listId }: { listId: string }) {\n  const todos = useQuery(api.todos.list, { listId }, { initial: [] });\n  const create = useMutation(api.todos.create);\n  const sync = useSyncStatus();\n\n  return (\n    <button disabled={sync.blockedBySchemaMismatch} onClick={() => create({ listId, text: \"Ship it\" })}>\n      Add {todos.length} todos\n    </button>\n  );\n}\n```\n\nPeer dependencies: `convex`, `react`. MIT\n","readmeFilename":"README.md"}