{"id":31790999,"url":"https://github.com/novincode/lexkit","last_synced_at":"2025-10-10T16:48:43.416Z","repository":{"id":313098128,"uuid":"1049916519","full_name":"novincode/lexkit","owner":"novincode","description":"Rich text editor built on top of Lexical","archived":false,"fork":false,"pushed_at":"2025-10-06T10:13:23.000Z","size":1342,"stargazers_count":13,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-06T11:51:35.168Z","etag":null,"topics":["react","rich-text-editor","text-editor","text-editor-react"],"latest_commit_sha":null,"homepage":"https://lexkit.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novincode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-03T17:22:30.000Z","updated_at":"2025-10-06T10:13:31.000Z","dependencies_parsed_at":"2025-09-03T23:21:56.525Z","dependency_job_id":"51eb66f7-563b-497b-90c2-ce682d2d03d6","html_url":"https://github.com/novincode/lexkit","commit_stats":null,"previous_names":["novincode/lexkit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/novincode/lexkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novincode%2Flexkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novincode%2Flexkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novincode%2Flexkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novincode%2Flexkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novincode","download_url":"https://codeload.github.com/novincode/lexkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novincode%2Flexkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002601,"owners_count":26083426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["react","rich-text-editor","text-editor","text-editor-react"],"created_at":"2025-10-10T16:48:35.309Z","updated_at":"2025-10-10T16:48:41.905Z","avatar_url":"https://github.com/novincode.png","language":"TypeScript","funding_links":["https://github.com/sponsors/novincode"],"categories":[],"sub_categories":[],"readme":"# LexKit\n\n**Type-safe rich text editor for React developers**\n\nBuilt on Meta's Lexical. Headless, extensible, and production-ready.\n\n[![npm version](https://badge.fury.io/js/%40lexkit%2Feditor.svg)](https://badge.fury.io/js/%40lexkit%2Feditor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n**[🚀 Demo](https://lexkit.dev/demo)** • **[📖 Documentation](https://lexkit.dev/docs)** • **[⚡ Playground](https://stackblitz.com/edit/vitejs-vite-bpg2kpze?file=src%2FEditor.tsx)**\n\n![LexKit Editor](https://github.com/user-attachments/assets/ec547406-0ab0-4e69-b9d7-ccd050adf78a)\n\n---\n\n## Why LexKit?\n\nRich text editors shouldn't be a nightmare. LexKit makes building them delightful:\n\n- **🔒 Type-safe everything** - Commands and states inferred from your extensions. No runtime surprises.\n- **🎨 Headless \u0026 flexible** - Build any UI you want. Style it your way.\n- **🧩 Modular extensions** - Add only what you need, when you need it.\n- **⚡ Production features** - HTML/Markdown export, image handling, tables, undo/redo.\n- **⚛️ React-first** - Hooks, components, and patterns you already know.\n\n```tsx\n// Your extensions define your API - TypeScript knows everything ✨\nconst extensions = [boldExtension, listExtension, imageExtension] as const;\nconst { Provider, useEditor } = createEditorSystem\u003ctypeof extensions\u003e();\n\nfunction MyEditor() {\n  const { commands, activeStates } = useEditor();\n\n  // TypeScript autocompletes and validates these\n  commands.toggleBold();        // ✅ Available\n  commands.toggleUnorderedList(); // ✅ Available\n  commands.insertImage();       // ✅ Available\n  commands.nonExistent();       // ❌ TypeScript error\n}\n```\n\n## Quick Start\n\n```bash\nnpm install @lexkit/editor\n```\n\nInstall the Lexical peer dependencies:\n\n```bash\nnpm install lexical @lexical/react @lexical/html @lexical/markdown @lexical/list @lexical/rich-text @lexical/selection @lexical/utils\n```\n\n```tsx\nimport {\n  createEditorSystem,\n  boldExtension,\n  italicExtension,\n  listExtension,\n  RichText,\n} from \"@lexkit/editor\";\n\nconst extensions = [boldExtension, italicExtension, listExtension] as const;\nconst { Provider, useEditor } = createEditorSystem\u003ctypeof extensions\u003e();\n\nfunction Toolbar() {\n  const { commands, activeStates } = useEditor();\n  return (\n    \u003cdiv className=\"toolbar\"\u003e\n      \u003cbutton\n        onClick={() =\u003e commands.toggleBold()}\n        className={activeStates.bold ? \"active\" : \"\"}\n      \u003e\n        Bold\n      \u003c/button\u003e\n      \u003cbutton\n        onClick={() =\u003e commands.toggleItalic()}\n        className={activeStates.italic ? \"active\" : \"\"}\n      \u003e\n        Italic\n      \u003c/button\u003e\n      \u003cbutton onClick={() =\u003e commands.toggleUnorderedList()}\u003e\n        Bullet List\n      \u003c/button\u003e\n    \u003c/div\u003e\n  );\n}\n\nfunction Editor() {\n  return (\n    \u003cdiv className=\"editor-container\"\u003e\n      \u003cToolbar /\u003e\n      \u003cRichText placeholder=\"Start writing...\" /\u003e\n    \u003c/div\u003e\n  );\n}\n\nexport default function App() {\n  return (\n    \u003cProvider extensions={extensions}\u003e\n      \u003cEditor /\u003e\n    \u003c/Provider\u003e\n  );\n}\n```\n\n**That's it.** You now have a fully functional, type-safe rich text editor.\n\n## Features\n\n### 🎨 Built-in Extensions (25+)\n- **Text Formatting**: Bold, italic, underline, strikethrough, inline code\n- **Structure**: Headings, lists (with nesting), quotes, horizontal rules\n- **Rich Content**: Tables, images (upload/paste/alignment), links, code blocks\n- **Advanced**: History (undo/redo), command palette, floating toolbar, context menus\n\n### 🎯 Smart List Handling\n- Toggle lists with intelligent nesting behavior\n- Context-aware toolbar (indent/outdent appear when needed)\n- Nested lists without keyboard shortcuts\n- Clean UX that matches modern editors\n\n### 📤 Export \u0026 Import\n- **HTML** with semantic markup\n- **Markdown** with GitHub Flavored syntax\n- **JSON** for structured data\n- Custom transformers for specialized formats\n\n### 🎨 Theming \u0026 Styling\n- CSS classes or Tailwind utilities\n- Custom themes for consistent styling\n- Dark mode support\n- Accessible by default\n\n## Real World Usage\n\nLexKit powers editors in:\n- Content management systems\n- Documentation platforms\n- Blog editors\n- Note-taking applications\n- Comment systems\n- Collaborative writing tools\n\n## Community \u0026 Support\n\n- **[💬 Discord](https://discord.gg/SAqTGDkR)** - Get help, share ideas\n- **[🐛 GitHub Issues](https://github.com/novincode/lexkit/issues)** - Bug reports, feature requests\n- **[💭 Discussions](https://github.com/novincode/lexkit/discussions)** - Questions, showcase your projects\n\n## Contributing\n\nWe welcome contributions! Whether you:\n- Find and report bugs\n- Suggest new features\n- Contribute code or documentation\n- Share projects built with LexKit\n- Star the repo to show support\n\nCheck our [Contributing Guide](./CONTRIBUTING.md) to get started.\n\n## Support This Project\n\nLexKit is free and open source, built by developers for developers. If it's helping you build better editors, consider supporting its development:\n\n- **⭐ Star this repository** to show your support\n- **💝 [Sponsor the project](https://github.com/sponsors/novincode)** to help with maintenance and new features\n- **📢 Share LexKit** with other developers\n\nYour support keeps this project alive and helps us build better tools for the React community.\n\n---\n\n**Built with ❤️ by [novincode](https://github.com/novincode)**\n\nMIT License - Use it however you want.\u003c/content\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovincode%2Flexkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovincode%2Flexkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovincode%2Flexkit/lists"}