English
Markdown syntax
Notes in trip2g are Markdown files. Write them in Obsidian, sync, and they appear on your site with formatting intact. This page covers the syntax trip2g renders and a few rendering behaviors specific to the platform.
Headings
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
More # symbols mean a smaller heading. Use ## and ### for most sections — # is reserved for the page title.
Heading anchors and the table of contents
Every heading on the published page gets an id, so a link can point at it. trip2g builds the id from the heading text: Cyrillic is transliterated to Latin, every run of characters other than letters and digits becomes _, and the result is lowercased. A repeated id gets -2, -3 and so on.
| Heading | id |
|---|---|
## Getting Started |
getting_started |
## Цены и тарифы |
cenyi_i_tarifyi |
## Что нового в 2.0? |
chto_novogo_v_2_0_ |
## FAQ, then ## FAQ again |
faq, then faq-2 |
Changing the heading text changes its id and breaks links to the old one. To keep an anchor stable, or to make it short, set it yourself with {#id} at the end of the heading:
## Цены и тарифы {#pricing}
## Getting Started {#start .wide}
The first heading gets id="pricing", the second id="start" and the CSS class wide. The braces do not show up anywhere: not on the page, not in the table of contents, not in search. An id you set wins over a generated one: if ## Intro comes before ## Start {#intro}, the second heading keeps intro and the first one becomes intro-2. Only the id and classes reach the HTML; other attributes in the braces are ignored. An id may hold letters, digits, -, _, : and .. Braces that do not parse as attributes stay part of the heading text, so ## Price {per month} renders as written.
Linking to a heading. Inside the same note, use the id as a fragment: [see pricing](#pricing). To another note, add the fragment to its URL: [pricing](/docs/plans#pricing).
A wikilink takes the heading text, as Obsidian writes it: [[Plans#Getting Started]] links to the getting_started id of that note, and [[#Getting Started]] to the heading in the same note. Case and extra spaces do not matter, and the alias works as usual: [[Plans#getting started|start here]]. For two headings with the same text, the link goes to the first; reach the second by its id, [[Plans#faq-2]]. An id works in place of the text, so after ## Getting Started {#start} both [[Plans#Getting Started]] and [[Plans#start]] lead to #start; Obsidian scrolls only for the text. A fragment that matches no heading stays as written and the link is marked as broken, like a link to a missing note. Block links ([[Plans#^block-id]]) are left as they are.
The table of contents. The default template shows a table of contents built from these headings, each entry linking to its id. The toc frontmatter field controls it:
toc: |
Table of contents |
|---|---|
not set or auto |
shown when the note has 5 or more headings, or takes 2 or more minutes to read |
show, true, yes |
always shown |
hide, false, no |
never shown |
A custom template can build its own table of contents from the same ids, see Templates.
Text emphasis
**bold**
*italic*
***bold and italic***
~~strikethrough~~
`inline code`
Result: bold, italic, bold and italic, strikethrough, inline code
Lists
Unordered:
- first item
- second item
- nested item
Ordered:
1. first item
2. second item
3. third item
Task lists
- [x] done
- [ ] not done
Rendered as checkboxes on the published page. The state is visual only — readers cannot check or uncheck them.
Links
External link:
[link text](https://example.com)
Wikilink to another note:
[[Note name]]
[[Note name|Custom display text]]
Wikilinks work the same way as in Obsidian. trip2g resolves them globally across the vault: [[note]] finds the file by name regardless of where in the vault the linking note lives. If two files share the same name, the one closer to the vault root takes priority — use [[folder/note]] to be explicit.
A wikilink to a note that exists on the site becomes a live <a> tag. A wikilink to a note that does not exist on the site renders as underlined text (no link).
Images
From the vault (wikilink embed):
![[assets/photo.png]]
![[assets/photo.png|alt text]]
![[assets/photo.png|alt text|300x200]]
![[assets/photo.png|300]]
Size can be specified after a | as widthxheight or just width. Height is optional.
External image:

Standard Markdown image syntax also works with local vault files:

Video files
Embed a video file from the vault with ![[...]]:
![[demo.mp4]]
Supported formats: .mp4, .avi, .mov, .mkv, .webm, .m4v. The file renders as a <video> player with controls.
Audio files
Embed an audio file the same way:
![[recording.mp3]]
Supported formats: .mp3, .wav, .ogg, .flac, .m4a, .aac. The file renders as an <audio> player with controls. Readers can play, pause, and scrub without leaving the page.
Standard Markdown image syntax also triggers the audio player for audio files:

Document files (download links)
When you embed a document file, trip2g renders it as a download link rather than trying to display it inline:
![[report.pdf]]
![[data.xlsx]]
Supported as download links: .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .txt, .rtf, .odt, .ods, .odp, .csv, .zip, .rar, .7z.
The link shows the filename and downloads the file when clicked.
Blockquotes
> A blockquote.
> This continues on the next line.
>
> A new paragraph within the same quote.
Callouts
A callout is a blockquote whose first line is a [!type] marker. trip2g renders it as a styled block with an icon and title.
Basic callout — the type name becomes the title:
> [!note]
> Content of the callout.
Custom title — add text after the type:
> [!info] Getting Started
> This title overrides the default.
Foldable collapsed — readers click to expand:
> [!tip]- How to fold a callout
> Add `-` after the type to start collapsed.
Foldable expanded — starts open, can be collapsed:
> [!faq]+ Is this open by default?
> Yes. `+` means expanded by default.
Built-in types with distinct icons: note, abstract, summary, tldr, info, todo, tip, hint, important, success, check, done, question, help, faq, warning, caution, attention, failure, fail, missing, danger, error, bug, example, quote, cite. Custom types are also valid — they render with a fallback icon.
Comments
Text wrapped in %% is an Obsidian comment and is removed from the rendered output.
Inline comment — stripped between surrounding text:
The word BEFORE%%this is hidden%%AFTER is visible.
Block comment — a standalone %% on its own line opens the comment; a second standalone %% closes it. Everything in between is hidden:
%%
This entire block is stripped from the page.
Multiple lines are hidden.
%%
Literal %% inside fenced code blocks and inline code spans is preserved as-is.
Code
Inline: `code`
Fenced block with syntax highlighting:
```python
def greet(name):
return f"Hello, {name}!"
```
Specify the language after the opening fence. Supported languages include python, javascript, typescript, go, bash, json, yaml, sql, and many others.
A block without a language tag renders as plain monospace text.
Tables
| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| A | B | C |
| D | E | F |
Column alignment:
| Left | Center | Right |
|:---------|:--------:|---------:|
| text | text | text |
Horizontal rule
---
Three dashes produce a horizontal divider.
Escaping
Prefix a special character with \ to render it literally:
\*not italic\*
\`not code\`
\[[not a wikilink\]]
Frontmatter
A YAML block at the top of the file sets metadata for the note:
---
title: "My note title"
free: true
---
Note body starts here.
Frontmatter controls how trip2g publishes the note: its URL, access level, scheduled Telegram posts, and more. See en/user/publishing for the full property reference.
Rendering specifics
What trip2g renders
The renderer is built on Goldmark with the GitHub Flavored Markdown (GFM) extension. This means the following work out of the box:
- Standard Markdown: headings, bold, italic, blockquotes, fenced code blocks, horizontal rules
- GFM additions: tables, strikethrough (
~~), task lists (- [x]), autolinks (bare URLs become clickable links) - Wikilinks and embed syntax (
![[...]]) - Syntax highlighting in code blocks (via the Chroma library, server-side — no client-side JS needed)
- Obsidian callouts (
> [!type]) rendered as styled blocks with icon and title - Obsidian
%%comments stripped from output (inline and block) - YouTube URLs in image syntax render as embedded players:
 - Audio files embed as
<audio controls>players - Video files embed as
<video controls>players - Document files embed as download links
What is not rendered
- Obsidian
%%comments — text inside%%...%%(inline or block) is stripped from the output. It does not appear on the published page. - Footnotes — the
[^1]/[^1]: ...syntax is not processed. The markers appear as literal text. - Math / LaTeX —
$...$and$$...$$blocks are not rendered. The content appears as plain text. - Smart quotes — straight quotes
"..."and'...'are not converted to curly quotes. - Raw HTML — arbitrary inline HTML is sanitized. Only a small set of safe tags passes through (
<u>,<mark>,<sup>,<sub>,<strong>,<em>).
Wikilink resolution
trip2g resolves wikilinks the same way Obsidian does: globally, by filename, not by relative path. [[note]] matches any file named note.md anywhere in the vault. When names conflict, the file with the shorter path from the vault root wins.
Use an explicit path to target a specific file: [[folder/note]].
Asset URLs
Files you attach to a note (images, audio, video, documents) are stored in the cloud and served from a signed URL. URLs are refreshed automatically — you do not need to re-sync files to keep them accessible.
Related
- en/user/publishing — frontmatter properties, access control, URL configuration
- en/user/mermaid — Mermaid diagram blocks
- en/user/youtube — YouTube embed syntax
- en/typography — full rendering demo page