{"_id":"@convex-dev/convex-lucia-auth","_rev":"30-496773704fec93e7476f991dc2b2837a","name":"@convex-dev/convex-lucia-auth","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@convex-dev/convex-lucia-auth","version":"0.0.1","_id":"@convex-dev/convex-lucia-auth@0.0.1","maintainers":[{"name":"sshader","email":"sarah@convex.dev"},{"name":"preslavle","email":"presleyle@gmail.com"},{"name":"xixixao","email":"xixixao@seznam.cz"},{"name":"arnoldtrakh","email":"arnold@convex.dev"},{"name":"ballingt","email":"thomasballinger@gmail.com"},{"name":"emmaling27","email":"emma@convex.dev"},{"name":"ikhare","email":"ikhare@convex.dev"},{"name":"sujayakar","email":"sujayakar@convex.dev"},{"name":"nipunn","email":"nipunn1313@gmail.com"},{"name":"gautamg795","email":"gautam@convex.dev"},{"name":"cowling","email":"james@convex.dev"}],"dist":{"shasum":"0c6a97cde082fa570f179f93a52d5c59ab22a2c2","tarball":"https://registry.npmjs.org/@convex-dev/convex-lucia-auth/-/convex-lucia-auth-0.0.1.tgz","fileCount":9,"integrity":"sha512-8vFXArQvT1AwDgJynIJj27MffGs7pZtuT39aFQJua6PtruWrZeNLCKr0EAViLv24Tab9nHIQdSprSFsUi8va2A==","signatures":[{"sig":"MEUCIA9M2QEq1Oax26HIiCKKDKSG5Hoxtw1Q6hVH2hNtOixfAiEAlnBm28c9onS6TDUYEwKduOs1dh51IKymeb777mxiIsI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33824},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"},"./email":{"types":"./src/email.ts","default":"./src/email.ts"},"./react":{"types":"./src/react.tsx","import":"./esm/react.js","require":"./cjs/react.js"}},"gitHead":"70e03e3dfe3c56c31fa347ca16c71462a02142ca","scripts":{"build":"rm -rf cjs esm && tsc -p .tsconfig.cjs.json && tsc -p .tsconfig.esm.json && echo '{\"type\": \"commonjs\"}' > cjs/package.json"},"_npmUser":{"name":"xixixao","email":"xixixao@seznam.cz"},"deprecated":"This library uses Lucia 2.x which has since been deprecated. Please see the Convex auth docs for latest recommendations on auth services: https://docs.convex.dev/auth","_npmVersion":"9.5.0","directories":{},"_nodeVersion":"18.15.0","dependencies":{"lucia":"^2.6.0","convex":"^1.0.2"},"typesVersions":{"*":{"*":["./src/index.ts"],"email":["./src/email.ts"],"react":["./src/react.tsx"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.4.5","eslint":"^8.45.0","typescript":"^5.0.2","@types/node":"^20.4.6","npm-run-all":"^4.1.5","@types/react":"^18.2.15","@types/react-dom":"^18.2.7","@vitejs/plugin-react":"^4.0.3","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lucia-auth_0.0.1_1694738547875_0.5237361900639423","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@convex-dev/convex-lucia-auth","version":"0.0.2","_id":"@convex-dev/convex-lucia-auth@0.0.2","maintainers":[{"name":"sshader","email":"sarah@convex.dev"},{"name":"preslavle","email":"presleyle@gmail.com"},{"name":"xixixao","email":"xixixao@seznam.cz"},{"name":"arnoldtrakh","email":"arnold@convex.dev"},{"name":"ballingt","email":"thomasballinger@gmail.com"},{"name":"emmaling27","email":"emma@convex.dev"},{"name":"ikhare","email":"ikhare@convex.dev"},{"name":"sujayakar","email":"sujayakar@convex.dev"},{"name":"nipunn","email":"nipunn1313@gmail.com"},{"name":"gautamg795","email":"gautam@convex.dev"},{"name":"cowling","email":"james@convex.dev"}],"dist":{"shasum":"ef4bf7ced793c803894c9592af304d9729b78369","tarball":"https://registry.npmjs.org/@convex-dev/convex-lucia-auth/-/convex-lucia-auth-0.0.2.tgz","fileCount":10,"integrity":"sha512-Ki9Vl5IXkezO8n0iTdyEeuIFgo8lkvsPqjFuAk9Jb8skt1h1F++tevj//OQB976xJ8F1QhzQuOEZUknbBh1DLw==","signatures":[{"sig":"MEQCIB9rvg0aS4ctPJWY7DK9KN1x+FqAHQl2xGY8S+iO4AJsAiApVCydiMmF4bRaX4DZlT8D9AtTBC2zcclozSCJAKAsTA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39185},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"},"./email":{"types":"./src/email.ts","default":"./src/email.ts"},"./react":{"types":"./src/react.tsx","import":"./esm/react.js","require":"./cjs/react.js"}},"gitHead":"ef0639b0df8cdf42256739c2b23fe38fe18b137e","scripts":{"build":"rm -rf cjs esm && tsc -p .tsconfig.cjs.json && tsc -p .tsconfig.esm.json && echo '{\"type\": \"commonjs\"}' > cjs/package.json"},"_npmUser":{"name":"xixixao","email":"xixixao@seznam.cz"},"deprecated":"This library uses Lucia 2.x which has since been deprecated. Please see the Convex auth docs for latest recommendations on auth services: https://docs.convex.dev/auth","_npmVersion":"9.5.0","description":"This library enables authentication built entirely on top of Convex without any third-party platform. It uses [Lucia](https://lucia-auth.com/) for the authentication logic.","directories":{},"_nodeVersion":"18.15.0","dependencies":{"lucia":"^2.6.0","convex":"^1.0.2"},"typesVersions":{"*":{"*":["./src/index.ts"],"email":["./src/email.ts"],"react":["./src/react.tsx"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.4.5","eslint":"^8.45.0","typescript":"^5.0.2","@types/node":"^20.4.6","npm-run-all":"^4.1.5","@types/react":"^18.2.15","@types/react-dom":"^18.2.7","@vitejs/plugin-react":"^4.0.3","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lucia-auth_0.0.2_1695164136805_0.8411712223926764","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@convex-dev/convex-lucia-auth","version":"0.0.3","keywords":["auth","lucia","clerk","authentication","db","database","react"],"license":"Apache-2.0","_id":"@convex-dev/convex-lucia-auth@0.0.3","maintainers":[{"name":"rakeebh-convex","email":"rakeeb@convex.dev"},{"name":"sshader","email":"sarah@convex.dev"},{"name":"preslavle","email":"presleyle@gmail.com"},{"name":"xixixao","email":"xixixao@seznam.cz"},{"name":"arnoldtrakh","email":"arnold@convex.dev"},{"name":"ballingt","email":"thomasballinger@gmail.com"},{"name":"emmaling27","email":"emma@convex.dev"},{"name":"ikhare","email":"ikhare@convex.dev"},{"name":"sujayakar","email":"sujayakar@convex.dev"},{"name":"nipunn","email":"nipunn1313@gmail.com"},{"name":"gautamg795","email":"gautam@convex.dev"},{"name":"cowling","email":"james@convex.dev"}],"homepage":"https://convex.dev/","bugs":{"url":"https://github.com/get-convex/convex-lucia-auth/issues"},"dist":{"shasum":"d19acab2ba97d00417029f0be94958c449fdcfa8","tarball":"https://registry.npmjs.org/@convex-dev/convex-lucia-auth/-/convex-lucia-auth-0.0.3.tgz","fileCount":10,"integrity":"sha512-ps0Pp5g2uIudF5dMfhdQZG/9pHONRtQUSHjZSXMkhW2mdkZ4qmCLZLeXv7x4a7816eX68dKeL986YDuX4OgAdQ==","signatures":[{"sig":"MEUCIQDrnbg2+j1dbDtBkmOGbirB2mEOAXqCeeWlpnX6Pkvy6wIgfaieEWaDQCvW9HTyeVGVxUuoosOnp/sS5I/OC1LkZnU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39494},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"},"./email":{"types":"./src/email.ts","default":"./src/email.ts"},"./react":{"types":"./src/react.tsx","import":"./esm/react.js","require":"./cjs/react.js"}},"gitHead":"83bf792ed1e13e11cda1068d33fecfa9021a4e6d","scripts":{"build":"rm -rf cjs esm && tsc -p .tsconfig.cjs.json && tsc -p .tsconfig.esm.json && echo '{\"type\": \"commonjs\"}' > cjs/package.json"},"_npmUser":{"name":"xixixao","email":"xixixao@seznam.cz"},"deprecated":"This library uses Lucia 2.x which has since been deprecated. Please see the Convex auth docs for latest recommendations on auth services: https://docs.convex.dev/auth","repository":{"url":"git+https://github.com/get-convex/convex-lucia-auth.git","type":"git"},"_npmVersion":"9.5.0","description":"Convex database adapter for Lucia Auth","directories":{},"_nodeVersion":"18.15.0","dependencies":{"lucia":"^2.6.0"},"typesVersions":{"*":{"*":["./src/index.ts"],"email":["./src/email.ts"],"react":["./src/react.tsx"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.4.5","eslint":"^8.45.0","typescript":"^5.0.2","@types/node":"^20.4.6","npm-run-all":"^4.1.5","@types/react":"^18.2.15","@types/react-dom":"^18.2.7","@vitejs/plugin-react":"^4.0.3","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.2.0","convex":"^1.0.2","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lucia-auth_0.0.3_1698182288659_0.361376109281315","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@convex-dev/convex-lucia-auth","version":"0.0.4","keywords":["auth","lucia","clerk","authentication","db","database","react"],"license":"Apache-2.0","_id":"@convex-dev/convex-lucia-auth@0.0.4","maintainers":[{"name":"ldanilek","email":"iwork96+npm@gmail.com"},{"name":"rakeebh-convex","email":"rakeeb@convex.dev"},{"name":"sshader","email":"sarah@convex.dev"},{"name":"preslavle","email":"presleyle@gmail.com"},{"name":"xixixao","email":"xixixao@seznam.cz"},{"name":"arnoldtrakh","email":"arnold@convex.dev"},{"name":"ballingt","email":"thomasballinger@gmail.com"},{"name":"emmaling27","email":"emma@convex.dev"},{"name":"ikhare","email":"ikhare@convex.dev"},{"name":"sujayakar","email":"sujayakar@convex.dev"},{"name":"nipunn","email":"nipunn1313@gmail.com"},{"name":"gautamg795","email":"gautam@convex.dev"},{"name":"cowling","email":"james@convex.dev"}],"homepage":"https://convex.dev/","bugs":{"url":"https://github.com/get-convex/convex-lucia-auth/issues"},"dist":{"shasum":"e3ed3b1f0c37f34063ccc8f2fe58b72dab315800","tarball":"https://registry.npmjs.org/@convex-dev/convex-lucia-auth/-/convex-lucia-auth-0.0.4.tgz","fileCount":10,"integrity":"sha512-GUKYThhlGmLh7ZMbShLj4QGW9GNEq/Pr4D3+IC8rNnODtWBsnV9i7rCVfEqpyXObzBVD4emWoe/HjSwfs7kErQ==","signatures":[{"sig":"MEUCIGh3dF2pH7qHIKcDZnaF87TNnB5/tZaXy0jLjfeegqPlAiEAkmRJn/Mi0pxYGzkUnIQHoXPrAVJM1MvI8U+OyKMARY8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44779},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"},"./email":{"types":"./src/email.ts","default":"./src/email.ts"},"./react":{"types":"./src/react.tsx","import":"./esm/react.js","require":"./cjs/react.js"}},"gitHead":"a509966ef755b10e892c2a45ec13d3fd04ed914e","scripts":{"build":"rm -rf cjs esm && tsc -p .tsconfig.cjs.json && tsc -p .tsconfig.esm.json && echo '{\"type\": \"commonjs\"}' > cjs/package.json"},"_npmUser":{"name":"xixixao","email":"xixixao@seznam.cz"},"deprecated":"This library uses Lucia 2.x which has since been deprecated. Please see the Convex auth docs for latest recommendations on auth services: https://docs.convex.dev/auth","repository":{"url":"git+https://github.com/get-convex/convex-lucia-auth.git","type":"git"},"_npmVersion":"9.5.0","description":"Convex database adapter for Lucia Auth","directories":{},"_nodeVersion":"18.15.0","dependencies":{"lucia":"^2.6.0"},"typesVersions":{"*":{"*":["./src/index.ts"],"email":["./src/email.ts"],"react":["./src/react.tsx"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.4.5","eslint":"^8.45.0","typescript":"^5.0.2","@types/node":"^20.4.6","npm-run-all":"^4.1.5","@types/react":"^18.2.15","@types/react-dom":"^18.2.7","@vitejs/plugin-react":"^4.0.3","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.2.0","convex":"^1.0.2","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lucia-auth_0.0.4_1698703002626_0.08257859333182482","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@convex-dev/convex-lucia-auth","version":"0.0.5","keywords":["auth","lucia","clerk","authentication","db","database","react"],"license":"Apache-2.0","_id":"@convex-dev/convex-lucia-auth@0.0.5","maintainers":[{"name":"ldanilek","email":"iwork96+npm@gmail.com"},{"name":"rakeebh-convex","email":"rakeeb@convex.dev"},{"name":"sshader","email":"sarah@convex.dev"},{"name":"preslavle","email":"presleyle@gmail.com"},{"name":"xixixao","email":"xixixao@seznam.cz"},{"name":"arnoldtrakh","email":"arnold@convex.dev"},{"name":"ballingt","email":"thomasballinger@gmail.com"},{"name":"emmaling27","email":"emma@convex.dev"},{"name":"ikhare","email":"ikhare@convex.dev"},{"name":"sujayakar","email":"sujayakar@convex.dev"},{"name":"nipunn","email":"nipunn1313@gmail.com"},{"name":"gautamg795","email":"gautam@convex.dev"},{"name":"cowling","email":"james@convex.dev"}],"homepage":"https://convex.dev/","bugs":{"url":"https://github.com/get-convex/convex-lucia-auth/issues"},"dist":{"shasum":"5a163761241f9eb67df41dd5d973a5b340ae8ab3","tarball":"https://registry.npmjs.org/@convex-dev/convex-lucia-auth/-/convex-lucia-auth-0.0.5.tgz","fileCount":10,"integrity":"sha512-EFuR5muoJXiI7BDKmGiC2GBMf2OF2BhrCLWEUzk7WECuOwFbMve0+tQ/mqWMWj9dIN18TGsbUveWIsbMCXc9Gw==","signatures":[{"sig":"MEUCIQCocZz9y1mXX5vEh0mQxttd2PvV4o47KQyKbSvOFRgGLgIgHqHN0FWtiel0+bw+bsZA45SFpEjEw1eVbPuj9l1JwLE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44540},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"},"./email":{"types":"./src/email.ts","default":"./src/email.ts"},"./react":{"types":"./src/react.tsx","import":"./esm/react.js","require":"./cjs/react.js"}},"gitHead":"f97269f1d07d9af44c087bc45785175a0a4e1019","scripts":{"build":"rm -rf cjs esm && tsc -p .tsconfig.cjs.json && tsc -p .tsconfig.esm.json && echo '{\"type\": \"commonjs\"}' > cjs/package.json"},"_npmUser":{"name":"sshader","email":"sarah@convex.dev"},"deprecated":"This library uses Lucia 2.x which has since been deprecated. Please see the Convex auth docs for latest recommendations on auth services: https://docs.convex.dev/auth","repository":{"url":"git+https://github.com/get-convex/convex-lucia-auth.git","type":"git"},"_npmVersion":"9.6.7","description":"Convex database adapter for Lucia Auth","directories":{},"_nodeVersion":"18.17.0","dependencies":{"lucia":"^2.6.0"},"typesVersions":{"*":{"*":["./src/index.ts"],"email":["./src/email.ts"],"react":["./src/react.tsx"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.4.5","eslint":"^8.45.0","typescript":"^5.0.2","@types/node":"^20.4.6","npm-run-all":"^4.1.5","@types/react":"^18.2.15","@types/react-dom":"^18.2.7","@vitejs/plugin-react":"^4.0.3","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.2.0","convex":"^1.1.1","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/convex-lucia-auth_0.0.5_1715786921972_0.6039432965865459","host":"s3://npm-registry-packages"}}},"time":{"created":"2023-09-15T00:42:27.762Z","modified":"2026-10-01T17:01:54.086Z","0.0.1":"2023-09-15T00:42:28.059Z","0.0.2":"2023-09-19T22:55:36.975Z","0.0.3":"2023-10-24T21:18:08.993Z","0.0.4":"2023-10-30T21:56:42.791Z","0.0.5":"2024-05-15T15:28:42.183Z"},"bugs":{"url":"https://github.com/get-convex/convex-lucia-auth/issues"},"license":"Apache-2.0","homepage":"https://convex.dev/","keywords":["auth","lucia","clerk","authentication","db","database","react"],"repository":{"url":"git+https://github.com/get-convex/convex-lucia-auth.git","type":"git"},"description":"Convex database adapter for Lucia Auth","maintainers":[{"email":"james@convex.dev","name":"cowling"},{"email":"jordan@convex.dev","name":"jordanhunt"},{"email":"gautam@convex.dev","name":"gautamg795"},{"email":"emma@convex.dev","name":"emmaling27"},{"email":"nipunn1313@gmail.com","name":"nipunn"},{"email":"aritrakh@gmail.com","name":"aritrakh"},{"email":"ian@convex.dev","name":"ianatconvex"},{"email":"christian@convex.dev","name":"dowski-convex"},{"email":"reece@convex.dev","name":"reece-convex"},{"email":"timdoug@convex.dev","name":"timdoug-convex"},{"email":"ayush@convex.dev","name":"ayushdewanconvex"},{"email":"shawn@erquh.art","name":"erquhart"},{"email":"seth@convex.dev","name":"sethconvex"},{"email":"andy@convex.dev","name":"andycai-convex"},{"email":"mike@wheaton.dev","name":"mikewheaton"},{"email":"jamwt@convex.dev","name":"jamwt"},{"email":"nicolas@ettlin.dev","name":"nicolapps"}],"readme":"# Convex Database Adapter + UI for Lucia Auth Library\n\nThis library enables authentication built entirely on top of Convex without any third-party platform. It uses [Lucia](https://lucia-auth.com/) for the authentication logic.\n\n![Screenshot of the app](https://github.com/get-convex/convex-lucia-auth-demo/raw/main/screenshot.png)\n\nFeatures:\n\n- Without any additional setup, you can sign in with an email+password combination\n- Sign out button\n- Session is preserved in `localStorage`\n- Passwords are securely hashed\n\nThis integration works! You can see a production deployment at this live site: https://get-convex.github.io/convex-lucia-auth-demo/.\n\n## Install\n\n```\nnpm install @convex-dev/convex-lucia-auth\n```\n\nCheckout [Docs](https://github.com/get-convex/convex-lucia-auth/blob/master/DOCS.md) for how to integrate the library into your app.\n\n## Deploying to production\n\nIn your production deployment's settings page configure this variable:\n\n- `LUCIA_ENVIRONMENT`=`PROD`\n\n## Note on CSRF protection\n\nThe React components use `localStorage` for storing the secret `sessionId`. This means that sessions are only preserved on pages served on the same subdomain, such as `foo.example.com` or `username.github.io`. This prevents CSRF attacks.\n\nThis does though invite an [XSS attack](https://en.wikipedia.org/wiki/Cross-site_scripting). Make sure your app is not susceptable to XSS.\n\nConvex currently doesn't support accessing cookies in queries and mutations, so cookie-based authentication can only be used in Convex HTTP actions.\n\n# What is Convex?\n\n[Convex](https://convex.dev) is a hosted backend platform with a\nbuilt-in database that lets you write your\n[database schema](https://docs.convex.dev/database/schemas) and\n[server functions](https://docs.convex.dev/functions) in\n[TypeScript](https://docs.convex.dev/typescript). Server-side database\n[queries](https://docs.convex.dev/functions/query-functions) automatically\n[cache](https://docs.convex.dev/functions/query-functions#caching--reactivity) and\n[subscribe](https://docs.convex.dev/client/react#reactivity) to data, powering a\n[realtime `useQuery` hook](https://docs.convex.dev/client/react#fetching-data) in our\n[React client](https://docs.convex.dev/client/react). There are also\n[Python](https://docs.convex.dev/client/python),\n[Rust](https://docs.convex.dev/client/rust),\n[ReactNative](https://docs.convex.dev/client/react-native), and\n[Node](https://docs.convex.dev/client/javascript) clients, as well as a straightforward\n[HTTP API](https://github.com/get-convex/convex-js/blob/main/src/browser/http_client.ts#L40).\n\nThe database support\n[NoSQL-style documents](https://docs.convex.dev/database/document-storage) with\n[relationships](https://docs.convex.dev/database/document-ids) and\n[custom indexes](https://docs.convex.dev/database/indexes/)\n(including on fields in nested objects).\n\nThe\n[`query`](https://docs.convex.dev/functions/query-functions) and\n[`mutation`](https://docs.convex.dev/functions/mutation-functions) server functions have transactional,\nlow latency access to the database and leverage our\n[`v8` runtime](https://docs.convex.dev/functions/runtimes) with\n[determinism guardrails](https://docs.convex.dev/functions/runtimes#using-randomness-and-time-in-queries-and-mutations)\nto provide the strongest ACID guarantees on the market:\nimmediate consistency,\nserializable isolation, and\nautomatic conflict resolution via\n[optimistic multi-version concurrency control](https://docs.convex.dev/database/advanced/occ) (OCC / MVCC).\n\nThe [`action` server functions](https://docs.convex.dev/functions/actions) have\naccess to external APIs and enable other side-effects and non-determinism in\neither our\n[optimized `v8` runtime](https://docs.convex.dev/functions/runtimes) or a more\n[flexible `node` runtime](https://docs.convex.dev/functions/runtimes#nodejs-runtime).\n\nFunctions can run in the background via\n[scheduling](https://docs.convex.dev/scheduling/scheduled-functions) and\n[cron jobs](https://docs.convex.dev/scheduling/cron-jobs).\n\nDevelopment is cloud-first, with\n[hot reloads for server function](https://docs.convex.dev/cli#run-the-convex-dev-server) editing via the\n[CLI](https://docs.convex.dev/cli). There is a\n[dashbord UI](https://docs.convex.dev/dashboard) to\n[browse and edit data](https://docs.convex.dev/dashboard/deployments/data),\n[edit environment variables](https://docs.convex.dev/production/environment-variables),\n[view logs](https://docs.convex.dev/dashboard/deployments/logs),\n[run server functions](https://docs.convex.dev/dashboard/deployments/functions), and more.\n\nThere are built-in features for\n[reactive pagination](https://docs.convex.dev/database/pagination),\n[file storage](https://docs.convex.dev/file-storage),\n[reactive search](https://docs.convex.dev/text-search),\n[https endpoints](https://docs.convex.dev/functions/http-actions) (for webhooks),\n[streaming import/export](https://docs.convex.dev/database/import-export/), and\n[runtime data validation](https://docs.convex.dev/database/schemas#validators) for\n[function arguments](https://docs.convex.dev/functions/args-validation) and\n[database data](https://docs.convex.dev/database/schemas#schema-validation).\n\nEverything scales automatically, and it’s [free to start](https://www.convex.dev/plans).\n","readmeFilename":"README.md"}