Conversion model
Key difference- JS-native engine
- JavaScript function call
- LibreOffice headless
- External office process

Compare
No LibreOffice process. No font package drift. No single-threaded bottlenecks. One JavaScript function call converts DOCX to PDF in-process.
[01] Side by side
These are the practical reasons teams start looking for a native conversion path.
| Capability | JS-native engine | LibreOffice headless |
|---|---|---|
| Conversion model | JavaScript function call | External office process |
| Concurrency | In-process, app-managed | Single-threaded bottlenecks and crashes |
| Malformed input handling | App-level failure handling | Can hang at 100% CPU |
| Fonts | Same JS document pipeline | Font package drift and substitution |
| Infrastructure | No external office runtime | Docker image, fonts, process supervision |
| Format breadth | DOCX → PDF only | Broader legacy office coverage |
[02] When LibreOffice is still right
PaperJSX handles DOCX-to-PDF natively. If your pipeline also converts ODT or RTF, you can keep LibreOffice for those formats while removing it from the highest-volume, highest-pain conversion path.
[03] The practical split
This decision is usually less about syntax and more about what kind of infrastructure you want to keep carrying.
Native route
Best when JavaScript teams want conversion to stay inside the app instead of supervising a separate office process.
LibreOffice route
If you need ODT, RTF, or maximum fidelity for very complex Word documents, LibreOffice covers more edge cases.
No Docker image. No process supervision. No font packages to maintain. Run the same document through both paths and compare the operational cost.