No new notifications.

Markdown

Tba.

The renderer implements most Markdown features. This page specifies certain features, and documents extensions.

Line breaks

The last character of a line matters.

Soft line break
This is a sentence.
This is another one.
Hard line break
This is a sentence. 
This is another one.
Empty line
This is a paragraph.

This is another one.

Conditional passages

Wrap content in a cohort or Preferences condition to personalize the next page view:

Cohort name
[cohort:Family]
## Dear members of the Family cohort,

Here is a list for you:
* One
* Two
[/cohort:Family]

The cohort name must match exactly, including capitalization. Authored Content uses the cohort name, never its PostHog ID.

For a cohort name that starts with an uppercase letter, the name can also be used directly as the marker: . Lowercase or ambiguous cohort names use the explicit form. Bare lower-camel markers are Preferences booleans.

Preferences conditions accept any setting name. Use a dotted path to identify a setting precisely. A bare setting means ; explicit and forms are also supported:

Preferences
[relationship:Family]
Hi fam, you have to watch this!
[/relationship:Family]

[design.animation:true]
The Theme accent cycles through its palette.
[/design.animation:true]

[design.animation:false]
The Theme accent stays fixed.
[/design.animation:false]

Nesting combines conditions with AND. Within one selector, matches any listed alternative and
requires all listed alternatives; do not mix the operators. Use only when the values can
coexist. For example, matches either selected value, while
requires both. Because is exclusive, do not combine it with
another positive Relationship value using . Conditions are for personalization, not access control.

An opening or closing marker on its own line consumes only that marker line. The content inside is parsed as ordinary Markdown, so a whole heading, list item, or table row can be conditional. A condition pair can also wrap one complete Markdown structural line; the markers are stripped before the parser recognizes its structure. This lets a list item or table row stay inside its shared list or table:

Conditional list item
* Everyone
[cohort:Family]
* Family members
[/cohort:Family]
[Use Image Generator]* Image Generator cohort[/Use Image Generator]
* Everyone else
Conditional table row
| Name | Group |
| --- | --- |
| Everyone | All |
[cohort:Family]
| Alice | Family |
[/cohort:Family]
[Use Image Generator]| Designer | Image Generator |

Inline markers add no spaces of their own:

Inline passage
Dear[relationship:Family]est[/relationship:Family] listeners, welcome.

When an inline conditional passage occupies an entire source line and does not match, that line and its line break disappear. Markers in fenced code blocks are shown literally. The server uses the settings cookie available at the start of a route request. If MTAM refreshes cohort membership while a page is open, the current view stays unchanged and the updated cohort affects the next navigation.

File inclusion

Insert local text files into code examples, with optional code above and below.

Insert local text files into code examples, with optional code above and below.

Inside a code block, use a standalone line to insert a text file. Paths are relative to this Content file's folder; files in subfolders are supported. The rest of the line is the path, so filenames containing spaces need no quotes.

Include a file
```md [v nowrap] AGENTS.md
// File: ./agents-md.txt
```

The directive's exact leading spaces and tabs are added to every inserted line, on top of the file's existing indentation. Comments and internal blank lines are preserved. A final newline ends the file's last line without adding a separator; an empty file removes the directive.

You can include multiple files in one code block and write code before, between, and after the directives. Included text is literal: its own inclusion markers are never processed.

To display a directive literally, write ; the displayed code becomes . The escape is processed only in authored code, never in inserted files. Other comments keep their existing behavior.

Inclusion works in ordinary backtick-fenced code blocks, in any language. It does not apply to configuration blocks. Missing files, non-text sources, and paths outside the content folder stop generation with a source location. Changes to included files refresh the local preview; published pages, Copy, feeds, Markdown, and prompt exports receive the expanded text.

Visually hidden headings

Prefix an H2–H6 heading with to keep it in the document structure and navigation while hiding its heading text on the page:

Code: MD
# Test

## ;Background

This section's body remains visible.

### Visible detail

This subheading remains visible too.

The Preferences ToC shows without the marker. The hidden heading keeps its anchor and remains available to assistive technology; its section stays open. Use this in any Markdown Content type, and mix marked and ordinary headings as needed. H1 titles are not marked.

Tutorial navigation

Tutorials use the same Markdown and Elements as Blog Posts. A Tutorial's H1 and introduction form its overview; H2 headings define section overviews, and H3 headings define their steps. H4 and deeper headings remain in the current step. Only the selected section is displayed.

Tutorial navigation buttons
[Onward(primary-button)](#next)
[Back(secondary-button)](#back)
[Close(secondary-button)](#close)

Supported actions are , , , , , and . Each authored action replaces its automatic counterpart; other standard buttons are supplied automatically. On the overview, acts as Start; on the final section it acts as Finish. The default resume control is a text-link-style button labeled “Continue your last tutorial,” placed after Start and Close. It appears only when valid progress exists. Close preserves the position; Finish clears only that Tutorial's position. Both return to .

Links such as Local Agent Root open one section directly. The parent heading is included in H3 fragments so repeated names remain distinct. Use the existing explicit anchor syntax when a durable heading target is needed. The Breadcrumb follows this hierarchy.

Code fences can retain their titles after collapse controls are removed, for example an opening fence of three backticks followed by .

Descriptions after headings

A whole paragraph wrapped in underscores immediately after a heading displays in italics. It stays part of that section and appears as an italic description preview when the section is collapsed. Ordinary inline underscore spans elsewhere remain underlined.

Section description
## A section

_An italic introduction to this section._

Normal text with _underlined words_.