Basic Formatting
Accent CMS uses CommonMark-compliant markdown with some extensions. Here is a guide to the everyday syntax you will use to write content.
Headings
# Heading 1 ## Heading 2 ### Heading 3 #### Heading 4
Headings automatically receive anchor IDs generated from their text (e.g., ## Getting Started becomes <h2 id="getting-started">). This enables linking directly to a section with #getting-started. Duplicate headings are disambiguated with numeric suffixes (-1, -2, etc.). The heading data is also available as page.toc in templates for building a table of contents. See the Rendering Pipeline for how heading anchors and the table of contents work.
Text Styles
**Bold text** *Italic text* ~~Strikethrough~~ `Inline code`
Renders as: Bold text, Italic text, Strikethrough, Inline code
Links and Images
[Link text](https://example.com) 
Linking Between Pages
Link to other pages in your site the same way you would on GitHub or in an IDE preview: by the path to the neighbouring source file. Accent rewrites these links to the page’s clean URL when it renders, so the same link works in every context:
[Setup guide](setup.md) <!-- sibling file, same directory --> [Deep dive](../reference/api.md) <!-- relative path across sections --> [Overview](/docs/overview.md) <!-- absolute path, .md optional --> [Overview](/docs/overview) <!-- clean URL, always works --> [Jump to a section](setup.md#install) <!-- fragments are preserved -->
Relative .md links resolve against the linking page’s source file (for a
section’s index.md, that means its own directory), so a table of sibling
pages keeps working wherever the page is served. A .md link that does not
match any page is left untouched – and accent validate reports it, so
broken references fail CI instead of shipping as silent 404s.
Page URLs are canonical without a trailing slash (/docs/setup, not
/docs/setup/); requests for the slash form are permanently redirected to
the canonical one.
Lists
Unordered Lists
- Item one - Item two - Nested item - Another nested item - Item three
- Item one
- Item two
- Nested item
- Another nested item
- Item three
Ordered Lists
1. First item 2. Second item 3. Third item
- First item
- Second item
- Third item
Code Blocks
Use triple backticks for code blocks with a language identifier for syntax highlighting:
```rust fn main() { println!("Hello, Accent CMS!"); } ```
Renders as:
fn main() { println!("Hello, Accent CMS!"); }
Server-Side Syntax Highlighting
Accent CMS highlights code blocks on the server using the syntect library. When a fenced code block specifies a recognized language, the rendered HTML contains inline-styled <span> elements for each syntax token. No client-side JavaScript (highlight.js, Prism, etc.) is required.
Supported languages include Rust, Python, JavaScript, TypeScript, HTML, CSS, YAML, JSON, Bash, SQL, Go, C, C++, Java, Ruby, and many more.
The highlighting theme is configurable in config.yaml:
code: theme: "base16-ocean.dark"
Set theme to an empty string to disable syntax highlighting entirely. Code blocks without a language identifier are rendered as plain <pre><code> without highlighting.
Blockquotes
> This is a blockquote. > It can span multiple lines. > > And have multiple paragraphs.
This is a blockquote. It can span multiple lines.
And have multiple paragraphs.
Tables
| Feature | Status | |---------|--------| | Markdown | Done | | Templates | Done | | Caching | Done |
| Feature | Status |
|---|---|
| Markdown | Done |
| Templates | Done |
| Caching | Done |
Tips
- Keep it simple - Markdown is meant to be readable as plain text
- Use headings - They help structure your content and improve navigation
- Preview often - Accent CMS renders changes instantly with hot reload
- Organize content - Use numbered prefixes for directory ordering