nextcloud / nextcloud/text

**ODT export is now possible without LibreOffice — via odf-kit**

Open
#8,457 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
659
Forks
133
Avg merge
1d 20h
Merged PRs (30d)
110

Description

ODT export is now possible without LibreOffice — via odf-kit

This picks up where #102 left off.

Since Nextcloud Text is built on TipTap/ProseMirror, ODT export can now be implemented entirely in JavaScript with no server-side dependencies:

import { tiptapToOdt } from 'odf-kit'

// editor.getJSON() returns TipTap JSONContent
const bytes = await tiptapToOdt(editor.getJSON(), { pageFormat: 'A4' })

tiptapToOdt() converts TipTap/ProseMirror JSON directly to a spec-compliant .odt file. It runs entirely in the browser — no LibreOffice, no Pandoc, no external API calls. Document content never leaves the user's environment.

What's supported: headings, paragraphs, bold/italic/underline, lists (nested), tables, links, blockquotes, code blocks, horizontal rules, images (via pre-fetched bytes), custom node handler for app-specific extensions.

odf-kit is Apache 2.0, zero server-side dependencies, passes the OASIS ODF validator on every commit. There is also an odf-kit-service ExApp currently pending approval in the Nextcloud App Store, which exposes odf-kit over HTTP for server-side use cases.

Happy to help with integration if there's interest.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the existing editor export entry points, then compare the editor.getJSON() output with odf-kit’s tiptapToOdt() interface. The issue does not name repository files, tests, or an agreed integration scope; done would require a defined browser-side ODT export integration and acceptance criteria.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.