| name | sandbox-docx |
| description | Build a Word document in a Code node or CodeAct action, with docx running on the host |
Word documents in the sandbox
Specifier: @nodetool-ai/sandbox-docx. Import it at the top of the body.
docx builds a document out of class instances (Paragraph, TextRun,
Table, …) that cannot cross the guest boundary as plain data. This pack is a
host module: you describe the document as a JSON element list and the host
builds the real .docx bytes.
build — element list to .docx bytes
import { build } from "@nodetool-ai/sandbox-docx";
const bytes = await build({
properties: { title: "Q3 Report", author: "NodeTool" },
elements: [
{ type: "heading", text: "Q3 Report", level: 1 },
{ type: "paragraph", text: "Revenue grew 12% quarter over quarter.", bold: true },
{ type: "table", rows: [["Month", "Revenue"], ["Jul", "120k"], ["Aug", "134k"]] },
{ type: "pageBreak" },
{ type: "paragraph", text: "See appendix for methodology.", alignment: "CENTER" }
]
});
await workspace.writeBytes("report.docx", bytes);
Element types:
heading — text, level (1–6, default 1)
paragraph — text, alignment (LEFT/CENTER/RIGHT/JUSTIFY, default
LEFT), bold, italic, fontSize (points, default 12)
table — rows, a 2D array; every cell is stringified
image — data (a Uint8Array), width/height in inches
pageBreak — no fields
properties.title/author/subject/keywords set the document's metadata.
Gotchas
build is async and returns a Uint8Array.
- Writing only. To read an existing
.docx, use
@nodetool-ai/sandbox-mammoth instead — these are two different libraries on
two different sides of the format.
- Images are inches, not pixels.
width/height follow docx's own
convention; omit them and the image renders at a fixed placeholder size.
- 10 MB per image. The shared host-module input cap applies to each
data field.