Skip to main content
Use a reader to display a message, document or compact summary without turning everything into a Markdown heading. Set presentation on the existing TEXT cell; the matrix and declarative action contract stay the same. Editing belongs in inputs or the message composer.

Choose a presentation

Omitting presentation.kind preserves the ordinary TEXT renderer. A presentation does not execute arbitrary browser code, load a custom component or grant access to the referenced data.

Reader configuration

Copy and fullscreen are separate options. Ordinary TEXT retains its existing renderer defaults; explicit readers enable only the controls configured for their kind. A cell’s height remains a cell field, outside presentation.

Isolated HTML

HTML is sanitized and displayed in a sandboxed document. Scripts, inline event handlers, forms, buttons, embedded frames, navigation and content-supplied CSS are removed. The reader applies its own light/dark presentation. It is not a browser page and has no action bridge to the host. Put real controls outside the HTML and use declared actions. Remote HTML images require both allowImages: true and the operator’s Load images choice. Changing the displayed message clears that choice. Do not interpret blocked images as an empty message or missing attachment. For cid: images, the authorized source supplies normalized lowercase content IDs in cidImages with fresh signed Storage URLs. Do not copy customer-provided URLs into that map. The separate image reader displays its permitted source directly. Use it for deliberate images or screenshots, not unsolicited tracking images taken from email HTML. It accepts HTTPS URLs and base64 PNG/JPEG/GIF/WebP data URLs. fullscreen: true uses the image zoom surface.

Read-only code and structured summaries

The code reader supports plaintext, json, html, css, javascript, typescript, markdown and sql. It displays source and never executes it:
Properties use data: {key: value} and display scalar labels. Lists use strings or records such as {id, label}; a record can also supply title. Give records stable IDs before enabling draggable. Reordering emits ordered string keys through on.change; it is local until the registered action saves the new order. Keyboard move-up/move-down controls provide the same operation as dragging.

Authorized file results

A TEXT attachment reader uses presentation: {kind: 'attachments'} and data records with key (or id), name, contentType, optional size, state and isInline. Bind on.rowClick to OPEN_FILE and pass an attachment identity to a registered read-only widgetTargets reader. The reader must authorize the caller, the selected record relationship and Storage metadata before returning this shape: The file target returns this object, not a cell matrix. Its configured result element selects the object in a multi-element Component. The host validates the signed-link shape and expiration, and uses one file panel with image/PDF preview where supported. Image zoom and download acquire fresh links through the authenticated Storage API. A URL found in customer HTML or a table row does not establish file permission. For example, this action fragment belongs on an attachment cell after registering attachmentReader:
The input ID is a lookup key for the authorized reader. Do not use clicked text as a signed URL. An unavailable, expired or denied file remains an error; it must not silently become an unrestricted link.
Last modified on November 12, 2026