UNPKG

@lobehub/editor

Version:

A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.

689 lines (541 loc) โ€ข 27.2 kB
<div align="center"><a name="readme-top"></a> <img height="120" src="https://registry.npmmirror.com/@lobehub/assets-logo/1.0.0/files/assets/logo-3d.webp"> <img height="120" src="https://gw.alipayobjects.com/zos/kitchen/qJ3l3EPsdW/split.svg"> <img height="120" src="https://registry.npmmirror.com/@lobehub/fluent-emoji-3d/latest/files/assets/2712-fe0f.webp"> <h1>LobeHub Editor</h1> A modern, extensible rich text editor built on Meta's Lexical framework with dual-architecture design, featuring both a powerful kernel and React integration. Optimized for AI applications and chat interfaces. [![][npm-release-shield]][npm-release-link] [![][github-releasedate-shield]][github-releasedate-link] [![][github-action-test-shield]][github-action-test-link] [![][github-action-release-shield]][github-action-release-link]<br/> [![][github-contributors-shield]][github-contributors-link] [![][github-forks-shield]][github-forks-link] [![][github-stars-shield]][github-stars-link] [![][github-issues-shield]][github-issues-link] [![][github-license-shield]][github-license-link] [Changelog](./CHANGELOG.md) ยท [Report Bug][github-issues-link] ยท [Request Feature][github-issues-link] ![](https://github.com/user-attachments/assets/98c9a810-1c7d-4c33-acd7-ae9d4c0695da) </div> <details> <summary><kbd>Table of contents</kbd></summary> #### TOC - [โœจ Features](#-features) - [๐Ÿ“ฆ Installation](#-installation) - [๐Ÿš€ Quick Start](#-quick-start) - [Basic Editor](#basic-editor) - [Advanced Usage with Plugins](#advanced-usage-with-plugins) - [Chat Input Component](#chat-input-component) - [Editor Kernel API](#editor-kernel-api) - [๐Ÿ”Œ Available Plugins](#-available-plugins) - [Core Plugins](#core-plugins) - [Content Plugins](#content-plugins) - [Plugin Architecture](#plugin-architecture) - [Plugin Features](#plugin-features) - [๐Ÿ“– API Reference](#-api-reference) - [Editor Kernel](#editor-kernel) - [Plugin System](#plugin-system) - [๐Ÿ› ๏ธ Development](#๏ธ-development) - [Setup](#setup) - [Available Scripts](#available-scripts) - [Debug Environment Variables](#debug-environment-variables) #### </details> ## โœจ Features - ๐ŸŽฏ **Dual Architecture** - Both kernel-based API and React components for maximum flexibility - โš›๏ธ **React-First** - Built for React 19+ with modern hooks and patterns - ๐Ÿ”Œ **Rich Plugin Ecosystem** - 10+ built-in plugins for comprehensive content editing - ๐Ÿ’ฌ **Chat Interface Ready** - Pre-built chat input components with mention support - โŒจ๏ธ **Slash Commands** - Intuitive `/` and `@` triggered menus for quick content insertion - ๐Ÿ“ **Multiple Export Formats** - JSON, Markdown, and plain text export capabilities - ๐ŸŽจ **Customizable UI** - Antd-styled components with flexible theming - ๐Ÿ”— **File & Media Support** - Native support for images, files, tables, and more - ๐ŸŽฏ **TypeScript Native** - Built with TypeScript for excellent developer experience - ๐Ÿ“ฑ **Modern Build System** - Optimized with Vite, Dumi docs, and comprehensive testing ## ๐Ÿ“ฆ Installation To install `@lobehub/editor`, run the following command: [![][bun-shield]][bun-link] ```bash $ bun add @lobehub/editor ``` ```bash $ pnpm add @lobehub/editor ``` <div align="right"> [![\][back-to-top\]](#readme-top) </div> ## ๐Ÿš€ Quick Start ### Basic Editor The simplest way to get started with a fully-featured editor: ```tsx import { INSERT_HEADING_COMMAND, ReactCodeblockPlugin, ReactImagePlugin, ReactLinkPlugin, ReactListPlugin, } from '@lobehub/editor'; import { Editor, useEditor } from '@lobehub/editor/react'; export default function MyEditor() { const editor = useEditor(); return ( <Editor placeholder="Start typing..." editor={editor} plugins={[ReactListPlugin, ReactLinkPlugin, ReactImagePlugin, ReactCodeblockPlugin]} slashOption={{ items: [ { key: 'h1', label: 'Heading 1', onSelect: (editor) => { editor.dispatchCommand(INSERT_HEADING_COMMAND, { tag: 'h1' }); }, }, // More slash commands... ], }} onChange={(editor) => { // Handle content changes const markdown = editor.getDocument('markdown'); const json = editor.getDocument('json'); }} /> ); } ``` ### Advanced Usage with Plugins Add more functionality with built-in plugins: ```tsx import { INSERT_FILE_COMMAND, INSERT_MENTION_COMMAND, INSERT_TABLE_COMMAND, ReactFilePlugin, ReactHRPlugin, ReactTablePlugin, } from '@lobehub/editor'; import { Editor, useEditor } from '@lobehub/editor/react'; export default function AdvancedEditor() { const editor = useEditor(); return ( <Editor editor={editor} plugins={[ ReactTablePlugin, ReactHRPlugin, Editor.withProps(ReactFilePlugin, { handleUpload: async (file) => { // Handle file upload return { url: await uploadFile(file) }; }, }), ]} mentionOption={{ items: async (search) => [ { key: 'user1', label: 'John Doe', onSelect: (editor) => { editor.dispatchCommand(INSERT_MENTION_COMMAND, { label: 'John Doe', extra: { userId: 1 }, }); }, }, ], }} /> ); } ``` ### Chat Input Component Pre-built component optimized for chat interfaces: ```tsx import { ChatInput } from '@lobehub/editor/react'; export default function ChatApp() { return ( <ChatInput placeholder="Type a message..." onSend={(content) => { // Handle message send console.log('Message:', content); }} enabledFeatures={['mention', 'upload', 'codeblock']} /> ); } ``` ### Editor Kernel API For advanced use cases, access the underlying kernel directly: ```typescript import { IEditor, createEditor } from '@lobehub/editor'; // Create editor instance const editor: IEditor = createEditor(); // Register plugins editor.registerPlugin(SomePlugin, { config: 'value' }); // Interact with content editor.setDocument('text', 'Hello world'); const content = editor.getDocument('json'); // Listen to events editor.on('content-changed', (newContent) => { console.log('Content updated:', newContent); }); // Execute commands editor.dispatchCommand(INSERT_HEADING_COMMAND, { tag: 'h2' }); ``` <div align="right"> [![\][back-to-top\]](#readme-top) </div> ## ๐Ÿ”Œ Available Plugins ### Core Plugins | Plugin | Description | Features | | ------------------ | ----------------------------- | --------------------------------------------------------------- | | **CommonPlugin** | Foundation editor components | ReactEditor, ReactEditorContent, ReactPlainText, base utilities | | **MarkdownPlugin** | Markdown processing engine | Shortcuts, transformers, serialization, custom writers | | **UploadPlugin** | File upload management system | Priority handlers, drag-drop, multi-source uploads | ### Content Plugins | Plugin | Description | Features | | ------------------------ | ------------------------- | --------------------------------------------------------------- | | **ReactSlashPlugin** | Slash command menu system | `/` and `@` triggered menus, customizable items, async search | | **ReactMentionPlugin** | User mention support | `@username` mentions, custom markdown output, async user search | | **ReactImagePlugin** | Image handling | Upload, display, drag & drop, captions, resizing | | **ReactCodeblockPlugin** | Code syntax highlighting | Shiki-powered, 100+ languages, custom themes, color schemes | | **ReactListPlugin** | List management | Ordered/unordered lists, nested lists, keyboard shortcuts | | **ReactLinkPlugin** | Link management | Auto-detection, validation, previews, custom styling | | **ReactTablePlugin** | Table support | Insert tables, edit cells, add/remove rows/columns, i18n | | **ReactHRPlugin** | Horizontal rules | Divider insertion, custom styling, markdown shortcuts | | **ReactFilePlugin** | File attachments | File upload, status tracking, validation, drag-drop | ### Plugin Architecture All plugins follow a **dual-architecture design**: #### ๐Ÿง  **Kernel Layer** (Framework-agnostic) - **Plugin Interface**: Standardized plugin system with lifecycle management - **Service Container**: Centralized service registration and dependency injection - **Command System**: Event-driven command pattern for editor operations - **Node System**: Custom node types with serialization and transformation - **Data Sources**: Content management and format conversion (JSON, Markdown, Text) #### โš›๏ธ **React Layer** (React-specific) - **React Components**: High-level components for easy integration - **Hook Integration**: Custom hooks for editor state and functionality - **Event Handling**: React-friendly event system and callbacks - **UI Components**: Pre-built UI elements with theming support ### Plugin Features - โœ… **Fully configurable** with TypeScript-typed options - โœ… **Composable** - use any combination together - โœ… **Extensible** - create custom plugins using the same API - โœ… **Event-driven** - react to user interactions and content changes - โœ… **Service-oriented** - modular architecture with dependency injection - โœ… **Internationalization** - Built-in i18n support where applicable - โœ… **Markdown integration** - Shortcuts, import/export, custom transformers - โœ… **Theme system** - Customizable styling and appearance - โœ… **Command pattern** - Programmatic control and automation ## ๐Ÿ“– API Reference #### Utility Hooks ```tsx // Get editor instance const editor = useEditor(); // Helper for plugin configuration const PluginWithConfig = Editor.withProps(ReactFilePlugin, { handleUpload: async (file) => ({ url: 'uploaded-url' }), }); ``` ### Editor Kernel #### `createEditor(): IEditor` Create a new editor kernel instance: ```typescript const editor = createEditor(); ``` #### `IEditor` Interface Core editor methods: ```typescript interface IEditor { // Content management setDocument(type: string, content: any): void; getDocument(type: string): any; // Plugin system registerPlugin<T>(plugin: Constructor<T>, config?: T): IEditor; registerPlugins(plugins: Plugin[]): IEditor; // Commands dispatchCommand<T>(command: LexicalCommand<T>, payload: T): boolean; // Events on<T>(event: string, listener: (data: T) => void): this; off<T>(event: string, listener: (data: T) => void): this; // Lifecycle focus(): void; blur(): void; destroy(): void; // Access getLexicalEditor(): LexicalEditor | null; getRootElement(): HTMLElement | null; requireService<T>(serviceId: ServiceID<T>): T | null; } ``` ### Plugin System #### Creating Custom Plugins ```typescript import { IEditorKernel, IEditorPlugin } from '@lobehub/editor'; class MyCustomPlugin implements IEditorPlugin { constructor(private config: MyPluginConfig) {} initialize(kernel: IEditorKernel) { // Register nodes, commands, transforms, etc. kernel.registerNode(MyCustomNode); kernel.registerCommand(MY_COMMAND, this.handleCommand); } destroy() { // Cleanup } } ``` #### Available Commands Common commands you can dispatch: ```typescript // Content insertion INSERT_HEADING_COMMAND; // { tag: 'h1' | 'h2' | 'h3' } INSERT_LINK_COMMAND; // { url: string, text?: string } INSERT_IMAGE_COMMAND; // { src: string, alt?: string } INSERT_TABLE_COMMAND; // { rows: number, columns: number } INSERT_MENTION_COMMAND; // { label: string, extra?: any } INSERT_FILE_COMMAND; // { file: File } INSERT_HORIZONTAL_RULE_COMMAND; // Text formatting FORMAT_TEXT_COMMAND; // { format: 'bold' | 'italic' | 'underline' } CLEAR_FORMAT_COMMAND; ``` <div align="right"> [![\][back-to-top\]](#readme-top) </div> ## ๐Ÿ› ๏ธ Development ### Setup You can use Github Codespaces for online development: [![][github-codespace-shield]][github-codespace-link] Or clone it for local development: [![][bun-shield]][bun-link] ```bash $ git clone https://github.com/lobehub/lobe-editor.git $ cd lobe-editor $ pnpm install $ pnpm run dev ``` This will start the Dumi documentation server with live playground at `http://localhost:8000`. ### Available Scripts | Script | Description | | -------------------- | --------------------------------------------- | | `pnpm dev` | Start Dumi development server with playground | | `pnpm build` | Build library and generate type definitions | | `pnpm test` | Run tests with Vitest | | `pnpm test:coverage` | Run tests with coverage report | | `pnpm lint` | Lint and fix code with ESLint | | `pnpm type-check` | Type check with TypeScript | | `pnpm ci` | Run all CI checks (lint, type-check, test) | | `pnpm docs:build` | Build documentation for production | | `pnpm release` | Publish new version with semantic-release | ### Debug Environment Variables LobeHub Editor includes comprehensive debug logging that can be controlled via environment variables: #### Basic Debug Configuration ```bash # Enable all LobeHub Editor debug output DEBUG=lobe-editor:* # Enable only important logs (recommended for development) DEBUG=lobe-editor:*:info,lobe-editor:*:warn,lobe-editor:*:error # Enable specific components DEBUG=lobe-editor:kernel,lobe-editor:plugin:* ``` #### Available Debug Categories | Category | Description | Example | | ------------------ | ------------------------- | ------------------------------------ | | `kernel` | Core editor functionality | `DEBUG=lobe-editor:kernel` | | `plugin:*` | All plugins | `DEBUG=lobe-editor:plugin:*` | | `plugin:slash` | Slash commands | `DEBUG=lobe-editor:plugin:slash` | | `plugin:mention` | Mention system | `DEBUG=lobe-editor:plugin:mention` | | `plugin:image` | Image handling | `DEBUG=lobe-editor:plugin:image` | | `plugin:file` | File operations | `DEBUG=lobe-editor:plugin:file` | | `service:*` | All services | `DEBUG=lobe-editor:service:*` | | `service:upload` | Upload service | `DEBUG=lobe-editor:service:upload` | | `service:markdown` | Markdown processing | `DEBUG=lobe-editor:service:markdown` | #### Debug Levels | Level | Browser Display | Usage | Environment Variable | | ------- | --------------------- | ------------------- | --------------------------- | | `debug` | Console.log (gray) | Detailed tracing | `DEBUG=lobe-editor:*:debug` | | `info` | Console.log (blue) | General information | `DEBUG=lobe-editor:*:info` | | `warn` | Console.warn (yellow) | Warnings | `DEBUG=lobe-editor:*:warn` | | `error` | Console.error (red) | Errors | `DEBUG=lobe-editor:*:error` | #### Development Usage ```bash # Full debug during development DEBUG=lobe-editor:* # Only critical logs DEBUG=lobe-editor:*:error,lobe-editor:*:warn # Plugin debugging DEBUG=lobe-editor:plugin:* # Service debugging DEBUG=lobe-editor:service:* ``` ### Project Architecture ``` lobe-editor/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ editor-kernel/ # ๐Ÿง  Core editor logic โ”‚ โ”‚ โ”œโ”€โ”€ kernel.ts # Main editor class with plugin system โ”‚ โ”‚ โ”œโ”€โ”€ data-source.ts # Content management (JSON/Markdown/Text) โ”‚ โ”‚ โ”œโ”€โ”€ service.ts # Service container and dependency injection โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Plugin base classes and interfaces โ”‚ โ”‚ โ”œโ”€โ”€ react/ # React integration layer โ”‚ โ”‚ โ””โ”€โ”€ types.ts # TypeScript interfaces โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugins/ # ๐Ÿ”Œ Feature plugins โ”‚ โ”‚ โ”œโ”€โ”€ common/ # ๐Ÿ—๏ธ Foundation components โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Base editor plugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactEditor, ReactEditorContent, ReactPlainText โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ data-source/ # Content data sources โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # Common utilities โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ markdown/ # ๐Ÿ“ Markdown processing engine โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Markdown transformation plugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ service/ # Markdown shortcut service โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ data-source/ # Markdown serialization โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # Transformer utilities โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ upload/ # ๐Ÿ“ค Upload management system โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Upload handling plugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ service/ # Upload service with priority system โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # Upload utilities โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ slash/ # โšก Slash commands (/, @) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Slash detection plugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactSlashPlugin, ReactSlashOption โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ service/ # Slash service with fuzzy search โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # Search and trigger utilities โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ mention/ # ๐Ÿ‘ค @mention system โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Mention plugin with decorators โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactMentionPlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # INSERT_MENTION_COMMAND โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ node/ # MentionNode with serialization โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ codeblock/ # ๐ŸŽจ Syntax highlighting โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Codeblock plugin with Shiki โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactCodeblockPlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # Language and color commands โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # Language detection โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ image/ # ๐Ÿ–ผ๏ธ Image upload & display โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Image plugin with captions โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactImagePlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # INSERT_IMAGE_COMMAND โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ node/ # BaseImageNode, ImageNode โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ table/ # ๐Ÿ“Š Table support โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Table plugin with i18n โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactTablePlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # Table manipulation commands โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ node/ # Enhanced TableNode โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # Table operations โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ file/ # ๐Ÿ“Ž File attachments โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # File plugin with status tracking โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactFilePlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # INSERT_FILE_COMMAND โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ node/ # FileNode with metadata โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # File operations โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ link/ # ๐Ÿ”— Link management โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # Link plugin with validation โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactLinkPlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # Link commands โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # URL validation and detection โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ list/ # ๐Ÿ“‹ Lists (ordered/unordered) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # List plugin with nesting โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactListPlugin โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ command/ # List manipulation commands โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # List operations โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ hr/ # โž– Horizontal rules โ”‚ โ”‚ โ”œโ”€โ”€ plugin/ # HR plugin with styling โ”‚ โ”‚ โ”œโ”€โ”€ react/ # ReactHRPlugin โ”‚ โ”‚ โ”œโ”€โ”€ command/ # HR insertion commands โ”‚ โ”‚ โ””โ”€โ”€ node/ # HorizontalRuleNode โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ react/ # โš›๏ธ High-level React components โ”‚ โ”‚ โ”œโ”€โ”€ Editor/ # Main Editor component with plugins โ”‚ โ”‚ โ”œโ”€โ”€ ChatInput/ # Chat interface component โ”‚ โ”‚ โ”œโ”€โ”€ ChatInputActions/ # Chat action buttons โ”‚ โ”‚ โ”œโ”€โ”€ ChatInputActionBar/ # Action bar layout โ”‚ โ”‚ โ”œโ”€โ”€ SendButton/ # Send button with states โ”‚ โ”‚ โ””โ”€โ”€ CodeLanguageSelect/ # Code language selector โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ index.ts # Public API exports โ”‚ โ”œโ”€โ”€ docs/ # ๐Ÿ“š Documentation source โ”œโ”€โ”€ tests/ # ๐Ÿงช Test files โ”œโ”€โ”€ vitest.config.ts # Test configuration โ””โ”€โ”€ .dumi/ # Dumi doc build cache ``` The architecture follows a **dual-layer design**: 1. **Kernel Layer** (`editor-kernel/`) - Framework-agnostic core with plugin system 2. **React Layer** (`react/` + `plugins/*/react/`) - React-specific implementations Each plugin follows a consistent structure: - **`plugin/`** - Core plugin logic and node definitions - **`react/`** - React components and hooks (if applicable) - **`command/`** - Editor commands and handlers - **`service/`** - Services and business logic - **`node/`** - Custom Lexical nodes - **`utils/`** - Utility functions and helpers This allows for maximum flexibility - you can use just the kernel for custom integrations, or the React components for rapid development. <div align="right"> [![][back-to-top]](#readme-top) </div> ## ๐Ÿค Contributing Contributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub [Issues][github-issues-link] to get stuck in to show us what you're made of. [![][pr-welcome-shield]][pr-welcome-link] [![][github-contrib-shield]][github-contrib-link] <div align="right"> [![][back-to-top]](#readme-top) </div> ## ๐Ÿ”— Links ### More Products - **[๐Ÿคฏ Lobe Chat](https://github.com/lobehub/lobe-chat)** - An open-source, extensible (Function Calling), high-performance chatbot framework. It supports one-click free deployment of your private ChatGPT/LLM web application. - **[๐Ÿ…ฐ๏ธ Lobe Theme](https://github.com/lobehub/sd-webui-lobe-theme)** - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency boosting features. - **[๐Ÿงธ Lobe Vidol](https://github.com/lobehub/lobe-vidol)** - Experience the magic of virtual idol creation with Lobe Vidol, enjoy the elegance of our Exquisite UI Design, dance along using MMD Dance Support, and engage in Smooth Conversations. ### Design Resources - **[๐Ÿญ Lobe UI](https://ui.lobehub.com)** - An open-source UI component library for building AIGC web apps. - **[๐Ÿฅจ Lobe Icons](https://lobehub.com/icons)** - Popular AI / LLM Model Brand SVG Logo and Icon Collection. - **[๐Ÿ“Š Lobe Charts](https://charts.lobehub.com)** - React modern charts components built on recharts ### Development Resources - **[๐ŸŽค Lobe TTS](https://tts.lobehub.com)** - A high-quality & reliable TTS/STT library for Server and Browser - **[๐ŸŒ Lobe i18n](https://github.com/lobehub/lobe-cli-toolbox/blob/master/packages/lobe-i18n)** - Automation ai tool for the i18n (internationalization) translation process. [More Resources](https://lobehub.com/resources) <div align="right"> [![][back-to-top]](#readme-top) </div> --- #### ๐Ÿ“ License Copyright ยฉ 2025 [LobeHub][profile-link]. <br /> This project is [MIT](./LICENSE) licensed. [back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square [bun-link]: https://bun.sh [bun-shield]: https://img.shields.io/badge/-speedup%20with%20bun-black?logo=bun&style=for-the-badge [github-action-release-link]: https://github.com/lobehub/lobe-editor/actions/workflows/release.yml [github-action-release-shield]: https://img.shields.io/github/actions/workflow/status/lobehub/lobe-editor/release.yml?label=release&labelColor=black&logo=githubactions&logoColor=white&style=flat-square [github-action-test-link]: https://github.com/lobehub/lobe-editor/actions/workflows/test.yml [github-action-test-shield]: https://img.shields.io/github/actions/workflow/status/lobehub/lobe-editor/test.yml?label=test&labelColor=black&logo=githubactions&logoColor=white&style=flat-square [github-codespace-link]: https://codespaces.new/lobehub/lobe-editor [github-codespace-shield]: https://github.com/codespaces/badge.svg [github-contrib-link]: https://github.com/lobehub/lobe-editor/graphs/contributors [github-contrib-shield]: https://contrib.rocks/image?repo=lobehub%2Flobe-editor [github-contributors-link]: https://github.com/lobehub/lobe-editor/graphs/contributors [github-contributors-shield]: https://img.shields.io/github/contributors/lobehub/lobe-editor?color=c4f042&labelColor=black&style=flat-square [github-forks-link]: https://github.com/lobehub/lobe-editor/network/members [github-forks-shield]: https://img.shields.io/github/forks/lobehub/lobe-editor?color=8ae8ff&labelColor=black&style=flat-square [github-issues-link]: https://github.com/lobehub/lobe-editor/issues [github-issues-shield]: https://img.shields.io/github/issues/lobehub/lobe-editor?color=ff80eb&labelColor=black&style=flat-square [github-license-link]: https://github.com/lobehub/lobe-editor/blob/master/LICENSE [github-license-shield]: https://img.shields.io/github/license/lobehub/lobe-editor?color=white&labelColor=black&style=flat-square [github-releasedate-link]: https://github.com/lobehub/lobe-editor/releases [github-releasedate-shield]: https://img.shields.io/github/release-date/lobehub/lobe-editor?labelColor=black&style=flat-square [github-stars-link]: https://github.com/lobehub/lobe-editor/network/stargazers [github-stars-shield]: https://img.shields.io/github/stars/lobehub/lobe-editor?color=ffcb47&labelColor=black&style=flat-square [npm-release-link]: https://www.npmjs.com/package/@lobehub/editor [npm-release-shield]: https://img.shields.io/npm/v/@lobehub/editor?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square [pr-welcome-link]: https://github.com/lobehub/lobe-editor/pulls [pr-welcome-shield]: https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge [profile-link]: https://github.com/lobehub