Any .json file not named form.json, project.json, autocomplete.json, or
presets.json uses this format - filename is otherwise arbitrary, referenced from
process.js via overlay(filename). overlay.json specifically is the default
loaded when process.js doesn't exist - see
process.js.
Template: literal text, or {...}-wrapped JS for anything dynamic (e.g. "{'$' + inputs.sale_price}"). Null/omitted renders nothing. A result containing \n wraps as a multi-line paragraph.
hide* | show | shrink. shrink only applies to single-line text.
image
Key
Required
Type
Meaning
source.asset
no
string
Path relative to the project folder (e.g. "assets/logo.png").
source.field
no
string
Field id - value is a file path or base64 PNG. Exactly one of source.asset/source.field is normally set.
fit
no
string
contain* | fill | cover | none.
A missing asset or unfilled field omits the block, not an error.
box
Key
Required
Type
Meaning
fill_color
no
string
Hex, or omitted for no fill.
border_color
no
string
Hex, or omitted for no border.
border_width_mm
no
number
Default 0.
border_radius_mm
no
number
Default 0.
signature
Key
Required
Type
Meaning
field
yes
string
A signature-type field's id.
fit
no
string
contain* | fill | cover | none.
qr
Key
Required
Type
Meaning
data
no
string
Same template syntax as text. Empty/omitted omits the block.
color
no
string
Hex module color. Default #000000.
background_color
no
string
Hex, or omitted for transparent.
grid
Key
Required
Type
Meaning
columns
yes
int
Cells per row.
data
no
string
Bare JS expression (no {...} wrapper) evaluating to an array. Each element is one cell; wraps to a new row every columns elements. A cell is either a literal value or an object with a text key plus any style overrides below. data wins over source_field/column_keys when both are set.
column_widths
no
array of number
Relative weights, one per column (e.g. [3, 1]). Omitted = equal widths.
min_rows / max_rows
no
int
No default bound - row count is purely content-driven unless set.
source_field
no
string
Declarative alternative to data: a repeating-group field id, flattened into cells using column_keys.
column_keys
no
array of string
Used with source_field - one repeating-group sub-field key per column.
style (grid-level default) and a per-cell object both take these keys - note real
CSS names, hyphenated, not this app's usual snake_case:
A cell that sets this gets its own border box instead of the shared grid line.
border-width
number
mm. Default 0.
A grid never splits across pages and is never clipped to its nominal height_mm - it
grows to fit its content. Full usage notes and examples: Block Types
Reference, Generating Grid
Data.
Constraints
Every block id must be unique across every partial actually included in one
generation run - not just within a single file.