Export EPUB from your editor

Available in Start planBetav0.3.0

Use Tiptap's @tiptap-pro/extension-export-epub to export your editor's content as an .epub file. This extension integrates EPUB export functionality into your editor by sending the document to the Tiptap convert service for conversion.

You can also use the REST API instead if you'd prefer to handle the conversion on your end.

Install the EPUB Export extension

The Conversion extensions are published in Tiptap's private npm registry. Integrate the extensions by following the private registry guide.

Once done you can install and import the Export EPUB extension package.

npm i @tiptap-pro/extension-export-epub
import { ExportEpub } from '@tiptap-pro/extension-export-epub'

Configuring the extension

The ExportEpub extension can be configured with an ExportEpubOptions (object) as an argument to the configure method with the following properties:

import { ExportEpub } from '@tiptap-pro/extension-export-epub'

const editor = new Editor({
  extensions: [
    // Other extensions ...
    ExportEpub.configure({
      endpoint: 'https://api.tiptap.dev/v2/convert',
      token: 'YOUR_TOKEN',
      appId: 'YOUR_APP_ID',
      styleOverrides: {},
      headers: {},
      footers: {},
      pageSize: { width: '21cm', height: '29.7cm' },
      pageMargins: { top: '1cm', bottom: '1cm', left: '1cm', right: '1cm' },
      customNodes: [],
      onCompleteExport: (result) => {
        // Handle the exported Blob
      },
    }),
    // Other extensions ...
  ],
})
ParameterTypeDescriptionDefault
endpointstringThe Tiptap API endpoint for conversion'https://api.tiptap.dev/v2/convert'
tokenstringThe Tiptap JWT for authentication''
appIdstringThe Tiptap App ID for authentication''
styleOverridesRecord<string, string>Style overrides to apply to the exportundefined
headersHeaderConfigHeader configuration for the exported documentundefined
footersFooterConfigFooter configuration for the exported documentundefined
pageSizePageSizePage size configurationundefined
pageMarginsPageMarginsPage margins configurationundefined
customNodesCustomNodeDefinition[]Custom node definitions for DOCX-based conversion (requires @tiptap-pro/extension-export-docx)undefined
onCompleteExport(result: Blob) => voidCallback that receives the exported file as a BlobThrows error if not provided

HeaderConfig

PropertyTypeDescription
evenAndOddHeadersbooleanWhether to use different headers for odd and even pages
differentFirstPagebooleanWhether to use a different header on the first page. When true, the first value is used on page one instead of default.
defaultstringThe standard default header on every page, or header on odd pages when evenAndOddHeaders is active. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.
firststringThe header on the first page. Only used when differentFirstPage is set to true. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.
evenstringThe header on even pages when the evenAndOddHeaders option is activated. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.

FooterConfig

PropertyTypeDescription
evenAndOddFootersbooleanWhether to use different footers for odd and even pages
differentFirstPagebooleanWhether to use a different footer on the first page. When true, the first value is used on page one instead of default.
defaultstringThe standard default footer on every page, or footer on odd pages when evenAndOddFooters is active. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.
firststringThe footer on the first page. Only used when differentFirstPage is set to true. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.
evenstringThe footer on even pages when the evenAndOddFooters option is activated. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.

PageSize

PropertyTypeDescriptionDefault
widthstringThe width of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px)."21cm"
heightstringThe height of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px)."29.7cm"

PageMargins

PropertyTypeDescriptionDefault
topstringThe top margin of the page. Can be negative. Must be a number followed by a valid unit (cm, in, pt, pc, mm, px)."1cm"
bottomstringThe bottom margin of the page. Can be negative. Must be a number followed by a valid unit (cm, in, pt, pc, mm, px)."1cm"
leftstringThe left margin of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px)."1cm"
rightstringThe right margin of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px)."1cm"

Export an EPUB file

With the extension installed, you can export your editor's content to .epub using the exportEpub command.

/**
 * Export the current document as an EPUB file via the Tiptap convert service.
 *
 * @param options - All extension-level options can be overridden per-invocation
 * @example editor.commands.exportEpub({ onCompleteExport: (result) => {} })
 */
exportEpub: (options?: ExportEpubCommandOptions) => ReturnType

The ExportEpubCommandOptions interface extends ExportEpubOptions, so every configuration option can be overridden per-command invocation:

PropertyTypeDescription
endpointstringOverride the API endpoint for this specific export
tokenstringOverride the JWT token for this specific export
appIdstringOverride the App ID for this specific export
styleOverridesRecord<string, string>Override style overrides for this specific export
headersHeaderConfigOverride header configuration for this specific export
footersFooterConfigOverride footer configuration for this specific export
pageSizePageSizeOverride page size for this specific export
pageMarginsPageMarginsOverride page margins for this specific export
customNodesCustomNodeDefinition[]Override custom node definitions for this specific export
onCompleteExport(result: Blob) => voidOverride the callback for this specific export
import { ExportEpub } from '@tiptap-pro/extension-export-epub'

const editor = new Editor({
  extensions: [
    // Other extensions ...
    ExportEpub.configure({
      token: 'YOUR_TOKEN',
      appId: 'YOUR_APP_ID',
      onCompleteExport(result) {
        // Download the EPUB file
        const url = URL.createObjectURL(result)
        const a = document.createElement('a')

        a.href = url
        a.download = 'document.epub'
        a.click()

        URL.revokeObjectURL(url)
      },
    }),
    // Other extensions ...
  ],
})

// Use the extension-level callback
editor.chain().exportEpub().run()

// Or override options for a specific export
editor
  .chain()
  .exportEpub({
    pageSize: { width: '8.5in', height: '11in' },
    onCompleteExport(result) {
      // Custom handling for this specific export
      const url = URL.createObjectURL(result)
      window.open(url)
    },
  })
  .run()

How it works

When you call exportEpub, the extension sends the editor's document and any configured options (style overrides, page layout, headers, footers) to the Convert service, which returns the resulting .epub file as a binary blob. The onCompleteExport callback receives the blob directly. Errors are thrown as exceptions rather than passed through the callback.

What to expect

  • Authentication required (token JWT and appId). Generate JWTs server-side. See the Conversion install guide.
  • HTTP responses to handle: 401 (missing or invalid JWT), 403 (operation not permitted for your app — typically a format your plan doesn't include), 5xx (transient server-side error; retry with backoff).
  • Each request is processed end-to-end before responding. Plan for longer round-trips on long documents.

What not to expect

  • Per-chapter metadata customisation. EPUB metadata (book title, author, language, custom chapter spine) is not yet configurable through the export options.
  • Pixel-perfect rendering across reading apps. EPUB rendering is reading-app-dependent; spacing, font fallback, and image scaling vary across apps and devices. Test against the readers your audience uses.

Support & Limitations

FeatureSupport
Text content✓ Basic text, spacing, punctuation
Text formatting✓ Bold, italic, underline, strikethrough, alignment, line height
Block elements✓ Paragraphs, headings (1–6), blockquotes, ordered and unordered lists
Tables✓ Basic structure, header rows, colspan
Links✓ Hyperlinks
Media (Images)✓ Embedded images, size preserved
Styles✓ Font families*, Font colors, font sizes, background colors, line heights
Headers & Footers
Math
Page Breaks
Sections
Footnotes & Endnotes
Comments & Revisions
Table of Contents
Advanced Formatting✗ Columns, text direction, forms, macros, embedded scripts
Metadata
Text Boxes, Shapes, SmartArt
  • Font families are supported as long as the target font is installed on the operative system when the exported file is opened.

For a detailed per-feature breakdown, see the Supported features matrix. Note that element overrides (paragraphOverrides, textRunOverrides, tableOverrides, tableCellOverrides, imageOverrides) available in the DOCX export extension are not passed through to the EPUB conversion.