Coordinate versions
Versions are independent. SDK 4.1.0 intentionally changes the
api.triggerJob calling contract to the native explicit trigger envelope. Published SDK 4.0.0 keeps its original wire contract on the new platform; review callers before upgrading their package. Existing hosted revisions keep their recorded SDK until redeployed. New hosted Components use the exact platform-supported SDK version.
For CLI-managed automation, see Single, Batch and Debounce manifests, including how to preserve a target’s execution mode during synchronization.
Separate template values from triggers
Configure execution grouping on the Job Template, not the Event subscription. BATCH/DEBOUNCE collect Event, Schedule, manual and low-code/REST triggers together within matching Job configuration and template-input boundaries. Different authorized callers and Assistant conversations can join one Job. The shared executor comes from the Job account, then the instance Jobs policy, then the established instance Job account or System. Each trigger retains its initiating account and origin.api.triggerJobs still returns one ID per item, but IDs may repeat when items join one group.
Job Template input remains in api.input().templateInputs. Event and Schedule configuration supplies input on its own trigger and no longer overlays template values. Remove inputMode from managed definitions and update Components that depended on override, deep_override or replace.
Native low-code and SDK 4.1.0 use an explicit envelope:
EXECUTION trigger. During migration, handle queued Jobs and retries that still use the previous shape. Do not replay business side effects just to convert inputs.
Manual Run separates Template inputs from Triggers. The API accepts inputs and triggers together; trigger is shorthand for one entry. Use either trigger or triggers, never both. The explicit trigger array has a 1 MB serialized limit and no separate item-count limit. The platform assigns source identities.
Use api.triggerJobs(items, { idempotencyKey }) for atomic direct Job admission in pages of at most 100 items and 5 MiB. The SDK now separates a 256 KiB packing target from its 12 MiB hard frame ceiling, allowing a full Event message plus its envelope. Review producer backpressure and SDK batching when publishing from loops.
Read retained triggers
Small trigger sets are resolved before the Component starts and carrydeferred: false. Larger sets expose ordered references with deferred: true. Native Components can use api.walkTriggers() for either shape:
Verify previews and compressed files
Database lists use bounded JSON previews. Click any value or the remaining-item count to open the complete cell. Low-code reads with explicit JSON columns and exports continue returning full values. Gzip uploads and exports are opt-in. Supported native readers decode the inner format; binary downloads preserve the archive. Read preparation can be synchronous or queued, with source access applying to prepared copies. See Storage and uploads.Keep dashboard layout choices optional
Upgrading to 1.9 does not require compacting existing dashboards. Full available width remains the default; preserve saved panel geometry. Wide charts and tables should normally retain that space.- Use
EMPTYwithwidthto reserve intentional space or align cells within a row; a named EMPTY can host an inline destination. Extra empty rows add height, and every spacer consumes a cell slot. - Use
layout.density: 'compact'when denser control spacing is wanted. - Use
layout.surface: 'blank'when the surrounding surface already supplies the inner padding. - Set
layout.maxWidthonly when a small utility needs a width cap. It does not resize the outer dashboard panel.

