{"_id":"@dianshu/novel","_rev":"4-0c8de85d82579a8437d773c667e85937","name":"@dianshu/novel","dist-tags":{"latest":"0.1.24"},"versions":{"0.1.20":{"name":"@dianshu/novel","version":"0.1.20","description":"Notion-style WYSIWYG editor with AI-powered autocompletions","license":"Apache-2.0","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","module":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","check-types":"tsc --noEmit"},"peerDependencies":{"react":"^18.2.0"},"dependencies":{"@radix-ui/react-popover":"^1.0.6","@tiptap/core":"^2.1.7","@tiptap/extension-color":"^2.1.7","@tiptap/extension-highlight":"^2.1.7","@tiptap/extension-horizontal-rule":"^2.1.7","@tiptap/extension-image":"^2.1.7","@tiptap/extension-link":"^2.1.7","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-task-item":"^2.1.7","@tiptap/extension-task-list":"^2.1.7","@tiptap/extension-text-style":"^2.1.7","@tiptap/extension-underline":"^2.1.7","@tiptap/pm":"^2.1.7","@tiptap/react":"^2.1.7","@tiptap/starter-kit":"^2.1.7","@tiptap/suggestion":"^2.1.7","@types/node":"18.15.3","@types/react":"18.0.28","@types/react-dom":"18.0.11","@upstash/ratelimit":"^0.4.4","@vercel/analytics":"^1.0.2","@vercel/blob":"^0.9.3","@vercel/kv":"^0.2.2","ai":"^2.2.11","clsx":"^1.2.1","eslint":"8.36.0","eslint-config-next":"13.2.4","eventsource-parser":"^0.1.0","lucide-react":"^0.244.0","next":"13.4.20-canary.15","react":"18.2.0","react-dom":"18.2.0","react-markdown":"^8.0.7","sonner":"^0.7.0","tailwind-merge":"^1.14.0","tippy.js":"^6.3.7","tiptap-markdown":"^0.8.2","typescript":"4.9.5","use-debounce":"^9.0.4"},"devDependencies":{"@types/react":"^18.2.5","eslint":"^7.32.0","postcss":"^8.4.29","react":"^18.2.0","tailwind-config":"workspace:*","tsconfig":"workspace:*","tsup":"^7.2.0","typescript":"^4.9.4"},"author":{"name":"Steven Tey","email":"stevensteel97@gmail.com"},"homepage":"https://novel.sh","repository":{"type":"git","url":"git+https://github.com/steven-tey/novel.git"},"bugs":{"url":"https://github.com/steven-tey/novel/issues"},"keywords":["ai","novel","editor","markdown","nextjs","react"],"gitHead":"a53de202a4f1d8d6152b63aa349ac6188b394de8","_id":"@dianshu/novel@0.1.20","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-bTKjtS8u3QDSvC4Q1Y9hbVepT+G9aN/Qr2WnsUolhMU18Y2vqJ2eBvk0X4g3mJ4Qv7J85DPTWGHTnCaSJ7B4QQ==","shasum":"a21eb639d67f44c0f1a0d9eee77875b6c46d9104","tarball":"https://registry.npmjs.org/@dianshu/novel/-/novel-0.1.20.tgz","fileCount":6,"unpackedSize":1288120,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZ6C/ZpgyBJDyhyMbgiszLH/0/O2w6zxFA4Mh3TP2CpAiB/ug6TDDd4YR8fnGoZAraR7yCIFNslt9HGZZ2J10myvw=="}]},"_npmUser":{"name":"dianshu","email":"loadingsong@qq.com"},"directories":{},"maintainers":[{"name":"dianshu","email":"loadingsong@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/novel_0.1.20_1694165014054_0.47493572389730554"},"_hasShrinkwrap":false},"0.1.21":{"name":"@dianshu/novel","version":"0.1.21","description":"Notion-style WYSIWYG editor with AI-powered autocompletions","license":"Apache-2.0","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","module":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","check-types":"tsc --noEmit"},"peerDependencies":{"react":"^18.2.0"},"dependencies":{"@radix-ui/react-popover":"^1.0.6","@tiptap/core":"^2.1.7","@tiptap/extension-color":"^2.1.7","@tiptap/extension-highlight":"^2.1.7","@tiptap/extension-horizontal-rule":"^2.1.7","@tiptap/extension-image":"^2.1.7","@tiptap/extension-link":"^2.1.7","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-task-item":"^2.1.7","@tiptap/extension-task-list":"^2.1.7","@tiptap/extension-text-style":"^2.1.7","@tiptap/extension-underline":"^2.1.7","@tiptap/pm":"^2.1.7","@tiptap/react":"^2.1.7","@tiptap/starter-kit":"^2.1.7","@tiptap/suggestion":"^2.1.7","@types/node":"18.15.3","@types/react":"18.0.28","@types/react-dom":"18.0.11","@upstash/ratelimit":"^0.4.4","@vercel/analytics":"^1.0.2","@vercel/blob":"^0.9.3","@vercel/kv":"^0.2.2","ai":"^2.2.11","clsx":"^1.2.1","eslint":"8.36.0","eslint-config-next":"13.2.4","eventsource-parser":"^0.1.0","lucide-react":"^0.244.0","next":"13.4.20-canary.15","react":"18.2.0","react-dom":"18.2.0","react-markdown":"^8.0.7","sonner":"^0.7.0","tailwind-merge":"^1.14.0","tippy.js":"^6.3.7","tiptap-markdown":"^0.8.2","typescript":"4.9.5","use-debounce":"^9.0.4"},"devDependencies":{"@types/react":"^18.2.5","eslint":"^7.32.0","postcss":"^8.4.29","react":"^18.2.0","tailwind-config":"workspace:*","tsconfig":"workspace:*","tsup":"^7.2.0","typescript":"^4.9.4"},"author":{"name":"Steven Tey","email":"stevensteel97@gmail.com"},"homepage":"https://novel.sh","repository":{"type":"git","url":"git+https://github.com/steven-tey/novel.git"},"bugs":{"url":"https://github.com/steven-tey/novel/issues"},"keywords":["ai","novel","editor","markdown","nextjs","react"],"gitHead":"a53de202a4f1d8d6152b63aa349ac6188b394de8","_id":"@dianshu/novel@0.1.21","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-vNn+wy5RAWsAjbVbwvC6snlD1qLfaeOlDM8CizgSpnfJzNkWm/v30RmMdZkp4fsHFl/WuRpyRQau5LN/AZkXPg==","shasum":"463adb54dcabd9d3cea14378197265edd4d891e9","tarball":"https://registry.npmjs.org/@dianshu/novel/-/novel-0.1.21.tgz","fileCount":6,"unpackedSize":1289016,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDK8nV6HYJ391/i63eK7hyHlU4cu3YO5c/N9sYDUNCIEQIgUyuz6DNhVrDkNo1A0F+HNKHOWUZgs3UWx7YnL948fK4="}]},"_npmUser":{"name":"dianshu","email":"loadingsong@qq.com"},"directories":{},"maintainers":[{"name":"dianshu","email":"loadingsong@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/novel_0.1.21_1694174499375_0.1618543573581821"},"_hasShrinkwrap":false},"0.1.22":{"name":"@dianshu/novel","version":"0.1.22","description":"Notion-style WYSIWYG editor with AI-powered autocompletions","license":"Apache-2.0","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","module":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","check-types":"tsc --noEmit"},"peerDependencies":{"react":"^18.2.0"},"dependencies":{"@radix-ui/react-popover":"^1.0.6","@tiptap/core":"^2.1.7","@tiptap/extension-color":"^2.1.7","@tiptap/extension-highlight":"^2.1.7","@tiptap/extension-horizontal-rule":"^2.1.7","@tiptap/extension-image":"^2.1.7","@tiptap/extension-link":"^2.1.7","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-task-item":"^2.1.7","@tiptap/extension-task-list":"^2.1.7","@tiptap/extension-text-style":"^2.1.7","@tiptap/extension-underline":"^2.1.7","@tiptap/pm":"^2.1.7","@tiptap/react":"^2.1.7","@tiptap/starter-kit":"^2.1.7","@tiptap/suggestion":"^2.1.7","@types/node":"18.15.3","@types/react":"18.0.28","@types/react-dom":"18.0.11","@upstash/ratelimit":"^0.4.4","@vercel/analytics":"^1.0.2","@vercel/blob":"^0.9.3","@vercel/kv":"^0.2.2","ai":"^2.2.11","clsx":"^1.2.1","eslint":"8.36.0","eslint-config-next":"13.2.4","eventsource-parser":"^0.1.0","lucide-react":"^0.244.0","next":"13.4.20-canary.15","react":"18.2.0","react-dom":"18.2.0","react-markdown":"^8.0.7","sonner":"^0.7.0","tailwind-merge":"^1.14.0","tippy.js":"^6.3.7","tiptap-markdown":"^0.8.2","typescript":"4.9.5","use-debounce":"^9.0.4"},"devDependencies":{"@types/react":"^18.2.5","eslint":"^7.32.0","postcss":"^8.4.29","react":"^18.2.0","tailwind-config":"workspace:*","tsconfig":"workspace:*","tsup":"^7.2.0","typescript":"^4.9.4"},"author":{"name":"Steven Tey","email":"stevensteel97@gmail.com"},"homepage":"https://novel.sh","repository":{"type":"git","url":"git+https://github.com/steven-tey/novel.git"},"bugs":{"url":"https://github.com/steven-tey/novel/issues"},"keywords":["ai","novel","editor","markdown","nextjs","react"],"gitHead":"a53de202a4f1d8d6152b63aa349ac6188b394de8","_id":"@dianshu/novel@0.1.22","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-dbjMUC96AWUa40NCQrvAbKf79Ea6QRFfR6I+swwQqwyCoe1ROEjZe7hNsqpzstlUxZH+xyGYhNA3HZYD2COeLA==","shasum":"b6266f09e74f7435d8091bf588d1bd50828c5b03","tarball":"https://registry.npmjs.org/@dianshu/novel/-/novel-0.1.22.tgz","fileCount":6,"unpackedSize":1289014,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1fN0b7as0H0u2+YCEs4jdPtMpu9eFx7Os72dUayFdFAiEArEfsDw/PWc9PynUbu9B8Rl7P2hiRjTK1A+ObmygE5Ec="}]},"_npmUser":{"name":"dianshu","email":"loadingsong@qq.com"},"directories":{},"maintainers":[{"name":"dianshu","email":"loadingsong@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/novel_0.1.22_1694206016122_0.1841011836821025"},"_hasShrinkwrap":false},"0.1.23":{"name":"@dianshu/novel","version":"0.1.23","description":"Notion-style WYSIWYG editor with AI-powered autocompletions","license":"Apache-2.0","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","module":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","check-types":"tsc --noEmit"},"peerDependencies":{"react":"^18.2.0"},"dependencies":{"@radix-ui/react-popover":"^1.0.6","@tiptap/core":"^2.1.7","@tiptap/extension-color":"^2.1.7","@tiptap/extension-highlight":"^2.1.7","@tiptap/extension-horizontal-rule":"^2.1.7","@tiptap/extension-image":"^2.1.7","@tiptap/extension-link":"^2.1.7","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-task-item":"^2.1.7","@tiptap/extension-task-list":"^2.1.7","@tiptap/extension-text-style":"^2.1.7","@tiptap/extension-underline":"^2.1.7","@tiptap/pm":"^2.1.7","@tiptap/react":"^2.1.7","@tiptap/starter-kit":"^2.1.7","@tiptap/suggestion":"^2.1.7","@types/node":"18.15.3","@types/react":"18.0.28","@types/react-dom":"18.0.11","@upstash/ratelimit":"^0.4.4","@vercel/analytics":"^1.0.2","@vercel/blob":"^0.9.3","@vercel/kv":"^0.2.2","ai":"^2.2.11","clsx":"^1.2.1","eslint":"8.36.0","eslint-config-next":"13.2.4","eventsource-parser":"^0.1.0","lucide-react":"^0.244.0","next":"13.4.20-canary.15","react":"18.2.0","react-dom":"18.2.0","react-markdown":"^8.0.7","sonner":"^0.7.0","tailwind-merge":"^1.14.0","tippy.js":"^6.3.7","tiptap-markdown":"^0.8.2","typescript":"4.9.5","use-debounce":"^9.0.4"},"devDependencies":{"@types/react":"^18.2.5","eslint":"^7.32.0","postcss":"^8.4.29","react":"^18.2.0","tailwind-config":"workspace:*","tsconfig":"workspace:*","tsup":"^7.2.0","typescript":"^4.9.4"},"author":{"name":"Steven Tey","email":"stevensteel97@gmail.com"},"homepage":"https://novel.sh","repository":{"type":"git","url":"git+https://github.com/steven-tey/novel.git"},"bugs":{"url":"https://github.com/steven-tey/novel/issues"},"keywords":["ai","novel","editor","markdown","nextjs","react"],"gitHead":"a53de202a4f1d8d6152b63aa349ac6188b394de8","_id":"@dianshu/novel@0.1.23","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-I2YHixBm0AYAM0+BGbdp1LQC4gxmh4akVcABaiYvDM2bcr+vWG7AGQxGt1BTYxlXuUKEbBd65X98UgWEWG4kng==","shasum":"34e1972fbf83f5520c9971f67c8600d2aa73f44a","tarball":"https://registry.npmjs.org/@dianshu/novel/-/novel-0.1.23.tgz","fileCount":6,"unpackedSize":1289116,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICfJSr29KkeeVx5AIgd6zHX89dk/Os+6YdNuNyKC+0+AAiEAtlHHM2xWTTR8XPdhhD7Ehlhs3UpFxtLJ2CUsSPOqUII="}]},"_npmUser":{"name":"dianshu","email":"loadingsong@qq.com"},"directories":{},"maintainers":[{"name":"dianshu","email":"loadingsong@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/novel_0.1.23_1694216656424_0.5640352389695089"},"_hasShrinkwrap":false},"0.1.24":{"name":"@dianshu/novel","version":"0.1.24","description":"Notion-style WYSIWYG editor with AI-powered autocompletions","license":"Apache-2.0","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","module":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","check-types":"tsc --noEmit"},"peerDependencies":{"react":"^18.2.0"},"dependencies":{"@radix-ui/react-popover":"^1.0.6","@tiptap/core":"^2.1.7","@tiptap/extension-color":"^2.1.7","@tiptap/extension-highlight":"^2.1.7","@tiptap/extension-horizontal-rule":"^2.1.7","@tiptap/extension-image":"^2.1.7","@tiptap/extension-link":"^2.1.7","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-task-item":"^2.1.7","@tiptap/extension-task-list":"^2.1.7","@tiptap/extension-text-style":"^2.1.7","@tiptap/extension-underline":"^2.1.7","@tiptap/pm":"^2.1.7","@tiptap/react":"^2.1.7","@tiptap/starter-kit":"^2.1.7","@tiptap/suggestion":"^2.1.7","@types/node":"18.15.3","@types/react":"18.0.28","@types/react-dom":"18.0.11","@upstash/ratelimit":"^0.4.4","@vercel/analytics":"^1.0.2","@vercel/blob":"^0.9.3","@vercel/kv":"^0.2.2","ai":"^2.2.11","clsx":"^1.2.1","eslint":"8.36.0","eslint-config-next":"13.2.4","eventsource-parser":"^0.1.0","lucide-react":"^0.244.0","next":"13.4.20-canary.15","react":"18.2.0","react-dom":"18.2.0","react-markdown":"^8.0.7","sonner":"^0.7.0","tailwind-merge":"^1.14.0","tippy.js":"^6.3.7","tiptap-markdown":"^0.8.2","typescript":"4.9.5","use-debounce":"^9.0.4"},"devDependencies":{"@types/react":"^18.2.5","eslint":"^7.32.0","postcss":"^8.4.29","react":"^18.2.0","tailwind-config":"workspace:*","tsconfig":"workspace:*","tsup":"^7.2.0","typescript":"^4.9.4"},"author":{"name":"Steven Tey","email":"stevensteel97@gmail.com"},"homepage":"https://novel.sh","repository":{"type":"git","url":"git+https://github.com/steven-tey/novel.git"},"bugs":{"url":"https://github.com/steven-tey/novel/issues"},"keywords":["ai","novel","editor","markdown","nextjs","react"],"gitHead":"a53de202a4f1d8d6152b63aa349ac6188b394de8","_id":"@dianshu/novel@0.1.24","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-LM5ToBkrws7LSh6yUlRguycl9lVcyQ+Jr+HbXqTMIzLKO02MiqpU7SPILCSPVjkJHuvm3LkHvqCSoYlEHD1JGA==","shasum":"acc8363d20b963ef296461172b1585bb600fe192","tarball":"https://registry.npmjs.org/@dianshu/novel/-/novel-0.1.24.tgz","fileCount":6,"unpackedSize":1289252,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSfvlNGzor9CYYnX9gT3t/pmEXvegmXFxc7F6i2LjSWwIgDQGH/aAqYkcn7eqrZAtJ2eiRO15N1Ztopb8RRO4bVm4="}]},"_npmUser":{"name":"dianshu","email":"loadingsong@qq.com"},"directories":{},"maintainers":[{"name":"dianshu","email":"loadingsong@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/novel_0.1.24_1694217360062_0.7816142194475135"},"_hasShrinkwrap":false}},"time":{"created":"2023-09-08T09:23:33.940Z","0.1.20":"2023-09-08T09:23:34.361Z","modified":"2023-09-08T23:56:00.639Z","0.1.21":"2023-09-08T12:01:39.628Z","0.1.22":"2023-09-08T20:46:56.418Z","0.1.23":"2023-09-08T23:44:16.765Z","0.1.24":"2023-09-08T23:56:00.437Z"},"maintainers":[{"name":"dianshu","email":"loadingsong@qq.com"}],"description":"Notion-style WYSIWYG editor with AI-powered autocompletions","homepage":"https://novel.sh","keywords":["ai","novel","editor","markdown","nextjs","react"],"repository":{"type":"git","url":"git+https://github.com/steven-tey/novel.git"},"author":{"name":"Steven Tey","email":"stevensteel97@gmail.com"},"bugs":{"url":"https://github.com/steven-tey/novel/issues"},"license":"Apache-2.0","readme":"<a href=\"https://novel.sh\">\n  <img alt=\"Novel is a Notion-style WYSIWYG editor with AI-powered autocompletions.\" src=\"https://novel.sh/opengraph-image.png\">\n  <h1 align=\"center\">Novel</h1>\n</a>\n\n<p align=\"center\">\n  An open-source Notion-style WYSIWYG editor with AI-powered autocompletions. \n</p>\n\n<p align=\"center\">\n  <a href=\"https://news.ycombinator.com/item?id=36360789\"><img src=\"https://img.shields.io/badge/Hacker%20News-369-%23FF6600\" alt=\"Hacker News\"></a>\n  <a href=\"https://github.com/steven-tey/novel/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/steven-tey/novel?label=license&logo=github&color=f80&logoColor=fff\" alt=\"License\" />\n  </a>\n  <a href=\"https://github.com/steven-tey/novel\"><img src=\"https://img.shields.io/github/stars/steven-tey/novel?style=social\" alt=\"Novel.sh's GitHub repo\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#introduction\"><strong>Introduction</strong></a> ·\n  <a href=\"#installation\"><strong>Installation</strong></a> ·\n  <a href=\"#deploy-your-own\"><strong>Deploy Your Own</strong></a> ·\n  <a href=\"#setting-up-locally\"><strong>Setting Up Locally</strong></a> ·\n  <a href=\"#tech-stack\"><strong>Tech Stack</strong></a> ·\n  <a href=\"#contributing\"><strong>Contributing</strong></a> ·\n  <a href=\"#license\"><strong>License</strong></a>\n</p>\n<br/>\n\n## Introduction\n\n[Novel](https://novel.sh/) is a Notion-style WYSIWYG editor with AI-powered autocompletions.\n\nhttps://github.com/steven-tey/novel/assets/28986134/2099877f-4f2b-4b1c-8782-5d803d63be5c\n\n<br />\n\n## Installation\n\nTo use Novel in a project, you can run the following command to install the `novel` [NPM package](https://www.npmjs.com/package/novel):\n\n```\nnpm i novel\n```\n\nThen, you can use it in your code like this:\n\n```jsx\nimport { Editor } from \"novel\";\n\nexport default function App() {\n  return <Editor />;\n}\n```\n\nThe `Editor` is a React component that takes in the following props:\n\n| Prop                | Type                        | Description                                                                                                                                                                                | Default                                                                                                                             |\n| ------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |\n| `completionApi`     | `string`                    | The API route to use for the OpenAI completion API.                                                                                                                                        | `/api/generate`                                                                                                                     |\n| `className`         | `string`                    | Editor container classname.                                                                                                                                                                | `\"relative min-h-[500px] w-full max-w-screen-lg border-stone-200 bg-white sm:mb-[calc(20vh)] sm:rounded-lg sm:border sm:shadow-lg\"` |\n| `defaultValue`      | `JSONContent` or `string`   | The default value to use for the editor.                                                                                                                                                   | [`defaultEditorContent`](https://github.com/steven-tey/novel/blob/main/packages/core/src/ui/editor/default-content.tsx)             |\n| `extensions`        | `Extension[]`               | A list of extensions to use for the editor, in addition to the [default Novel extensions](https://github.com/steven-tey/novel/blob/main/packages/core/src/ui/editor/extensions/index.tsx). | `[]`                                                                                                                                |\n| `editorProps`       | `EditorProps`               | Props to pass to the underlying Tiptap editor, in addition to the [default Novel editor props](https://github.com/steven-tey/novel/blob/main/packages/core/src/ui/editor/props.ts).        | `{}`                                                                                                                                |\n| `onUpdate`          | `(editor?: Editor) => void` | A callback function that is called whenever the editor is updated.                                                                                                                         | `() => {}`                                                                                                                          |\n| `onDebouncedUpdate` | `(editor?: Editor) => void` | A callback function that is called whenever the editor is updated, but only after the defined debounce duration.                                                                           | `() => {}`                                                                                                                          |\n| `debounceDuration`  | `number`                    | The duration (in milliseconds) to debounce the `onDebouncedUpdate` callback.                                                                                                               | `750`                                                                                                                               |\n| `storageKey`        | `string`                    | The key to use for storing the editor's value in local storage.                                                                                                                            | `novel__content`                                                                                                                    |\n\n> **Note**: Make sure to define an API endpoint that matches the `completionApi` prop (default is `/api/generate`). This is needed for the AI autocompletions to work. Here's an example: https://github.com/steven-tey/novel/blob/main/apps/web/app/api/generate/route.ts\n\nHere's an example application: https://github.com/steven-tey/novella\n\n## Deploy Your Own\n\nYou can deploy your own version of Novel to Vercel with one click:\n\n[![Deploy with Vercel](https://vercel.com/button)](https://stey.me/novel-deploy)\n\n## Setting Up Locally\n\nTo set up Novel locally, you'll need to clone the repository and set up the following environment variables:\n\n- `OPENAI_API_KEY` – your OpenAI API key (you can get one [here](https://platform.openai.com/account/api-keys))\n- `BLOB_READ_WRITE_TOKEN` – your Vercel Blob read/write token (currently [still in beta](https://vercel.com/docs/storage/vercel-blob/quickstart#quickstart), but feel free to [sign up on this form](https://vercel.fyi/blob-beta) for access)\n\nIf you've deployed this to Vercel, you can also use [`vc env pull`](https://vercel.com/docs/cli/env#exporting-development-environment-variables) to pull the environment variables from your Vercel project.\n\nTo run the app locally, you can run the following commands:\n\n```\npnpm i\npnpm build\npnpm dev\n```\n\n## Cross-framework support\n\nWhile Novel is built for React, we also have a few community-maintained packages for non-React frameworks:\n\n- Svelte: https://novel.sh/svelte\n- Vue: https://novel.sh/vue\n\n## VSCode Extension\n\nThanks to @bennykok, Novel also has a VSCode Extension: https://novel.sh/vscode\n\nhttps://github.com/steven-tey/novel/assets/28986134/58ebf7e3-cdb3-43df-878b-119e304f7373\n\n## Tech Stack\n\nNovel is built on the following stack:\n\n- [Next.js](https://nextjs.org/) – framework\n- [Tiptap](https://tiptap.dev/) – text editor\n- [OpenAI](https://openai.com/) - AI completions\n- [Vercel AI SDK](https://sdk.vercel.ai/docs) – AI library\n- [Vercel](https://vercel.com) – deployments\n- [TailwindCSS](https://tailwindcss.com/) – styles\n- [Cal Sans](https://github.com/calcom/font) – font\n\n## Contributing\n\nHere's how you can contribute:\n\n- [Open an issue](https://github.com/steven-tey/novel/issues) if you believe you've encountered a bug.\n- Make a [pull request](https://github.com/steven-tey/novel/pull) to add new features/make quality-of-life improvements/fix bugs.\n\n<a href=\"https://github.com/steven-tey/novel/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=steven-tey/novel\" />\n</a>\n\n## Repo Activity\n\n![Novel.sh repo activity – generated by Axiom](https://repobeats.axiom.co/api/embed/2ebdaa143b0ad6e7c2ee23151da7b37f67da0b36.svg)\n\n## License\n\nLicensed under the [Apache-2.0 license](https://github.com/steven-tey/novel/blob/main/LICENSE.md).\n","readmeFilename":"README.md"}