Honest Comparison

Mina vs Lexical

An extensible text editor framework by Meta

01 — Quick Stats

Mina

StarsNew
Bundle~45KB
LicenseMIT
ActivityActive
FrameworkReact

Lexical

Stars23.1k
Bundle22KB core
LicenseMIT
ActivityActive
FrameworkFramework-agnostic
02 — Feature Comparison
Feature
Mina
Lexical
Pre-built UI
Full UI included
Headless (BYO everything)
Setup time
Minutes
Hours to days
Block-based editing
Out of the box
Build from scratch
Slash commands
Built-in
Build from scratch
AI integration
Built-in, any provider
Not included
Real-time collaboration
Built-in (Y.js)
Build from scratch
Learning curve
Gentle
Steep
Core size
~45KB
22KB
Backing
Independent
Meta (Facebook)
Accessibility
Good
Excellent
Framework support
React only
Any framework
Community
New
23.1k stars
03 — Strengths

Where each editor shines

An honest look at what each editor does best.

Mina wins

Pre-built UI — toolbar, menus, and blocks included

Working editor in minutes, not hours or days

Block-based editing out of the box

Slash commands and markdown shortcuts included

Built-in AI generation — provider-agnostic, works with any LLM

Built-in Y.js real-time collaboration

Much gentler learning curve for React developers

Lexical wins

Smallest core bundle at just 22KB

Backed by Meta with excellent engineering resources

Best-in-class accessibility support

Framework-agnostic — works everywhere

Massive community with 23.1k stars

04 — Code Comparison
Mina — 9 lines
import { Editor } from "@/components/ui/rich-editor"

function App() {
  return (
    <Editor
      initialContent={content}
      onChange={({ json, html }) => save(json)}
    />
  )
}
Lexical — 26 lines
import { LexicalComposer } from '@lexical/react/LexicalComposer'
import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'
import { ContentEditable } from '@lexical/react/LexicalContentEditable'
import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin'
import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin'
import LexicalErrorBoundary from '@lexical/react/LexicalErrorBoundary'
import { HeadingNode, QuoteNode } from '@lexical/rich-text'
import { ListNode, ListItemNode } from '@lexical/list'

const config = {
  namespace: 'MyEditor',
  nodes: [HeadingNode, QuoteNode, ListNode, ListItemNode],
  onError: (error) => console.error(error),
}

function App() {
  return (
    <LexicalComposer initialConfig={config}>
      <RichTextPlugin
        contentEditable={<ContentEditable />}
        ErrorBoundary={LexicalErrorBoundary}
      />
      <HistoryPlugin />
      <OnChangePlugin onChange={save} />
    </LexicalComposer>
  )
}
05 — The Verdict

Choose Mina if...

  • You want a working editor immediately, not a framework
  • You need block-based editing without building it yourself
  • You prefer batteries-included over assembling pieces
  • You're a React developer who wants minimal setup

Choose Lexical if...

  • You need the absolute smallest core bundle
  • You want Meta-backed long-term stability
  • You need framework-agnostic support
  • You're building a deeply custom editing experience from scratch

Ready to build?

Try Mina Rich Editor — 3 lines of code, zero ProseMirror.

Installation coming soon

MIT License · 2025–2026 Mina Massoud