The editor & blocks

A tela page is markdown underneathpages.body is canonical markdown, forever. The editor and reader render a rich block palette well beyond plain markdown, and every block round-trips to readable markdown, so nothing locks you in.

[!TIP] Type / on an empty line to open the slash menu and insert any block by name. Start typing to filter (e.g. /call, /mermaid, /table).

Standard markdown works as you'd expect — # headings, -/1. lists, **bold**, [links](…), > quotes, --- dividers, inline `code` and ==highlight==.

Block reference

Block Insert via Markdown
Callout (note/tip/warning) /callout > [!NOTE] + body lines
Pull quote /quote → Pull quote :::quote{cite="…"}:::
To-do / task list /todo - [ ] task / - [x] done
Table /table GFM pipe table
Collapsible /collapsible <details><summary>…</summary></details>
Tabs /tabs :::tabs with ### per tab
Kanban board /kanban :::kanban with ### columns, - cards
Stat grid (KPIs) /stats :::stats with ### tiles
Timeline /timeline :::timeline with bold-dated bullets
Calendar (month grid) /calendar :::calendar{month=YYYY-MM}
Chart (bar/line/pie) /chart ```chart + YAML spec
Mermaid diagram /mermaid ```mermaid
Drawing (hand-drawn) /drawing drawn visually
Embed (YouTube/Vimeo/Loom) /embed :::embed + URL
Image drag-drop / paste ![alt](url)
File attachment drag-drop / paste tela file URL
Code block /code ```lang
Equation / inline math /equation $$ … $$ (block, on its own lines) / $$e^{i\pi}+1=0$$ (inline)
Wikilink type [[ [[Page Title]]
Footnote type [^1] [^1] + [^1]: note

[!NOTE] Math uses double dollars, so prices are safe. A single $ is never treated as math — write $3,500 and $2,500 in the same paragraph and both render as text. Inline math needs $$…$$ (typing $x^2$ in the editor still converts it, and saves as $$x^2$$).

These same blocks are what an AI agent gets when it writes a tela page — see [[Agents & MCP]].

See it in action

A callout sets an aside apart:

[!IMPORTANT] Everything you see in this reader is plain markdown in the page body. Open this page in the editor to read the source.

Tabs show alternatives in one spot:

:::tabs

Slash menu

Type / on an empty line, then filter by name.

Drag & drop

Drop an image or file onto the page — it uploads and inserts itself. :::

A table with check/cross cells renders as a feature matrix:

Capability Reader Editor
Live collaboration cross check
Read-mode controls check cross
Insert blocks cross check

Slide decks

A page can be a slide deck instead of a document — the whole page becomes a presentation, styled automatically from plain markdown. Turn it on from the page ⋯ menu → Convert to slide deck. See [[Presentations & decks]].

When the render doesn't match what you wrote

Some markdown renders differently from how it reads. Misname a block (:::callout instead of a > [!NOTE] callout) and the reader shows its contents without the frame. Paste raw HTML and it is dropped — the text between the tags survives, the tags and their styling do not. Leave out the blank lines around a collapsible's body and the whole collapsible disappears. In every case the page still looks fine; it just isn't what you meant, and re-reading your markdown won't show you that.

While you edit, tela checks for exactly these cases and lists what it finds under the editor, headed Renders differently than written. Each line names what the reader will do and how to fix it. It never blocks a save, and it stays hidden when there is nothing to report.

Agents get the same check as the lint_page tool, plus preview_page, which renders a page and reads it back so an agent can see its own output — see [[Agents & MCP]].

Worth knowing