SliteML Reference

SliteML is Slite's hybrid format combining standard Markdown with XML tags. It gives humans, APIs, and AI models a compact, readable syntax to create and edit rich documents without losing structure.

Why SliteML?

Standard Markdown is excellent for simple text formatting, but it cannot natively represent modern collaborative workspace features:
  • Rich block containers : Callouts, collapsible sections, and multi-column layouts.
  • Structured databases : In-document tables with typed columns (selects, dates, user references).
  • Workspace integrations : Interactive doc cards ( <note-link> ), user mentions ( <mention> ), and comment anchors ( <comment> ).
  • Granular block addressing : Stable block IDs that enable surgical range replacements and targeted edits without rewriting the entire document.
While JSON document ASTs (like ProseMirror) are too verbose and token-heavy for AI workflows, and raw HTML is messy, SliteML provides the optimal hybrid: clean Markdown for natural text flow and lightweight XML tags for structural components.


Block Identity & Addressing

Slite documents are composed of blocks. When reading a document, blocks carry trailing block ID annotations:
Welcome to the team! {/* #block-abc123 */}
  • Reading : Use block IDs to anchor targeted modifications ( modifyRange , appendBlocks , removeBlocks ).
  • Writing : Omit block IDs when inserting new content — Slite automatically assigns IDs on save.


Full SliteML Reference

Structural & Container Blocks

Tag
Syntax & Attributes
Description & Notes
<callout>
<callout type="note|tip|warning|caution">
Highlighted callout box. Markdown works inside.
<collapsible>
<collapsible>\nHeader text\nBody...\n</collapsible>
Expandable toggle accordion. First line is header title.
<columns>
<columns>\n<column width="50">...</column>\n<column width="50">...</column>\n</columns>
Multi-column layout with percentage widths.
<code-block>
<code-block language="typescript"> <code-line>...</code-line> </code-block>
Syntax-highlighted code block with literal text lines.
<database>
<database version="2" title="...">\n<columns>...</columns>\n<records>...</records>\n</database>
In-document structured table/database with typed columns.
<separator></separator>
<separator></separator>
Horizontal visual divider line.
Element
Syntax
Description & Behavior
<note-link>
<note-link note-id="..." title="...">text</note-link>
Rich Slite doc preview card with status and title. Always use this instead of <a> for workspace docs.
<a>
<a url="https://...">text</a>
External hyperlink (non-Slite URLs).
<mention>
<mention user-id="..." name="...">@Name</mention>
Interactive user mention tag.
<comment>
<comment id="threadId">text</comment>
Anchors inline comment threads. Must be preserved during edits.
<mark>
<mark color="yellow|blue|green|pink|purple">text</mark>
Background highlight color.
<colored>
<colored color="red|blue|grey|...">text</colored>
Foreground text color.
<u>
<u>underlined text</u>
Underline text styling.
Column Type
Column Definition
Record Field Syntax
text
<column key="col" name="Col" type="text"></column>
<field columnKey="col"><content>Markdown / rich text</content></field>
select / multi-select
<column key="st" name="Status" type="select">\n <option key="done" label="Done" bgColor="#BBF7D0"></option>\n</column>
<field columnKey="st" options="done"></field> (comma-separated for multi-select)
date
<column key="dt" name="Date" type="date"></column>
<field columnKey="dt">YYYY-MM-DD</field>
number
<column key="num" name="Count" type="number"></column>
<field columnKey="num">42</field>
todo
<column key="chk" name="Done?" type="todo"></column>
<field columnKey="chk">true</field> or false
link
<column key="lk" name="URL" type="link"></column>
<field columnKey="lk">https://...</field>
users
<column key="usr" name="Assignee" type="users"></column>
<field columnKey="usr">[{"id":"...","displayName":"..."}]</field>
notes
<column key="ref" name="Related Doc" type="notes"></column>
<field columnKey="ref">[{"id":"...","title":"..."}]</field>