Rich Text Format
How biographies and descriptions are encoded (Fleather / Parchment Delta).
Rich-text fields - such as a speaker’s biography - are stored as a Fleather / Parchment Delta, serialized as a JSON string. This is a Quill-compatible Delta: an array of ops, where each op has an insert (the text) and optional attributes (the formatting on that run).
Attributes use short keys (for example b for bold). Use the short keys listed below when you send rich text through the API.
[
{ "insert": "About Jane" },
{ "insert": "\n", "attributes": { "heading": 2 } },
{ "insert": "Jane is a " },
{ "insert": "keynote speaker", "attributes": { "b": true } },
{ "insert": " - see her ", "attributes": {} },
{ "insert": "profile", "attributes": { "a": "https://example.com" } },
{ "insert": ".\n" }
]
Attributes
Attributes are attached to the text run they format (inline styles) or, for block styles, to the newline (\n) that ends the line.
| Key | Type | Kind | Meaning |
|---|---|---|---|
b |
boolean | inline | Bold |
i |
boolean | inline | Italic |
u |
boolean | inline | Underline |
s |
boolean | inline | Strikethrough |
a |
string | inline | Link - the value is the URL |
fg |
integer | inline | Text colour, as a 32-bit ARGB integer (e.g. 0xFFCC0000) |
alignment |
string | block | left / right / center / justify |
heading |
integer | block | Heading level 1-6 (see below) |
block |
string | block | ul (bullet list) or ol (ordered list); attach to each line’s trailing \n |
Plain strings are also accepted - a field that is not valid Delta JSON is treated as plain text - but it will render without any formatting. An empty Delta ([] or one containing only newlines) is treated as empty.
Heading levels
Headings use the heading attribute (values 1-6) on the line’s trailing newline. Event Vault gives the levels distinct visual roles rather than a plain descending scale:
| Level | Renders as |
|---|---|
1 |
Heading (largest) |
2 |
Heading |
3 |
Heading |
4 |
Heading at body-text size - a subtle heading, same size as normal text |
5 |
Grey sub-text - muted secondary line |
6 |
Red warning text - a callout, sized between heading 2 and heading 3 |
Example with block styles
[
{ "insert": "Heads up: schedule is provisional" },
{ "insert": "\n", "attributes": { "heading": 6 } },
{ "insert": "Focus areas" },
{ "insert": "\n", "attributes": { "heading": 5 } },
{ "insert": "Machine learning" },
{ "insert": "\n", "attributes": { "block": "ul" } },
{ "insert": "Robotics" },
{ "insert": "\n", "attributes": { "block": "ul" } }
]
This is the same format used by the in-app profile and the console editor, so content you send through the API is rendered wherever the field appears in Event Vault.