Supported Markdown and Compatibility
What content the AI can edit, and which frameworks and versions emend supports.
emend sends your text to the AI as Markdown and turns the answer back into editor content. This page lists what survives that trip. Your editor also needs the matching Tiptap extension for each type of content (for example, a table extension for tables).
What content is supported
| Content | Support |
|---|---|
| Paragraphs and headings | Supported |
| Bold, italic, combined emphasis, strikethrough, and underline | Supported |
| Inline code and fenced code blocks | Supported |
| Validated links, including links inside tables | Supported |
| Nested bullet and ordered lists | Supported |
| Nested task lists | Supported |
| Blockquotes | Supported |
| Hard breaks and horizontal rules | Supported |
| Basic GFM tables | Supported with the limits below |
| Arbitrary raw HTML | Not supported |
| Generated images | Not supported |
Links are checked for safety. javascript:, data:, and vbscript: links
are blocked.
Table limits
Tables work when they have a header row, the same number of columns in every
row, and one paragraph per cell. Column alignment, | characters inside
cells, and line breaks inside cells also work.
These are not supported yet: merged cells, column widths, missing headers, and cells with more than one paragraph or block.
Your own custom content
If you added your own Tiptap nodes or marks, emend does not guess how to handle them. If a suggestion includes content your editor cannot display, emend will not apply it. It never silently drops your content.
Supported setup
| Layer | Supported baseline |
|---|---|
| Framework | Next.js App Router |
| React | ^19.0.0 |
| Tiptap | 3.7.1 or later in Tiptap 3, with all @tiptap/* packages on the same version |
| Component system | Shadcn registry with editable copied source |
| Styling | Tailwind CSS 4 and semantic Shadcn tokens |
| Runtime | Node.js 24.19.0 or later |
Next.js with the App Router is the only setup we support and test for now. The
AI components are plain React, so they may also work in other React apps, such
as one created with Vite, as long as you have a backend endpoint for the server
route. The server handler uses standard Request and Response objects, so it
is not tied to Next.js either. Guides for other frameworks are coming soon.
If a request is blocked because of your content or versions, see Troubleshooting and Limitations.