@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
@stll/folio-core | the headless public API — createEmptyDocument, createDocx, the document model, AI-suggestion primitives, ProseMirror plugins |
@stll/folio-core/markdown | DOCX ↔ Markdown conversion |
@stll/folio-core/server | DOM-free helpers for server-side use (block-id derivation, document creation, re-zip) |
@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.
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.