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

[Link text](https://example.com)
![Alt text](/path/to/image.jpg)

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
  1. First item
  2. Second item
  3. 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 |
FeatureStatus
MarkdownDone
TemplatesDone
CachingDone

Tips

  1. Keep it simple - Markdown is meant to be readable as plain text
  2. Use headings - They help structure your content and improve navigation
  3. Preview often - Accent CMS renders changes instantly with hot reload
  4. Organize content - Use numbered prefixes for directory ordering