Skip to main content

The catalog of visual components

Every UI plugin, and the visual components each renders, by the name a surface gives them. A component no UI plugin renders is not in the catalog: an Appspec that names one is refused (see UI).

UI pluginRegistered asRenderersCatalogComponents
a2ui-surface (Surfaces in the conversation)@datalayer/loop-plugin-a2ui-surfacea2uia2ui/v0.925
a2ui-view (Surface view)@datalayer/loop-plugin-a2uia2uiโ€”none of its own
agentspecs (Agent picker)@datalayer/loop-plugin-agentspecsโ€”โ€”none of its own
app-activity (Activity)@datalayer/loop-plugin-app-activity (one per application)โ€”โ€”none of its own
app-components (Your own components)@datalayer/loop-plugin-app-components (one per application)a2uiโ€”none of its own
app-computer (Computer)@datalayer/loop-plugin-app-computer (one per application)โ€”โ€”none of its own
app-elements (Side panel and pages)@datalayer/loop-plugin-app-elementsa2uiโ€”none of its own
app-page (Application page)@datalayer/loop-plugin-app-page (one per application)a2ui, mcp-appsโ€”none of its own
app-rules (Rules and approvals)@datalayer/loop-plugin-app-rules (one per application)โ€”โ€”none of its own
canvas-blocks (Blocks)@datalayer/loop-plugin-ui (one per ui)โ€”โ€”none of its own
canvas-parts (Parts)@datalayer/loop-plugin-parts (one per source)โ€”โ€”none of its own
chat (Chat)@datalayer/loop-plugin-chatโ€”โ€”none of its own
chat-extras (Banner and status)@datalayer/loop-plugin-chat-extrasโ€”โ€”none of its own
chat-header (Chat title bar)@datalayer/loop-plugin-chat-headerโ€”โ€”none of its own
chat-view (Chat button)@datalayer/loop-plugin-chat-viewโ€”โ€”none of its own
commands (Command palette)@datalayer/loop-plugin-commandsโ€”โ€”none of its own
document (Document)@datalayer/loop-plugin-documentโ€”โ€”none of its own
document-toolbar (Document toolbar)@datalayer/loop-plugin-document-toolbarโ€”โ€”none of its own
document-view (Document button)@datalayer/loop-plugin-document-viewโ€”โ€”none of its own
input-prompt (Composer)@datalayer/loop-plugin-input-promptโ€”โ€”none of its own
models (Models)@datalayer/loop-plugin-modelsโ€”โ€”none of its own
notebook (Notebook)@datalayer/loop-plugin-notebookโ€”โ€”none of its own
notebook-toolbar (Notebook toolbar)@datalayer/loop-plugin-notebook-toolbarโ€”โ€”none of its own
notebook-view (Notebook button)@datalayer/loop-plugin-notebook-viewโ€”โ€”none of its own
page-layout (Page layout)@datalayer/loop-plugin-page-layoutโ€”โ€”none of its own
pap-sign-in (Sign in at a company)@datalayer/loop-plugin-pap-sign-inmcp-uiโ€”none of its own
prompt (Floating composer)@datalayer/loop-plugin-promptโ€”โ€”none of its own
spreadsheet (Spreadsheet)@datalayer/loop-plugin-spreadsheetโ€”โ€”none of its own
spreadsheet-view (Spreadsheet button)@datalayer/loop-plugin-spreadsheet-viewโ€”โ€”none of its own
subagent-activity (Delegated work)@datalayer/loop-plugin-subagent-activityโ€”โ€”none of its own
window-frame (Window)@datalayer/loop-plugin-window-frameโ€”โ€”none of its own

Surfaces in the conversation (a2ui-surface)โ€‹

Forms, tables and cards the agent draws in the conversation; what you fill in goes back to it.

Catalog a2ui/v0.9: 18 standard components, named and drawn as the protocol says (A2UI), and 7 of Datalayer's own. Every one has a version and its properties as a JSON Schema of the catalog's: what a builder sets, the Canvas draws a properties form from, and Python calls typed.

IdNameCategoryVersionStandardWhat it is for
Text๐Ÿ”ค Texttext0.9.0yesWords on the page: a heading, a paragraph, the answer โ€” plain or Markdown.
Image๐Ÿ–ผ๏ธ Imagemedia0.9.0yesA picture: a chart rendered elsewhere, a logo, a photo.
Icon๐Ÿ”ฃ Iconmedia0.9.0yesA small drawing that says what something is: a check, a warning, a link.
Video๐ŸŽฌ Videomedia0.9.0yesA film played in place.
AudioPlayer๐Ÿ”Š Audiomedia0.9.0yesA sound played in place: a recording, a summary read aloud.
Rowโžก๏ธ Rowlayout0.9.0yesChildren side by side, left to right.
Columnโฌ‡๏ธ Columnlayout0.9.0yesChildren one under the other.
List๐Ÿ“ƒ Listlayout0.9.0yesItems one after the other, each drawn by the same children: results, alternatives, steps.
Card๐Ÿ—‚๏ธ Cardlayout0.9.0yesA framed group: what belongs together, set apart.
Tabs๐Ÿ“‘ Tabslayout0.9.0yesSeveral views of one place, one shown at a time.
Dividerโž– Dividerlayout0.9.0yesA line between what comes before and after.
Modal๐ŸชŸ Modallayout0.9.0yesA window over the page, opened by a trigger: details, a confirmation.
Button๐Ÿ”˜ Buttonaction0.9.0yesAn action the person takes: send, run, approve. One filled button per screen.
TextFieldโŒจ๏ธ Inputinput0.9.0yesA field the person types in: a word, a sentence, a number, a date.
CheckBoxโ˜‘๏ธ Checkboxinput0.9.0yesYes or no: an option on or off, a consent given.
ChoicePicker๐Ÿ”ฝ Selectinput0.9.0yesOne choice, or several, among options the builder lists or the data gives.
Slider๐ŸŽš๏ธ Sliderinput0.9.0yesA number chosen along a range: a weight, a budget, a threshold.
DateTimeInput๐Ÿ“… Date and timeinput0.9.0yesA date, a time, or both, chosen from a calendar.
Table๐Ÿ“‹ Tabledata1.0.0noRows the application found or keeps, with the columns the builder chooses.
Chart๐Ÿ“Š Chartdata1.0.0noNumbers drawn: a bar, a line, a scatter of what the application measured.
FileUpload๐Ÿ“Ž File uploadinput1.0.0noA file the person gives the application: a document to read, a sheet to check.
Chat๐Ÿ’ฌ Chatconversation1.0.0noThe conversation with the application: its welcome, its starters, the composer.
Evidence๐Ÿ”Ž Evidencedata1.0.0noWhat an answer rests on: the sources opened, the passages cited, each with its link.
Form๐Ÿงพ Forminput1.1.0noSeveral fields asked at once, from a JSON Schema, checked as they are filled and again when they arrive (drawn with @datalayer/primer-rjsf).
Download๐Ÿ“„ File to downloaddata1.0.0noA file the application gives, to save: a report, a sheet, an export โ€” by its link, or the file itself as a data: URL.

Surfaces in the conversation: standard componentsโ€‹

Textโ€‹

๐Ÿ”ค Text ยท text ยท version 0.9.0 โ€” Words on the page: a heading, a paragraph, the answer โ€” plain or Markdown.

PropertyTypeMeaningDefault
text (required)textWords. What it says, plain or in simple Markdown.โ€”
varianth1 | h2 | h3 | h4 | h5 | caption | bodyStyle. A heading of a level, a caption, or body text."body"

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Words",
"description": "What it says, plain or in simple Markdown."
},
"variant": {
"type": "string",
"title": "Style",
"description": "A heading of a level, a caption, or body text.",
"enum": [
"h1",
"h2",
"h3",
"h4",
"h5",
"caption",
"body"
],
"default": "body"
}
}
}

Imageโ€‹

๐Ÿ–ผ๏ธ Image ยท media ยท version 0.9.0 โ€” A picture: a chart rendered elsewhere, a logo, a photo.

PropertyTypeMeaningDefault
url (required)textAddress. Where the picture is.โ€”
descriptiontextDescription. What it shows, for those who cannot see it.โ€”
fitcontain | cover | fill | none | scaleDownFit. How it is resized to its place."fill"
varianticon | avatar | smallFeature | mediumFeature | largeFeature | headerSize. An icon, an avatar, a feature or a header."mediumFeature"

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Address",
"description": "Where the picture is."
},
"description": {
"type": "string",
"title": "Description",
"description": "What it shows, for those who cannot see it."
},
"fit": {
"type": "string",
"title": "Fit",
"description": "How it is resized to its place.",
"enum": [
"contain",
"cover",
"fill",
"none",
"scaleDown"
],
"default": "fill"
},
"variant": {
"type": "string",
"title": "Size",
"description": "An icon, an avatar, a feature or a header.",
"enum": [
"icon",
"avatar",
"smallFeature",
"mediumFeature",
"largeFeature",
"header"
],
"default": "mediumFeature"
}
}
}

Iconโ€‹

๐Ÿ”ฃ Icon ยท media ยท version 0.9.0 โ€” A small drawing that says what something is: a check, a warning, a link.

PropertyTypeMeaningDefault
name (required)accountCircle | add | arrowBack | arrowForward | attachFile | calendarToday | call | camera | check | close | delete | download | edit | event | error | fastForward | favorite | favoriteOff | folder | help | home | info | locationOn | lock | lockOpen | mail | menu | moreVert | moreHoriz | notificationsOff | notifications | pause | payment | person | phone | photo | play | print | refresh | rewind | search | send | settings | share | shoppingCart | skipNext | skipPrevious | star | starHalf | starOff | stop | upload | visibility | visibilityOff | volumeDown | volumeMute | volumeOff | volumeUp | warningIcon. Which drawing, by its name.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Icon",
"description": "Which drawing, by its name.",
"enum": [
"accountCircle",
"add",
"arrowBack",
"arrowForward",
"attachFile",
"calendarToday",
"call",
"camera",
"check",
"close",
"delete",
"download",
"edit",
"event",
"error",
"fastForward",
"favorite",
"favoriteOff",
"folder",
"help",
"home",
"info",
"locationOn",
"lock",
"lockOpen",
"mail",
"menu",
"moreVert",
"moreHoriz",
"notificationsOff",
"notifications",
"pause",
"payment",
"person",
"phone",
"photo",
"play",
"print",
"refresh",
"rewind",
"search",
"send",
"settings",
"share",
"shoppingCart",
"skipNext",
"skipPrevious",
"star",
"starHalf",
"starOff",
"stop",
"upload",
"visibility",
"visibilityOff",
"volumeDown",
"volumeMute",
"volumeOff",
"volumeUp",
"warning"
]
}
}
}

Videoโ€‹

๐ŸŽฌ Video ยท media ยท version 0.9.0 โ€” A film played in place.

PropertyTypeMeaningDefault
url (required)textAddress. Where the film is.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Address",
"description": "Where the film is."
}
}
}

AudioPlayerโ€‹

๐Ÿ”Š Audio ยท media ยท version 0.9.0 โ€” A sound played in place: a recording, a summary read aloud.

PropertyTypeMeaningDefault
url (required)textAddress. Where the sound is.โ€”
descriptiontextDescription. What it is: a title or a summary.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Address",
"description": "Where the sound is."
},
"description": {
"type": "string",
"title": "Description",
"description": "What it is: a title or a summary."
}
}
}

Rowโ€‹

โžก๏ธ Row ยท layout ยท version 0.9.0 โ€” Children side by side, left to right.

PropertyTypeMeaningDefault
children (required)list of textBlocks. The blocks inside it, by id, left to right.โ€”
justifycenter | end | spaceAround | spaceBetween | spaceEvenly | start | stretchSpacing. How the blocks share the width."start"
alignstart | center | end | stretchAlignment. How the blocks line up top to bottom."stretch"

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"children"
],
"properties": {
"children": {
"type": "array",
"title": "Blocks",
"description": "The blocks inside it, by id, left to right.",
"items": {
"type": "string"
}
},
"justify": {
"type": "string",
"title": "Spacing",
"description": "How the blocks share the width.",
"enum": [
"center",
"end",
"spaceAround",
"spaceBetween",
"spaceEvenly",
"start",
"stretch"
],
"default": "start"
},
"align": {
"type": "string",
"title": "Alignment",
"description": "How the blocks line up top to bottom.",
"enum": [
"start",
"center",
"end",
"stretch"
],
"default": "stretch"
}
}
}

Columnโ€‹

โฌ‡๏ธ Column ยท layout ยท version 0.9.0 โ€” Children one under the other.

PropertyTypeMeaningDefault
children (required)list of textBlocks. The blocks inside it, by id, top to bottom.โ€”
justifystart | center | end | spaceBetween | spaceAround | spaceEvenly | stretchSpacing. How the blocks share the height."start"
aligncenter | end | start | stretchAlignment. How the blocks line up left to right."stretch"

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"children"
],
"properties": {
"children": {
"type": "array",
"title": "Blocks",
"description": "The blocks inside it, by id, top to bottom.",
"items": {
"type": "string"
}
},
"justify": {
"type": "string",
"title": "Spacing",
"description": "How the blocks share the height.",
"enum": [
"start",
"center",
"end",
"spaceBetween",
"spaceAround",
"spaceEvenly",
"stretch"
],
"default": "start"
},
"align": {
"type": "string",
"title": "Alignment",
"description": "How the blocks line up left to right.",
"enum": [
"center",
"end",
"start",
"stretch"
],
"default": "stretch"
}
}
}

Listโ€‹

๐Ÿ“ƒ List ยท layout ยท version 0.9.0 โ€” Items one after the other, each drawn by the same children: results, alternatives, steps.

PropertyTypeMeaningDefault
children (required)list of textBlocks. The blocks inside it, by id, or the template repeated over a list.โ€”
directionvertical | horizontalDirection. One under the other, or side by side."vertical"
alignstart | center | end | stretchAlignment. How the items line up across."stretch"

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"children"
],
"properties": {
"children": {
"type": "array",
"title": "Blocks",
"description": "The blocks inside it, by id, or the template repeated over a list.",
"items": {
"type": "string"
}
},
"direction": {
"type": "string",
"title": "Direction",
"description": "One under the other, or side by side.",
"enum": [
"vertical",
"horizontal"
],
"default": "vertical"
},
"align": {
"type": "string",
"title": "Alignment",
"description": "How the items line up across.",
"enum": [
"start",
"center",
"end",
"stretch"
],
"default": "stretch"
}
}
}

Cardโ€‹

๐Ÿ—‚๏ธ Card ยท layout ยท version 0.9.0 โ€” A framed group: what belongs together, set apart.

PropertyTypeMeaningDefault
child (required)textBlock. The one block inside it, by id; a Row or Column for several.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"child"
],
"properties": {
"child": {
"type": "string",
"title": "Block",
"description": "The one block inside it, by id; a Row or Column for several."
}
}
}

Tabsโ€‹

๐Ÿ“‘ Tabs ยท layout ยท version 0.9.0 โ€” Several views of one place, one shown at a time.

PropertyTypeMeaningDefault
tabs (required)list of mapping (minItems 1)Tabs. Each tab's title and the block it shows, by id.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"tabs"
],
"properties": {
"tabs": {
"type": "array",
"title": "Tabs",
"description": "Each tab's title and the block it shows, by id.",
"minItems": 1,
"items": {
"type": "object",
"required": [
"title",
"child"
],
"properties": {
"title": {
"type": "string"
},
"child": {
"type": "string"
}
}
}
}
}
}

Dividerโ€‹

โž– Divider ยท layout ยท version 0.9.0 โ€” A line between what comes before and after.

PropertyTypeMeaningDefault
axishorizontal | verticalDirection. Across or up and down."horizontal"

Its properties, as a JSON Schema:

{
"type": "object",
"properties": {
"axis": {
"type": "string",
"title": "Direction",
"description": "Across or up and down.",
"enum": [
"horizontal",
"vertical"
],
"default": "horizontal"
}
}
}

๐ŸชŸ Modal ยท layout ยท version 0.9.0 โ€” A window over the page, opened by a trigger: details, a confirmation.

PropertyTypeMeaningDefault
trigger (required)textOpened by. The block that opens it, by id: a button.โ€”
content (required)textShows. The block shown inside it, by id.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"trigger",
"content"
],
"properties": {
"trigger": {
"type": "string",
"title": "Opened by",
"description": "The block that opens it, by id: a button."
},
"content": {
"type": "string",
"title": "Shows",
"description": "The block shown inside it, by id."
}
}
}

Buttonโ€‹

๐Ÿ”˜ Button ยท action ยท version 0.9.0 โ€” An action the person takes: send, run, approve. One filled button per screen.

PropertyTypeMeaningDefault
child (required)textLabel. The block on it, by id: a Text for its words.โ€”
variantdefault | primary | borderlessStyle. Primary for the one main action, borderless for a link."default"
action (required)mappingDoes. What pressing it sends, by name, with what it reads.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"child",
"action"
],
"properties": {
"child": {
"type": "string",
"title": "Label",
"description": "The block on it, by id: a Text for its words."
},
"variant": {
"type": "string",
"title": "Style",
"description": "Primary for the one main action, borderless for a link.",
"enum": [
"default",
"primary",
"borderless"
],
"default": "default"
},
"action": {
"type": "object",
"title": "Does",
"description": "What pressing it sends, by name, with what it reads."
}
}
}

TextFieldโ€‹

โŒจ๏ธ Input ยท input ยท version 0.9.0 โ€” A field the person types in: a word, a sentence, a number, a date.

PropertyTypeMeaningDefault
label (required)textLabel. What the person reads beside it.โ€”
valuetextValue. What is typed in it.โ€”
variantlongText | number | shortText | obscuredKind. A short or long text, a number, or hidden as typed."shortText"
validationRegexptextPattern. A regular expression what is typed must match.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"label"
],
"properties": {
"label": {
"type": "string",
"title": "Label",
"description": "What the person reads beside it."
},
"value": {
"type": "string",
"title": "Value",
"description": "What is typed in it."
},
"variant": {
"type": "string",
"title": "Kind",
"description": "A short or long text, a number, or hidden as typed.",
"enum": [
"longText",
"number",
"shortText",
"obscured"
],
"default": "shortText"
},
"validationRegexp": {
"type": "string",
"title": "Pattern",
"description": "A regular expression what is typed must match."
}
}
}

CheckBoxโ€‹

โ˜‘๏ธ Checkbox ยท input ยท version 0.9.0 โ€” Yes or no: an option on or off, a consent given.

PropertyTypeMeaningDefault
label (required)textLabel. What the person reads beside it.โ€”
value (required)true or falseValue. Whether it is ticked.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"label",
"value"
],
"properties": {
"label": {
"type": "string",
"title": "Label",
"description": "What the person reads beside it."
},
"value": {
"type": "boolean",
"title": "Value",
"description": "Whether it is ticked."
}
}
}

ChoicePickerโ€‹

๐Ÿ”ฝ Select ยท input ยท version 0.9.0 โ€” One choice, or several, among options the builder lists or the data gives.

PropertyTypeMeaningDefault
labeltextLabel. What the person reads above the options.โ€”
variantmultipleSelection | mutuallyExclusiveChoice. One of the options, or several."mutuallyExclusive"
options (required)list of mappingOptions. What may be chosen: the words read and the value sent.โ€”
value (required)list of textValue. The values chosen.โ€”
displayStylecheckbox | chipsShown as. Checkboxes or chips."checkbox"
filterabletrue or falseSearchable. A search field above the options.false

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"options",
"value"
],
"properties": {
"label": {
"type": "string",
"title": "Label",
"description": "What the person reads above the options."
},
"variant": {
"type": "string",
"title": "Choice",
"description": "One of the options, or several.",
"enum": [
"multipleSelection",
"mutuallyExclusive"
],
"default": "mutuallyExclusive"
},
"options": {
"type": "array",
"title": "Options",
"description": "What may be chosen: the words read and the value sent.",
"items": {
"type": "object",
"required": [
"label",
"value"
],
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
},
"value": {
"type": "array",
"title": "Value",
"description": "The values chosen.",
"items": {
"type": "string"
}
},
"displayStyle": {
"type": "string",
"title": "Shown as",
"description": "Checkboxes or chips.",
"enum": [
"checkbox",
"chips"
],
"default": "checkbox"
},
"filterable": {
"type": "boolean",
"title": "Searchable",
"description": "A search field above the options.",
"default": false
}
}
}

Sliderโ€‹

๐ŸŽš๏ธ Slider ยท input ยท version 0.9.0 โ€” A number chosen along a range: a weight, a budget, a threshold.

PropertyTypeMeaningDefault
labeltextLabel. What the person reads beside it.โ€”
minnumberLeast. The smallest value.0
max (required)numberMost. The largest value.โ€”
value (required)numberValue. The value chosen.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"value",
"max"
],
"properties": {
"label": {
"type": "string",
"title": "Label",
"description": "What the person reads beside it."
},
"min": {
"type": "number",
"title": "Least",
"description": "The smallest value.",
"default": 0
},
"max": {
"type": "number",
"title": "Most",
"description": "The largest value."
},
"value": {
"type": "number",
"title": "Value",
"description": "The value chosen."
}
}
}

DateTimeInputโ€‹

๐Ÿ“… Date and time ยท input ยท version 0.9.0 โ€” A date, a time, or both, chosen from a calendar.

PropertyTypeMeaningDefault
value (required)textValue. The date or time chosen, in ISO 8601.โ€”
enableDatetrue or falseDate. A date may be chosen.false
enableTimetrue or falseTime. A time may be chosen.false
mintextEarliest. The earliest that may be chosen, in ISO 8601.โ€”
maxtextLatest. The latest that may be chosen, in ISO 8601.โ€”
labeltextLabel. What the person reads beside it.โ€”

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"title": "Value",
"description": "The date or time chosen, in ISO 8601."
},
"enableDate": {
"type": "boolean",
"title": "Date",
"description": "A date may be chosen.",
"default": false
},
"enableTime": {
"type": "boolean",
"title": "Time",
"description": "A time may be chosen.",
"default": false
},
"min": {
"type": "string",
"title": "Earliest",
"description": "The earliest that may be chosen, in ISO 8601."
},
"max": {
"type": "string",
"title": "Latest",
"description": "The latest that may be chosen, in ISO 8601."
},
"label": {
"type": "string",
"title": "Label",
"description": "What the person reads beside it."
}
}
}

Surfaces in the conversation: Datalayer's own componentsโ€‹

Tableโ€‹

๐Ÿ“‹ Table ยท data ยท version 1.0.0 โ€” Rows the application found or keeps, with the columns the builder chooses.

PropertyTypeMeaningDefault
titletextTitle. What the table is, above it.โ€”
columns (required)list of text (minItems 1)Columns. The columns, in order.โ€”
page_sizeinteger (minimum 1, maximum 500)Rows per page. How many rows show at once.20
selectabletrue or falseSelectable. A row may be chosen, and its choice sent.false
  • Shows: rows.
  • Sends: selected.
  • Events: select.

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"columns"
],
"properties": {
"title": {
"type": "string",
"title": "Title",
"description": "What the table is, above it."
},
"columns": {
"type": "array",
"title": "Columns",
"description": "The columns, in order.",
"minItems": 1,
"items": {
"type": "string"
}
},
"page_size": {
"type": "integer",
"title": "Rows per page",
"description": "How many rows show at once.",
"minimum": 1,
"maximum": 500,
"default": 20
},
"selectable": {
"type": "boolean",
"title": "Selectable",
"description": "A row may be chosen, and its choice sent.",
"default": false
}
}
}

An example, valid against it:

title: Runs
columns:
- model
- pass rate
- cost

Chartโ€‹

๐Ÿ“Š Chart ยท data ยท version 1.0.0 โ€” Numbers drawn: a bar, a line, a scatter of what the application measured.

PropertyTypeMeaningDefault
titletextTitle. What the chart shows, above it.โ€”
kind (required)bar | line | scatter | areaKind. How the numbers are drawn."bar"
x (required)textAcross. The field along the bottom.โ€”
y (required)textUp. The field measured.โ€”
seriestextSeries. A field whose values are drawn apart.โ€”
  • Shows: points.
  • Sends: nothing.
  • Events: nothing.

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"kind",
"x",
"y"
],
"properties": {
"title": {
"type": "string",
"title": "Title",
"description": "What the chart shows, above it."
},
"kind": {
"type": "string",
"title": "Kind",
"description": "How the numbers are drawn.",
"enum": [
"bar",
"line",
"scatter",
"area"
],
"default": "bar"
},
"x": {
"type": "string",
"title": "Across",
"description": "The field along the bottom."
},
"y": {
"type": "string",
"title": "Up",
"description": "The field measured."
},
"series": {
"type": "string",
"title": "Series",
"description": "A field whose values are drawn apart."
}
}
}

An example, valid against it:

kind: bar
x: model
y: pass rate

FileUploadโ€‹

๐Ÿ“Ž File upload ยท input ยท version 1.0.0 โ€” A file the person gives the application: a document to read, a sheet to check.

PropertyTypeMeaningDefault
label (required)textLabel. What the person reads beside it.โ€”
acceptlist of textAccepts. The kinds of file it takes, by extension.โ€”
multipletrue or falseSeveral. More than one file at once.false
max_mbinteger (minimum 1, maximum 500)Largest (MB). The largest file it takes.25
  • Shows: nothing.
  • Sends: files.
  • Events: upload.

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"label"
],
"properties": {
"label": {
"type": "string",
"title": "Label",
"description": "What the person reads beside it."
},
"accept": {
"type": "array",
"title": "Accepts",
"description": "The kinds of file it takes, by extension.",
"items": {
"type": "string",
"pattern": "^\\.[a-z0-9]+$"
}
},
"multiple": {
"type": "boolean",
"title": "Several",
"description": "More than one file at once.",
"default": false
},
"max_mb": {
"type": "integer",
"title": "Largest (MB)",
"description": "The largest file it takes.",
"minimum": 1,
"maximum": 500,
"default": 25
}
}
}

An example, valid against it:

label: The contract
accept:
- .pdf
- .docx

Chatโ€‹

๐Ÿ’ฌ Chat ยท conversation ยท version 1.0.0 โ€” The conversation with the application: its welcome, its starters, the composer.

PropertyTypeMeaningDefault
welcometextWelcome. What it says before anyone writes.โ€”
placeholdertextComposer hint. Shown in the composer while it is empty."Ask anything"
starterslist of text (maxItems 6)Starters. Questions offered before the first message.โ€”
show_toolstrue or falseShows its tools. The tool calls are shown as they happen.true
  • Shows: messages.
  • Sends: message.
  • Events: send.

Its properties, as a JSON Schema:

{
"type": "object",
"properties": {
"welcome": {
"type": "string",
"title": "Welcome",
"description": "What it says before anyone writes."
},
"placeholder": {
"type": "string",
"title": "Composer hint",
"description": "Shown in the composer while it is empty.",
"default": "Ask anything"
},
"starters": {
"type": "array",
"title": "Starters",
"description": "Questions offered before the first message.",
"maxItems": 6,
"items": {
"type": "string"
}
},
"show_tools": {
"type": "boolean",
"title": "Shows its tools",
"description": "The tool calls are shown as they happen.",
"default": true
}
}
}

An example, valid against it:

welcome: Ask me to research anything.
starters:
- What changed in Python 3.13?

Evidenceโ€‹

๐Ÿ”Ž Evidence ยท data ยท version 1.0.0 โ€” What an answer rests on: the sources opened, the passages cited, each with its link.

PropertyTypeMeaningDefault
titletextTitle. Above the sources."Sources"
show_passagestrue or falseShows passages. Each source with the passage cited from it.true
max_itemsinteger (minimum 1, maximum 50)Most shown. How many sources show before more.5
  • Shows: sources.
  • Sends: nothing.
  • Events: open.

Its properties, as a JSON Schema:

{
"type": "object",
"properties": {
"title": {
"type": "string",
"title": "Title",
"description": "Above the sources.",
"default": "Sources"
},
"show_passages": {
"type": "boolean",
"title": "Shows passages",
"description": "Each source with the passage cited from it.",
"default": true
},
"max_items": {
"type": "integer",
"title": "Most shown",
"description": "How many sources show before *more*.",
"minimum": 1,
"maximum": 50,
"default": 5
}
}
}

An example, valid against it:

title: What this rests on

Formโ€‹

๐Ÿงพ Form ยท input ยท version 1.1.0 โ€” Several fields asked at once, from a JSON Schema, checked as they are filled and again when they arrive (drawn with @datalayer/primer-rjsf).

PropertyTypeMeaningDefault
titletextTitle. What the form is for, above it.โ€”
schema (required)mappingFields. The JSON Schema of what is asked: its fields, their types, what is required.โ€”
uimappingHow its fields are drawn. By field name, the ui: options @datalayer/primer-rjsf reads (a uiSchema): ui:widget one of select, radio, range, updown, switch, checkbox, text, textarea, date, checkboxes, tags; each field's own widget when unsaid.โ€”
submit_labeltextSend button. The words on its button."Send"
  • Shows: values.
  • Sends: values.
  • Events: submit.

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"schema"
],
"properties": {
"title": {
"type": "string",
"title": "Title",
"description": "What the form is for, above it."
},
"schema": {
"type": "object",
"title": "Fields",
"description": "The JSON Schema of what is asked: its fields, their types, what is required."
},
"ui": {
"type": "object",
"title": "How its fields are drawn",
"description": "By field name, the ui: options @datalayer/primer-rjsf reads (a uiSchema): ui:widget one of select, radio, range, updown, switch, checkbox, text, textarea, date, checkboxes, tags; each field's own widget when unsaid."
},
"submit_label": {
"type": "string",
"title": "Send button",
"description": "The words on its button.",
"default": "Send"
}
}
}

An example, valid against it:

title: The quote
schema:
type: object
required:
- seats
properties:
seats:
type: integer
minimum: 1
title: Seats

Downloadโ€‹

๐Ÿ“„ File to download ยท data ยท version 1.0.0 โ€” A file the application gives, to save: a report, a sheet, an export โ€” by its link, or the file itself as a data: URL.

PropertyTypeMeaningDefault
name (required)textFile name. What the file is saved as, with its extension.โ€”
url (required)textLink. Where the file is: an http(s) link, or the file itself as a data: URL.โ€”
media_typetextKind. Its media type (text/csv, application/pdfโ€ฆ), said beside its name.โ€”
sizeinteger (minimum 0)Size (bytes). How large it is, said beside its name.โ€”
descriptiontextDescription. A line under its name.โ€”
  • Shows: nothing.
  • Sends: nothing.
  • Events: download.

Its properties, as a JSON Schema:

{
"type": "object",
"required": [
"name",
"url"
],
"properties": {
"name": {
"type": "string",
"title": "File name",
"description": "What the file is saved as, with its extension.",
"minLength": 1
},
"url": {
"type": "string",
"title": "Link",
"description": "Where the file is: an http(s) link, or the file itself as a data: URL.",
"pattern": "^(https?://|data:)"
},
"media_type": {
"type": "string",
"title": "Kind",
"description": "Its media type (text/csv, application/pdfโ€ฆ), said beside its name."
},
"size": {
"type": "integer",
"title": "Size (bytes)",
"description": "How large it is, said beside its name.",
"minimum": 0
},
"description": {
"type": "string",
"title": "Description",
"description": "A line under its name."
}
}
}

An example, valid against it:

name: totals.csv
url: data:text/csv;base64,bW9udGgsdG90YWwKSmFuLDEyMDAK
media_type: text/csv
size: 21
description: The month's totals.