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);
}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/u1@0..6— A character range within a story (half-open). storyId comes from paged.stories()[].selfId.