Skip to content

Markdown Halcyon renders

CommonMark, plus the GitHub extensions below. Anything not on this list stays as the literal text you typed, which is the right answer for a file that has to keep working in other tools.

FeatureSyntax
Tables| a | b | with a --- separator row
Task lists- [ ] and - [x]
Strikethrough~~struck~~
Footnotes[^1] and a [^1]: definition
Alerts> [!NOTE] and the four others below
Smart punctuationStraight quotes become curly, -- becomes an en dash
Mermaid diagramsA fenced block tagged mermaid
Syntax highlightingA fenced block tagged with a language

Task list checkboxes render in the preview but don't respond to clicks. Preview is for reading; ticking a box is an edit, and edits happen in the editor.

Alerts

The five GitHub kinds, each with its own colour and icon:

markdown
> [!NOTE]
> Useful information a reader should notice even when skimming.

> [!TIP]
> Optional guidance that helps someone do something better.

> [!IMPORTANT]
> Key information a reader needs to achieve their goal.

> [!WARNING]
> Urgent information needing immediate attention.

> [!CAUTION]
> Advice about risks or negative outcomes of an action.

Note

The marker has to be alone on the first line of the blockquote. Anything else and it stays an ordinary quote with a literal [!NOTE] in it, which is what GitHub does too.

The five GitHub alerts, in the editor on the left and the preview on the right

In the editor, the marker renders as a coloured label and the whole block takes the kind's colour. Put the cursor on the marker line and the raw [!NOTE] comes back, like every other marker.

Mermaid diagrams

Tag a fence mermaid and the preview draws it:

markdown
```mermaid
graph LR
  Idea[Rough idea] --> Draft[Draft]
  Draft --> Review[Review]
  Review --> Published[Published]
```

A mermaid flowchart drawn in the preview, above a highlighted code fence

The fence stays a code block everywhere else, including in the editor and in any other markdown tool that opens the file. That's the trade worth having: the diagram is readable as source, and the note doesn't stop being portable markdown because you drew something in it.

A diagram that fails to parse shows the error over its source rather than disappearing.

Images

Relative paths resolve against the note's own location, so ![](diagram.png) finds the file sitting next to it.

Images aren't indexed as notes and aren't listed anywhere in the app. They're files in your folder that the preview knows how to draw. An image whose path doesn't resolve shows its alt text instead of a broken-image glyph.

What the preview drops, and why

Raw HTML. A <div>, a <script>, an <img onerror=…>: all discarded rather than sanitised.

Unsafe link schemes. Only http:, https:, mailto:, file: and tel: survive. [click](javascript:alert(1)) renders as a dead link.

Your .md file keeps whatever you wrote, exactly as you wrote it. Only the rendered view drops it.

Important

This matters most for the thing Halcyon is unusually good at: opening a README from a repository you just cloned. You didn't write that file, and the preview treats it accordingly.

What isn't supported

  • LaTeX and math. No $…$ rendering.
  • YAML frontmatter as metadata. A --- block at the top of a note renders as content, and Halcyon doesn't read anything out of it.
  • Custom containers. No ::: blocks.

Halcyon is a markdown notes app for macOS.