Scripting with paged.*
The Boa-based scripting layer — a sandboxed ECMAScript surface for reading and authoring a paged document through the paged.* host API. The full surface is generated from the engine catalog.
In short paged embeds a Boa ECMAScript engine and exposes a single
global, paged.*, for inspecting and editing the open document. The same
surface runs in the editor's script panel/REPL and headless via the paged-run
CLI. This reference is generated from the engine's own catalog, so it always
matches the running engine exactly.
The shape of a script
A script is plain ECMAScript (no modules, no I/O — see constraints).
It addresses elements by id, reads with paged.inspect / paged.get, and edits
with paged.set and the structural authoring functions. Every write returns a
boolean so a script can branch on success.
const frame = paged.selection()[0];
if (frame) {
paged.set(frame, "fillColor", "Color/Red");
paged.set(frame, "frameRotation", 12);
}Try it
Edit the script and press Run — it executes in the real Paged editor on the right, and the canvas updates live. Console output appears below.
The playground runs against play.paged.media. It needs that app deployed with the editable-script bridge and a cross-origin-isolated (COOP/COEP) page — both are wired here; see constraints for the sandbox model.
What's here
- Host functionsevery
paged.*function, grouped by kind (read, write, author, history, console). - Settable pathsthe property
names you can pass to
paged.set, plus the id grammar for addressing elements. - Constraintsthe sandbox rules and execution budgets.
textFrame:<id>e.g.textFrame:u123— A text frame. Same scheme: rectangle:/oval:/polygon:/graphicLine:/group:.group:<id>e.g.group:u88— A group. `paged.set("group:<id>", "groupTransform", [a,b,c,d,tx,ty])` moves it as a unit.storyRange:<storyId>@<start>..<end>e.g.storyRange:Story/[email protected]— A character range within a story (half-open). storyId comes from paged.stories()[].selfId.
API reference
The complete @paged-media/idml-viewer API — every exported function, method, property, event, and type — generated from the package surface, with a live filter.
Host functions
Every paged.* host function available to scripts, grouped by kind — generated directly from the engine's scripting catalog.