LikhaEditor is a completely free, open-source, self-hosted, framework-agnostic rich text editor built for developers who demand flexibility without vendor lock-in. Run it anywhere: static HTML, Laravel, Livewire, React, Next.js, and more. The name "Likha" comes from the Hindi word "लिखा", meaning "written".
Documentation | Examples | API Reference | Changelog | npm Package
- Free forever under the MIT license
- No mandatory cloud services or accounts
- Runs in plain HTML without build tooling
- Friendly with Laravel, Livewire, and other backends
- Works with your preferred frontend framework
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@likhaeditor/likhaeditor/dist/likha-editor.css">
</head>
<body>
<div id="editor"></div>
<script src="https://cdn.jsdelivr.net/npm/@likhaeditor/likhaeditor/dist/likha-editor.umd.js"></script>
<script>
const editor = LikhaEditor.createEditor({
element: document.getElementById("editor"),
content: "<p>Start writing...</p>"
});
</script>
</body>
</html>npm install @likhaeditor/likhaeditorimport { createEditor } from '@likhaeditor/likhaeditor';
import '@likhaeditor/likhaeditor/dist/likha-editor.css';
const editor = createEditor({
element: document.getElementById('editor'),
content: '<p>Start writing...</p>'
});composer require nomadprogrammer/likha-laravel<x-likha-editor name="content" :value="old('content', $post->content)" />- 100 percent open source (MIT)
- Self-hosted only, zero SaaS dependencies
- Framework-agnostic core architecture
- Works in a plain HTML page
- Plugin-based feature model
- No gated or paywalled functionality
- Developer-first ergonomics and documentation
- A modern rich text editor platform
- Fully extensible through plugins
- Suitable for admin panels, CMS, SaaS apps, and dashboards
- Welcoming to Laravel and Livewire workflows
- Safe for commercial projects
- A hosted cloud service
- A SaaS subscription offering
- A CKEditor clone (all-original implementation)
- Locked into any single framework
| Feature | LikhaEditor | TipTap | Quill | CKEditor | Slate |
|---|---|---|---|---|---|
| License | MIT (Free) | MIT (Free) | BSD | GPL/Commercial | MIT (Free) |
| Self-Hosted | Yes | Yes | Yes | Yes | Yes |
| Cloud Required | No | No | No | Optional | No |
| Framework | Agnostic | React-focused | Agnostic | Agnostic | React-only |
| Plain HTML | Yes | No | Yes | Yes | No |
| Laravel Support | First-class | Manual | Manual | Manual | Manual |
| Plugin System | Yes | Yes | Limited | Yes | Custom |
| Commercial Use | Free | Free | Free | Paid/GPL | Free |
| Track Changes | Yes | Premium | No | Premium | Custom |
| Collaborative | Planned | Premium | No | Premium | Custom |
- ✅ Paragraphs and headings
- ✅ Bold, italic, underline, strikethrough
- ✅ Links and lists (bullet, ordered)
- ✅ Undo and redo with keyboard shortcuts
- ✅ Text color and highlighting
- ✅ Subscript and superscript
- ✅ Tables with insert and basic editing
- ✅ Images with upload, resize, and alignment controls
- ✅ Code blocks with language selection
- ✅ Blockquotes and horizontal rules
- ⏳ Table cell merge and advanced editing (planned)
- ⏳ Syntax highlighting for code blocks (planned)
- Track changes and review workflows
- Commenting and annotations
- Version history and diffing
- Markdown import and export
- HTML to JSON and JSON to HTML transforms
- Plain HTML without build tools
- Laravel Blade components
- Livewire bindings
- React and Next.js adapters
- Vue adapter (planned)
- Copy and paste from Word and Google Docs with formatting preservation
- Drag and drop image uploads with preview
- Inline image editing (crop, rotate, filters)
- File attachments and media library
- Embeds (YouTube, Twitter, CodePen, etc.)
- Custom content blocks
- Slash commands for quick block insertion
- Autocomplete and mentions (@user, #tag)
- Emoji picker with search
- Character and word count
- Read-only and focus modes
- Auto-save with configurable intervals
- Find and replace within content
- Multi-language UI support (i18n)
- Right-to-left (RTL) text support
- ARIA labels and keyboard navigation
- Screen reader compatibility
- High contrast and dark mode themes
- Export to PDF with custom styling
- Print-friendly formatting
- Import from Markdown, HTML, plain text
- Export to Markdown, JSON, HTML
- Content sanitization and XSS protection
- TypeScript definitions included
- Comprehensive API documentation
- Testing utilities and helpers
- Extensive code examples
- Migration guides from other editors
- Custom schema definitions
- Event hooks and middleware
- Optional collaborative editing module powered by self-hosted WebSocket servers
- Real-time presence indicators
- Visual theme marketplace backed by community-created plugins
- Accessibility audit tooling to ensure WCAG compliance out of the box
- AI-powered writing assistance (bring your own API)
- Grammar and spell checking (pluggable backends)
- Content templates and snippets library
<div id="editor"></div>
<script type="module">
import { Editor } from "https://cdn.jsdelivr.net/npm/likha/dist/likha.js";
const editor = new Editor({
element: document.getElementById("editor"),
content: "<p>Hello from LikhaEditor</p>"
});
console.log(editor.getHTML());
</script><x-likha-editor name="content" :value="$post->content" /><x-likha-editor wire:model.defer="content" /><LikhaEditor value={value} onChange={setValue} />Everything in LikhaEditor is delivered as a plugin, so you only ship what you enable.
editor.use(TablePlugin);
editor.use(ImagePlugin);
editor.use(TrackChangesPlugin);- No plugin, no bundle size increase
- Fully tree-shakable builds
- First-class support for community plugins
All packages are published under the @likhaeditor scope on npm:
| Package | Version | Description |
|---|---|---|
| @likhaeditor/core | Framework-agnostic editor engine | |
| @likhaeditor/ui | Toolbar and UI components | |
| @likhaeditor/plugins | Official plugin collection | |
| @likhaeditor/likhaeditor | Vanilla JS wrapper (recommended) |
Coming soon: @likhaeditor/likhaeditor-react, @likhaeditor/likhaeditor-laravel, @likhaeditor/likhaeditor-livewire
likha/
├─ packages/
│ ├─ core # Editor engine (framework agnostic)
│ ├─ ui # Toolbar, menus, themes
│ ├─ plugins # Official plugins
│ ├─ html # Plain HTML adapter
│ ├─ react # React adapter
│ ├─ laravel # Laravel package
│ └─ livewire # Livewire integration
├─ examples/
│ ├─ html
│ ├─ laravel
│ └─ nextjs
└─ docs/
- TypeScript throughout the monorepo
- ProseMirror (MIT) for the editing substrate
- ES modules and modern build tooling (pnpm workspace)
- Zero framework dependency inside the core package
LikhaEditor is distributed under the MIT License.
- Free for personal and commercial use
- Redistribution allowed without attribution
- No hidden clauses or feature gating
Contributions are welcome and encouraged. You can help by:
- Implementing new plugins
- Improving documentation and examples
- Fixing bugs or regressions
- Reviewing architecture decisions
- Writing starter templates for new frameworks
Please review CONTRIBUTING.md before submitting a pull request.
- ✅ Ship the core editor engine
- ✅ Release a starter plugin bundle (20 plugins)
- ✅ Publish the plain HTML adapter
- ✅ Launch official documentation site (likhaeditor.netlify.app)
- 🚧 Deliver the React adapter (in progress)
- ⏳ Deliver the Laravel Blade component (planned)
- ⏳ Finalize Livewire integration package (planned)
- ⏳ Bootstrap community plugin gallery (planned)
LikhaEditor aims to become the default open-source editor for developers seeking freedom, control, and simplicity without licenses, clouds, or lock-in. The goal is a modular platform that grows with your product and embraces the ecosystems you already trust.
Yes, completely free. MIT licensed with no hidden costs, premium tiers, or feature gating. Use it in commercial projects without attribution requirements.
No mandatory backend. LikhaEditor runs entirely in the browser. You only need a server if you want features like image uploads, which you control and implement yourself.
Yes, LikhaEditor works completely offline once loaded. No internet connection required for editing.
Both are excellent. LikhaEditor focuses on framework-agnostic design with first-class Laravel/Livewire support and works in plain HTML without build tools. TipTap is React/Vue focused and requires a build step.
No. LikhaEditor will remain 100 percent free and open source forever. No premium plans, no enterprise editions, no feature paywalls.
Collaborative editing is planned as an optional self-hosted module using operational transformation or CRDT algorithms. You host your own WebSocket server - no third-party services required.
Yes, migration guides and content conversion tools are planned to help you switch from other editors while preserving your existing content.
LikhaEditor targets modern evergreen browsers (Chrome, Firefox, Safari, Edge). IE11 is not supported.
Check the documentation, browse examples, open an issue, or join our community discussions.
- GitHub Discussions - Ask questions and share ideas
- Issue Tracker - Report bugs and request features
LikhaEditor is and always will be free. You can support its development by:
- Star the repository on GitHub
- Share LikhaEditor with your network and colleagues
- Report bugs with detailed reproduction steps
- Suggest features and integrations
- Contribute code, documentation, or plugins
- Write blog posts or tutorials about Likha
- Sponsor development (GitHub Sponsors coming soon)
- Help answer questions in Discussions
LikhaEditor is built on the shoulders of giants:
- ProseMirror - The powerful editing framework
- All our contributors
- The open-source community
Shiv Singh
- GitHub: @ProgrammerNomad
- Email: shiv@srapsware.com
Built with ❤️ by ProgrammerNomad