Learning in public — this reference is being written in the open. Unfinished pages are excluded from search engines.
paged.IDML Reference
Scripting (paged.*)

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.

Tier: IntermediateIntermediateIIexplanation

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.

A first paged.* script — inspect the document, then fill a selected frame
paged.* · editor at 50%
Loading editor…
Console
Run a script to see console output here.

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:u123A text frame. Same scheme: rectangle:/oval:/polygon:/graphicLine:/group:.
  • group:<id> e.g. group:u88A 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.

On this page