Markdown syntax support
Overview of Markdown syntax supported by Flowershow, including CommonMark, GitHub Flavored Markdown, and Obsidian extensions.
Flowershow lets you choose between Markdown and MDX rendering modes. If you're publishing plain Markdown content and experience parsing issues, see Syntax Mode Configuration to learn how to switch modes.
Flowershow was designed with Obsidian users in mind, and so, it aims to fully support Obsidian syntax, including CommonMark, GitHub Flavoured Markdown and Obsidian extensions, like Wiki links.
Headings
In Markdown you can create headings in two main ways — ATX style (with #) and Setext style (with = and -).
ATX Headings
Use 1–6 # symbols:
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
A space after # is required (## Heading not ##Heading)
Setext Headings
Only for H1 and H2 — underline with = or -:
Heading 1
===============
Heading 2
---------------
Headings automatically generate anchors for linking, like:
[Jump to section](#my-heading)
You can get the full URL of a heading by hovering over it and clicking on the # icon on the left.
It's recommended to use H1 only once per page for proper HTML semantics.
Thematic breaks
Thematic breaks can be made with three *, - or _.
Example:
***
---
___
Emphasis
I'm Bold! is done with **I'm Bold!**
I'm Bold! is done with __I'm Bold!__
I'm Italic! is done with *I'm Italic!*
I'm Italic! is done with _I'm Italic!_
Italic with bold inside is done with *Italic with **bold** inside*
Italic with bold inside is done with _Italic with __bold__ inside_
Strikethrough is done with ~~Strikethrough~~
Highlight is done with ==Highlight==
Inline code is done with Inline code
Paragraphs & Line breaks
New paragraph
To start a new paragraph, leave a blank line between lines of text:
This is paragraph one.
This is paragraph two.
This is paragraph one.
This is paragraph two.
Soft Line Break (line break within the same paragraph)
A soft line break is just a newline in your editor and markdown treats it as a space.
Line one
Line two (still same paragraph)
Line one Line two (still same paragraph)
Hard Line Break (force a line break)
To force a break without starting a new paragraph, use two spaces at the end of a line or a backslash (\):
Option 1: Two spaces at end
Line one
Line two
Line one Line two
Option 2: Backslash
Line one\
Line two
Line one
Line two
Blockquotes
Blockquotes in Markdown let you quote text like a citation.
They work by prefixing lines with >.
Basic blockquote
> This is a quote.
This is a quote.
Nested blockquotes (multi-level)
Add another > for each level:
> Level 1
>> Level 2
>>> Level 3
Level 1
Level 2
Level 3
Blockquote with multiple paragraphs
Leave a blank line inside and prefix every paragraph with >:
> This is the first paragraph of a quote.
>
> This is the second paragraph.
This is the first paragraph of a quote.
This is the second paragraph.
Blockquote with other elements (lists/code)
Markdown inside still works:
> Shopping list:
> - Apples
> - Bananas
Shopping list:
- Apples
- Bananas
or code:
> Code inside a quote:
>
> ```js
> console.log("Hi");
> ```
Code inside a quote:
console.log("Hi");
Lists
Markdown supports two main types of lists: unordered (bulleted) and ordered (numbered). You can also nest lists and mix types.
Unordered Lists (bullets)
Use -, *, or + — they all work the same:
- Item one
- Item two
- Item three
- Item one
- Item two
- Item three
Ordered Lists (numbered)
1. First item
2. Second item
3. Third item
- First item
- Second item
- Third item
Nested Lists
Indent sub-items with two or four spaces:
- Groceries
- Apples
- Bananas
- Chores
- Laundry
- Dishes
- Groceries
- Apples
- Bananas
- Chores
- Laundry
- Dishes
Mixed Lists
1. Step one
2. Step two
- Note A
- Note B
3. Step three
- Step one
- Step two
- Note A
- Note B
- Step three
Task Lists
- [x] one thing to do
- [ ] a second thing to do
- [ ] another thing to do!
- one thing to do
- a second thing to do
- another thing to do!
Code
Inline code
Use backticks for short code snippets inside a sentence:
Use the `print()` function.
Use the print() function.
Fenced code blocks (multi-line)
Wrap code in triple backticks:
```
const greeting = "Hello!"; console.log(greeting);
```
Renders as:
const greeting = "Hello!"; console.log(greeting);
Syntax highlighting
Specify a language after the backticks to get syntax highlighting:
```python
class Example:
def code(self,test):
return 'Code highlighter'
```
Renders as:
class Example:
def code(self,test):
return 'Code highlighter'
Inline code
Here is some code: `print("hello world!")`
Here is some code: print("hello world!")
Tables
You include tables in Markdown using pipes | to separate columns and dashes - to define the header row.
Basic Markdown table
| Name | Age | City |
|--------|-----|------------|
| Alice | 30 | Lausanne |
| Bob | 28 | Warsaw |
| Clara | 32 | Amsterdam |
| Name | Age | City |
|---|---|---|
| Alice | 30 | Lausanne |
| Bob | 28 | Warsaw |
| Clara | 32 | Amsterdam |
Alignment
Use : to align text:
| Left Align | Center Align | Right Align |
|:-----------|:------------:|------------:|
| apple | banana | cherry |
| dog | cat | bird |
| Left Align | Center Align | Right Align |
|---|---|---|
| apple | banana | cherry |
| dog | cat | bird |
With inline formatting
| Feature | Supported |
|-------------|----------|
| **Bold** | ✅ |
| `Code` | ✅ |
| [[Wikilinks]]| ✅ |
| Feature | Supported |
|---|---|
| Bold | ✅ |
Code | ✅ |
| Wikilinks | ✅ |
Links
CommonMark Links
Use [text](url) format:
[Read the blog post](/blog/turn-obsidian-vault-into-a-blog.md)
Reference-style links
See the [docs][docs-link].
[docs-link]: https://flowershow.app/docs
See the docs.
Obsidian Wikilinks
Obsidian uses [[ ]] for internal links.
Link to a page
You can use Obsidian's "shortest possible path" style links:
[[turn-obsidian-vault-into-a-blog]]
turn-obsidian-vault-into-a-blog
With alias
[[turn-obsidian-vault-into-a-blogPublish a blog directly from Obsidian with Flowershow]]
Publish a blog directly from Obsidian with Flowershow
Images
CommonMark image embeds
Basic format:

With title:

Image resizing with CommonMark syntax
You can use Obsidian's resizing syntax with CommonMark image links:
Width only:

Width and height:


Obsidian image embeds
You can use Obsidian's "shortest possible path" style links:
![[hiroshige.jpg]]
Alias (alt text override):
![[hiroshige.jpgHiroshige art]]
Image resizing Obsidian-style
Set width:
![[hiroshige.jpg200]]
Or both width and height:
![[hiroshige.jpg300x200]]

Other media files
Flowershow supports Obsidian’s media embeds using ![[...]].
Audio:
![[sample.mp3]]
Video:
![[sample.mp4]]
PDF:
![[sample.pdf]]
Just like in Obsidian, Flowershow will soon support embedding one note inside another:
![[my-note]]
Autolinks
Bare URLs and email addresses are detected and turned into links.
Check out Flowershow at https://flowershow.app!
ola@example.com
Check out Flowershow at https://flowershow.app!
YouTube
Use the embed syntax to display a YouTube video as a player:

You can also use the Obsidian wiki-link embed syntax:
![[https://youtu.be/ZbQRlNm2dww]]
To include a start time, add a t parameter to the URL:

A bare YouTube URL on its own line (e.g.
https://youtu.be/ZbQRlNm2dww) is also auto-embedded, butis the recommended syntax as it clearly signals an embed rather than a plain link.
Footnotes
Roses are red... [^1]
[^1]: ...violets are blue.
Roses are red… 1
Math
Flowershow supports math expressions using LaTeX-style syntax (powered by KaTeX).
Inline math
Wrap math in single $:
The equation $E = mc^2$ is famous.
The equation is famous.
Block math
Use double $$ for a displayed equation:
$$
\frac{d}{dx} (x^2) = 2x
$$
Full supported syntax: KaTeX docs.
Mermaid diagrams
Embed your diagram inside a code block with mermaid type.
Example:
```mermaid
graph LR
A[Start] --> B{Decision}
B -->|Yes| C[Do something]
B -->|No| D[Do something else]
C --> E[Finish]
D --> E[Finish]
```
graph LR
A[Start] --> B{Decision}
B -->|Yes| C[Do something]
B -->|No| D[Do something else]
C --> E[Finish]
D --> E[Finish]
You can find more examples and syntax on the Mermaid website.
Obsidian Bases (Beta)
Flowershow now supports Obsidian Bases, a powerful feature that allows you to create dynamic, queryable views of your notes directly in your published sites.
Obsidian Bases blocks are parsed in MDX mode. To make them work, use one of these options:
- Set your site's global syntax mode to
mdx - Set
syntaxMode: mdxin the page frontmatter - Use a
.mdxfile extension (when your global syntax mode isauto)
See Syntax Mode Configuration for details.
Example:
```base
filters:
or:
- file.hasProperty("status")
- file.inFolder("Projects")
views:
- type: table
name: "All Items"
order:
- file.name
- status
```
👉 See Announcing Obsidian Bases Support to learn more.
Automatic punctuation conversions
Flowershow automatically converts certain character sequences into typographic symbols, just like Obsidian and many Markdown engines.
ndash / mdash
| Input | Output | Meaning |
|---|---|---|
-- | – | en-dash (range, e.g., 2020–2025) |
--- | — | em-dash (sentence break) |
2020--2025
A---B
2020–2025 A—B
Ellipsis
| Input | Output | Meaning |
|---|---|---|
... | … | ellipsis |
. . . | … | spaced ellipsis |
Wait for it...
Or like this: . . .
Wait for it… Or like this: …
Obsidian Callouts
> [!info] This is cool!
> Here's a callout block.
> It supports **markdown** and [[abcwikilinks]].
Here's a callout block. It supports markdown and wikilinks.
> [!tip] Title-only callout
> [!faq]- Are callouts foldable?
> Yes! In a foldable callout, the contents are hidden when the callout is collapsed.
Are callouts foldable?
Yes! In a foldable callout, the contents are hidden when the callout is collapsed.
> [!question] Can callouts be nested?
> > [!todo] Yes!, they can.
> > > [!example] You can even use multiple layers of nesting.
Flowershow supports 13 different Obsidian callout types like note, abstract, todo, or tip. See this Obsidian docs page to learn more about different callout types. Aliases work too!
Comments
MDX comment syntax
When using MDX rendering, you can add invisible comments using JSX style:
Example:
Here is some invisible inline comment: {/* comment! */}
Here is an invisible multiline comment:
{/*
multi
line
comment!
*/}
Here is some invisible inline comment: {/* comment! */}
Here is an invisible multiline comment:
{/* multi line comment! */}
Obsidian comments
Inline comments
This %%word%% is invisible
This is invisible
Multi-line
The paragraph below is invisible:
%%
I'm invisible!
%%
The paragraph below is invisible:
🔍 To learn more about the Markdown syntax refer to the CommonMark specification.
🔍 To learn more about the GitHub Flavored Markdown syntax refer to the GFM specification.
Flowershow strives for full compatibility with:
- ✅ CommonMark
- ✅ GitHub-Flavored Markdown (GFM)
- ✅ Core Obsidian syntax (and some extensions)
We work hard to ensure everything works the way you expect. If you notice anything missing or behaving differently than Obsidian/GFM/CommonMark, please let us know:
- 💬 Join our Discord community
- 🗨️ Leave a comment below
- 🐛 Or open an issue on GitHub
Your feedback helps us improve Flowershow for everyone — thank you!
Footnotes
-
…violets are blue. ↩