New:Microsoft Teams Notifications Are Now Available in Socket.Learn more
Get Started

@stll/folio-core

Package Overview
Dependencies
Maintainers
1
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stll/folio-core

Headless, framework-neutral core of folio: the OOXML (.docx) parser, document model, ProseMirror integration, and page-layout engine. No React.

Source
npmnpm
Version
0.29.0
Version published
Weekly downloads
5.4K
-45.42%
Maintainers
1
Weekly downloads
 
Created
Source

folio

@stll/folio-core

The headless, framework-neutral core of folio: the OOXML (.docx) parser, the document model, the ProseMirror integration, and the page-layout engine. It opens a real .docx, models it, paginates it, and writes a real .docx back — preserving tables, headers and footers, tracked changes, and footnotes.

There is no React in the import graph, so the core runs on a server or under any framework. The React editor lives in @stll/folio-react, and the Vue editor lives in @stll/folio-vue.

Part of stella, an open-source legal workspace.

Install

bun add @stll/folio-core

Exports

ImportWhat it is
@stll/folio-corethe headless public API — createEmptyDocument, createDocx, the document model, AI-suggestion primitives, ProseMirror plugins
@stll/folio-core/markdownDOCX ↔ Markdown conversion
@stll/folio-core/serverDOM-free document review, explicit tracked edits, comparison, creation, and package helpers
@stll/folio-core/redlineCompare two .docx buffers and generate a native Word redline
@stll/folio-core/*the source-mirrored module tree (e.g. @stll/folio-core/types/document, @stll/folio-core/prosemirror/schema) for adapters that need lower-level building blocks

New documents and reusable style sets

Create a legal-shaped blank document with the built-in preset:

import { createDocx, createEmptyDocument, createStellaStyleDocumentPreset } from "@stll/folio-core";

const document = createEmptyDocument({
  preset: createStellaStyleDocumentPreset(),
});
const docx = await createDocx(document);

Style sets are content-free JSON values. Inspect a source file before presenting styles for selection, extract the selected dependency closure, persist the result, and load it into any later document:

import {
  createEmptyDocument,
  extractDocumentStyleSetFromDocx,
  inspectDocumentStylesFromDocx,
} from "@stll/folio-core";

const catalog = await inspectDocumentStylesFromDocx(sourceDocx);
const styleSet = await extractDocumentStyleSetFromDocx(sourceDocx, {
  name: "Firm contract styles",
  styleIds: catalog.styles
    .filter(({ role }) => role === "default" || role === "quick")
    .map(({ styleId }) => styleId),
});

const document = createEmptyDocument({ styleSet });

Extraction excludes document content, metadata, relationships, media, comments, and revision data. It keeps only the selected styles and the numbering, theme, font-table, and settings data required to reproduce their formatting.

Native Word redlines

Generate a reviewable .docx whose text and supported inline-formatting differences are native tracked changes:

import { generateRedlineDocx } from "@stll/folio-core/redline";

const result = await generateRedlineDocx(originalDocx, revisedDocx, {
  author: "Reviewer",
});

await store(result.buffer);
console.log(result.applied, result.skipped, result.unprocessedStories);

For deterministic operations against one document, use FolioDocxReviewer from @stll/folio-core/server. Its operations default to tracked changes and can be enumerated, accepted, or rejected before saving. getChanges() includes inline edits, formatting, paragraph marks, and paragraph, section, table, row, and cell property changes.

License

Apache-2.0

folio began as a private fork of Eigenpal's docx-editor; the original license and copyright are preserved in NOTICE.md.

Keywords

document-model

FAQs

Package last updated on 29 Aug 2026

Related posts