---
title: Markup reference
slug: one/resources/about-docs/markup-reference
docTags: 
createdAt: 2026-06-10T18:09:43.959Z
---

This page is a reference for contributors writing Flipper One documentation.
It covers both standard **Markdown** and **Archbee-specific syntax** supported by this wiki.

The source files live on GitHub at [github.com/flipperdevices/flipper-one-docs](https://github.com/flipperdevices/flipper-one-docs). Every merged pull request automatically rebuilds the live site. To contribute, fork the repo and open a pull request.

Quick jump:

- [Headings](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Text styles](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Links](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Images](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Videos](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Lists](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Tables](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Code](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Callouts](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Math](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Mermaid diagrams](docId\:L8V_N7C30UTmEEIh2vl-7)
- [Archbee components](docId\:L8V_N7C30UTmEEIh2vl-7)

***

## Headings

Flipper One documentation supports headings H1–H3.

:::hint{type="warning"}
**Don't add&#x20;**`# Heading 1`**&#x20;in the body.** Archbee renders the `title:` field from the YAML frontmatter as the page H1, so an extra `# H1` in the body produces two titles. Start body content at `## H2`.
:::

## ## Heading 2

### ### Heading 3

***

## Text styles

| **Flipper One docs** | **Markdown**        |
| -------------------- | ------------------- |
| Regular text         | `Regular text`      |
| **Bold**             | `**Bold**`          |
| *Italic*             | `*Italic*`          |
| ***Bold italic***    | `***Bold italic***` |
| ~~Strikethrough~~    | `~~Strikethrough~~` |
| `Inline code`        | `` `Inline code` `` |

***

## Links

| **Flipper One docs**                           | **Markdown**                                 |
| ---------------------------------------------- | -------------------------------------------- |
| [Archbee](https://archbee.com)                 | `[Archbee](https://archbee.com)`             |
| [https://example.com](https://example.com)     | `[https://example.com](https://example.com)` |
| [Jump to Tables](docId\:L8V_N7C30UTmEEIh2vl-7) | `[Jump to Tables](./#tables)`                |

‎&#x20;

To control whether a link opens in a new tab — and to write short relative hrefs for in-docs links — use Archbee's `:Link[]` directive instead of plain Markdown.

External link (new tab):

```markdown
:Link[label]{href="https://example.com" newTab="true" hasDisabledNofollow="false"}
```

Same-page anchor (same tab):

```markdown
:Link[label]{href="./#section-name" newTab="false" hasDisabledNofollow="true"}
```

Another page in the docs (optional anchor):

```markdown
:Link[label]{href="<relative-path>.md#section-name" newTab="true" hasDisabledNofollow="true"}
```

Use a path relative to the current file:

- `./Other-Page.md` — file in the same folder
- `./folder/Other-Page.md` — file in a subfolder
- `../folder/Other-Page.md` — file in a sibling folder

The `#section-name` anchor is optional. Anchor IDs are derived from the heading text (lowercased, spaces replaced with hyphens).

| **Attribute**         | **Description**                                                                                                                                                                                                                                              |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `href`                | Link target. Supports full URLs (`https://example.com`), same-page anchors (`./#section`), and relative paths to other docs pages (`./Other-Page.md`, `./folder/Other-Page.md`, `../folder/Other-Page.md`). Append `#section` to jump to a specific heading. |
| `newTab`              | `"true"` opens the link in a new tab, `"false"` opens it in the same tab. Use `"false"` for same-page anchor links.                                                                                                                                          |
| `hasDisabledNofollow` | `"false"` adds `rel="nofollow"` to the link (default for external links); `"true"` removes it.                                                                                                                                                               |

***

## Images

**Remote URL:** `![Alt text](https://example.com/image.png "Caption")`

![Remote image](https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/zvg7zLWtzmkmSHhVZyO9K-20260918-140641.jpg "Caption")

‎&#x20;

**Local path:** `![Alt text](/files/pics/test-image.jpg "Caption")`

![Local image](https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/pNHUZHZzPZd7qdM08jKuq_test-image.jpg "Caption")
​
‎&#x20;

To **resize or align** an image, standard Markdown is not enough — use Archbee syntax:

`::Image[]{src="/files/pics/test-image.jpg" size="40" position="flex-start" caption="Caption text"}`

::Image[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/sDIW27SOFL0HZKEvDEU_T-20260420-092354.png" size="40" width="1950" height="1200" position="flex-start" caption="Caption text" showCaption="true"}

| **Attribute** | **Description**                                                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `src`         | Path to the image (relative or absolute URL).                                                                                                          |
| `size`        | Width value in percent.                                                                                                                                |
| `position`    | Page alignment when the image is smaller than the content area: `flex-start` (left), `center`, `flex-end` (right). Has no effect on caption alignment. |
| `caption`     | An optional caption is shown below the image. Always left-aligned for local images.                                                                    |

‎&#x20;

### Inline images

You can add inline images using `inlineImage`:

```markdown
:inlineImage[]{src="/files/icons/ptt-button-light.png"}
```

This is how an inline image :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/iouYE0q9C2q-6W3OxXJ7R_ptt-button-light.png" alt caption} appears in a paragraph.

***

Use the following icons for Flipper One controls:

- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/iouYE0q9C2q-6W3OxXJ7R_ptt-button-light.png" alt caption} PTT light button (`ptt-button-light.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/ycjFHNh5lir_f1QahiAen_ptt-button-orange.png" alt caption} PTT orange button (`ptt-button-orange.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/PHvGQ6Q48ToKDfmmLL3He_touchpad.png" alt caption} Touchpad (`touchpad.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/O_Z0H8DKX7D2EyhKWO2II_touchpad-left-right.png" alt caption} Touchpad left-right movement (`touchpad-left-right.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/fVh3_7Dn5-2uKVGMqbCM7_touchpad-up-down.png" alt caption} Touchpad up-down movement (`touchpad-up-down.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/VEdcDlibG5Cf8Vp7Evr4i_touchpad-four-way-movement.png" alt caption} Touchpad four-way movement (`touchpad-four-way-movement.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/HRIrqquSMpbXMOzU0uYrp_esc-button.png" alt caption} Esc button (`esc-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/jU4mJuOF64lH5RYu-1wGc_view-button.png" alt caption} View button (`view-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/tHh0zgmeecc7gU4mqUwYr_power-button-led-off.png" alt caption} Power button with LED off (`power-button-led-off.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/Z9vnDd3gGVDN735nvTQXw_power-button-led-green.png" alt caption} Power button with green LED (`power-button-led-green.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/5yFxQ_2-0bAsV5ogxRMDu_power-button-led-yellow.png" alt caption} Power button with yellow LED (`power-button-led-yellow.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/quaQFNJ6YPE05tnMghlhM_edit-button.png" alt caption} Edit button (`edit-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/i2vQba-RZRz-lfq_ScALs_run-button.png" alt caption} Run button (`run-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/i7WNvL3ZVyjiTJ8eb9hpW_app-switcher-button.png" alt caption} App switcher button (`app-switcher-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/P4t_EgEyTRIGLtzkQO_9k_back-button-light.png" alt caption} Back light button (`back-button-light.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/iLMcoaJ_09puvW_6kYkhj_back-button-orange.png" alt caption} Back orange button (`back-button-orange.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/kT6WRZRHqV9yy_q3RlpJm_dpad-ok-button.png" alt caption} Ok button on the D-pad (`dpad-ok-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/59kx43QGE3YXV1oiCnOzQ_dpad-down-button.png" alt caption} Down button on the D-pad (`dpad-down-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/hDrdNRxinhale4UXb1F37_dpad-left-button.png" alt caption} Left button on the D-pad (`dpad-left-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/oMJH8oDaR1sewe4wli-Ei_dpad-up-button.png" alt caption} Up button on the D-pad (`dpad-up-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/W-mAiff22YHpxpXDSZNMW_dpad-right-button.png" alt caption} Right button on the D-pad (`dpad-right-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/0xWbzqklgrgEhpJUyfoDG_dpad-left-right-button.png" alt caption} Right or Left buttons on the D-pad (`dpad-left-right-button.png`)
- :inlineImage[]{src="https://api.archbee.com/api/optimize/3StCFqarJkJQZV-7N79yY/FfhvAfsOGwrEfT4SzF4_L_dpad-up-down-button.png" alt caption} Up or Down buttons on the D-pad (`dpad-up-down-button.png`)

***

## Videos

Two methods to embed video are supported.

**Method 1: YouTube** — use Archbee's embed syntax:

`::embed[]{url="https://www.youtube.com/watch?v=VIDEO_ID"}`

::embed[]{url="https://www.youtube.com/watch?v=dQw4w9WgXcQ"}

​

**Method 2: Self-hosted / CDN video** — use the Archbee `:::Iframe` component. The HTML you embed goes inside the `code="..."` attribute, which means **every&#x20;**`"`**&#x20;must be escaped as&#x20;**`&#x22;`**&#x20;and every newline as&#x20;**`&#xA;`. The whole HTML ends up on one logical line:

```text
:::Iframe{code="<video&#xA;    autoplay muted loop playsinline style=&#x22;width: 100%; margin: 0 !important;&#x22;&#xA;    src=&#x22;https://cdn.example.com/your-video.mp4&#x22;&#xA;></video>&#xA;<div class=&#x22;text-center mt-2.5 text-gray-400 pb-5&#x22;>&#xA;Caption&#xA;</div>" iframeHeight="500"}

:::
```

Conceptually that decodes to:

```html
<video
    autoplay muted loop playsinline style="width: 100%; margin: 0 !important;"
    src="https://cdn.example.com/your-video.mp4"
></video>
<div class="text-center mt-2.5 text-gray-400 pb-5">
Caption
</div>
```

:::Iframe{code="<video&#xA;    autoplay muted loop playsinline style=&#x22;width: 100%; margin: 0 !important;&#x22;&#xA;    src=&#x22;https://cdn.flipperzero.one/Pan_rotate_and_move_parts_compressed.mp4&#x22;&#xA;></video>&#xA;<div class=&#x22;text-center mt-2.5 text-gray-400 pb-5&#x22;>&#xA;Caption&#xA;</div>" iframeHeight="500"}

:::

***

## Lists

| **Flipper One docs**        | **Markdown**                                |
| --------------------------- | ------------------------------------------- |
| - Item A
- Item B           | `- Item A`<br />`- Item B`                  |
| 1. First
2. Second
3. Third | `1. First`<br />`2. Second`<br />`3. Third` |

***

## Divider

Use `***` or `---` to insert a horizontal divider.

***

## Tables

Archbee supports two table formats.

**Standard Markdown pipe tables** — simple and readable, but no control over column widths or alignment:

```markdown
| Column 1 | Column 2 | Column 3 |
| --- | --- | --- |
| Cell | **Bold** | ✅ |
```

| **Column 1** | **Column 2** | **Column 3** |
| ------------ | ------------ | ------------ |
| Cell         | **Bold**     | ✅            |

​ 

**HTML tables** — use when you need column widths, cell alignment, or images inside cells:

```html
<table isTableHeaderOn="true" columnWidths="165,330,165">
  <tr>
    <td><p>Header 1</p></td>
    <td><p>Header 2</p></td>
    <td align="center"><p>Header 3</p></td>
  </tr>
  <tr>
    <td><p>Cell</p></td>
    <td><p><strong>Bold cell</strong></p></td>
    <td align="center"><p>✅</p></td>
  </tr>
</table>
```

| **Attribute**     | **Description**                                                       | **Example**          |
| ----------------- | --------------------------------------------------------------------- | -------------------- |
| `isTableHeaderOn` | Renders the first row as a bold header                                | `"true"` / `"false"` |
| `columnWidths`    | Comma-separated pixel widths per column. Total must not exceed 660 px | `"165,330,165"`      |
| `align`           | Horizontal alignment on a `<td>` element                              | `align="center"`     |

***

## Code & syntax highlighting

Fenced block with language:

````markdown
```javascript
function greet(name) {
  return `Hello, ${name}!`;
}
```
````

```javascript
function greet(name) {
  return `Hello, ${name}!`;
}
```

​

Diff block:

````markdown
```diff
+ Added line
- Removed line
```
````

```diff
+ Added line
- Removed line
```

Supported language tags: `markdown`, `html`, `javascript`, `typescript`, `python`, `bash`, `c`, `cpp`, `json`, `yaml`, `diff`, `tex`, `mermaid`, and more.

***

## Callouts

Archbee supports four callout styles using `:::hint{type="..."}`:

```markdown
:::hint{type="info"}
Your text for the **info callout** here
:::
```

:::hint{type="info"}
Your text for the **info callout** here
:::

‎&#x20;

```markdown
:::hint{type="success"}
Your text for the **success callout** here
:::
```

:::hint{type="success"}
Your text for the **success callout** here
:::

‎&#x20;

```markdown
:::hint{type="warning"}
Your text for the **warning callout** here
:::
```

:::hint{type="warning"}
Your text for the **warning callout** here
:::

‎&#x20;

```markdown
:::hint{type="danger"}
Your text for the **danger callout** here
:::
```

:::hint{type="danger"}
Your text for the **danger callout** here
:::

***

## Math

Archbee only supports math via a fenced `tex` block. Inline math (`$...$`) is **not supported**.

````markdown
```tex
\int_{-\infty}^{\infty} e^{-x^2} \, dx = \sqrt{\pi}
```
````

```tex
\int_{-\infty}^{\infty} e^{-x^2} \, dx = \sqrt{\pi}
```

***

## Mermaid diagrams

Use a fenced `mermaid` block. Supported diagram types: `flowchart`, `sequenceDiagram`, `classDiagram`, `gantt`, and more.

```none
flowchart TD
  A[Start] --> B{Is it Markdown?}
  B -- Yes --> C[Render nicely]
  B -- No  --> D[Fallback]
  C --> E[Ship it]
  D --> E
```

```mermaid
flowchart TD
  A[Start] --> B{Is it Markdown?}
  B -- Yes --> C[Render nicely]
  B -- No  --> D[Fallback]
  C --> E[Ship it]
  D --> E
```

​

```none
sequenceDiagram
  participant U as User
  participant S as System
  U->>S: Sends Markdown
  S-->>U: Renders page
```

```mermaid
sequenceDiagram
  participant U as User
  participant S as System
  U->>S: Sends Markdown
  S-->>U: Renders page
```

***

## Archbee components

### Workflow steps

Use `WorkflowBlock` with `WorkflowBlockItem` for numbered step-by-step flows:

```markdown
::::WorkflowBlock
:::WorkflowBlockItem
Step one title

Step description.
:::

:::WorkflowBlockItem
Step two title

Step description.
:::
::::
```

::::WorkflowBlock
:::WorkflowBlockItem
Step one title

Step description.
:::

:::WorkflowBlockItem
Step two title

Step description.
:::
::::

***

### Two-column layout

Use `VerticalSplit` to place content side by side:

```markdown
::::VerticalSplit{layout="middle"}
:::VerticalSplitItem
**Left side**

Content
:::

:::VerticalSplitItem
**Right side**

Content
:::
::::
```

::::VerticalSplit{layout="middle"}
:::VerticalSplitItem
**Left side**

Content
:::

:::VerticalSplitItem
**Right side**

Content
:::
::::

***

### Expandable section

Use `ExpandableHeading` for collapsible content:

```markdown
:::ExpandableHeading
### Section title

Content shown when expanded.
:::
```

:::ExpandableHeading
### Section title

Content shown when expanded.
:::
