A headless, framework-agnostic rich text editor built on Lexical. Provides a plugin-based extension system, a ready-to-use UI kit, and optional add-ons like image handling — all as independently publishable npm packages.
| Package | Version | Description |
|---|---|---|
@jikjo/core |
Headless editor core: <Editor>, plugin hooks, extension API, HTML/Markdown export |
|
@jikjo/ui-kit |
Pre-built editor UI with toolbar, bubble menu, slash command, and block toolbar | |
@jikjo/image |
Image extension with file upload, drag & drop, clipboard paste, resize, and alignment |
pnpm add @jikjo/core @jikjo/ui-kitimport { EditorUI } from '@jikjo/ui-kit'
import '@jikjo/ui-kit/styles.css'
export default function App() {
return <EditorUI />
}pnpm add @jikjo/imageimport { EditorUI } from '@jikjo/ui-kit'
import { createImageExtension } from '@jikjo/image'
import '@jikjo/ui-kit/styles.css'
import '@jikjo/image/styles.css'
const imageExtension = createImageExtension({
uploadAdapter: {
upload: async (file) => {
const form = new FormData()
form.append('file', file)
const res = await fetch('/api/upload', { method: 'POST', body: form })
const { url } = await res.json()
return url
},
},
})
export default function App() {
return <EditorUI extensions={[imageExtension]} />
}import { Editor, richTextExtension, historyExtension } from '@jikjo/core'
export default function App() {
return (
<Editor extensions={[richTextExtension, historyExtension]}>
{/* your custom UI here */}
</Editor>
)
}For detailed props, theming variables, and advanced usage, see each package's README:
packages/ui-kit/README.md— EditorUI props, feature flags, themingpackages/image/README.md— upload adapter, programmatic insert, theming
pnpm install
pnpm dev # start all packages in watch mode
pnpm build # build all packages
pnpm check-types # typecheck all packagesTo run the playground:
pnpm --filter @jikjo/playground devThis repo uses Changesets for versioning and publishing.
pnpm changeset # describe your changes
pnpm changeset version # bump versions and update changelogs
pnpm release # publish to npmReleases are automated via GitHub Actions on push to main.
MIT