Skip to content

Board Content

Boards can contain narrative content using the content field. This is useful for adding context, explanations, or summary text alongside your data.


Basic Content

Add content at the top level of a board:

title: "Executive Summary"
text: |
  ## Q4 Performance
  Revenue is up **15%** quarter-over-quarter.
rows:
  - revenue_chart

The board's title: already renders as an <h1>, so start your body text at ## (h2) or as a paragraph — don't repeat the title with a leading # Title, or it will render twice. To change which heading level titles render at (e.g. when embedding a board inside a page that already owns H1/H2), see Title Heading Levels below.


Nested Content

Use content in nested boards to create rich, document-like layouts:

rows:
  - text: |
      ## Monthly Analysis
      Here is the breakdown of our performance by region.

  - cols:
      - text: |
          ### Key Takeaways
          - North region is leading
          - South region needs attention

      - text: |
          ### Action Items
          1. Increase ad spend in South
          2. Optimize North inventory

Mixed Content Layouts

Combine content blocks with charts for rich, document-like dashboards:

source: examples_db
title: "Sales Report"

charts:
  revenue_chart:
    query:
      sql: |
        SELECT category, SUM(revenue) AS revenue, SUM(units_sold) AS units_sold FROM ecommerce_orders GROUP BY category ORDER BY revenue DESC
    type: bar
    title: "Revenue by Category"
    x: category
    y: revenue
    color: category

rows:
  - text: |
      This report shows **Q4 performance** across product categories.

  - cols:
      - revenue_chart

      - text: |
          ### Key Takeaways
          - **Electronics**: Top performer
          - **Accessories**: Growing steadily
          - **Tools**: Stable revenue
Sales Report This report shows Q4 performance across product categories. 0100k200k50k150kAccessoriesElectronicsToolsAccessoriesElectronicsToolsRevenue by Category Key Takeaways Electronics: Top performer Accessories: Growing steadily Tools: Stable revenue Data as of 16:49 UTC on 5 Aug 2026 made with dataface

Markdown Features

Because content is Markdown, you can use all standard Markdown features:

Tables

text: |
  | Metric | Value | Notes |
  | --- | --- | --- |
  | Revenue | $4.2M | `SUM(revenue)` over the last quarter |
  | Margin | 32% | Consistent with forecast |

Images

Drop in logos, diagrams, or badges:

text: |
  # dbt-powered Insights
  ![dbt logo](https://upload.wikimedia.org/wikipedia/commons/7/7a/DBT_logo.svg)
  Our revenue model is compiled with dbt.

For local images, place assets in your docs site (e.g., docs/docs/assets/images/) and reference them:

text: |
  ![Company Logo](../assets/images/logo.png)

Callouts & Quotes

text: |
  > :sparkles: Markdown lets you mix prose, tables, inline `code`,
  > and callouts in a single content block.
text: |
  Want a deeper dive? [Open the dbt docs](https://docs.getdbt.com/)
  or [view another board](../guides/getting-started.md).

Inline Code

text: |
  Reference variables like `{{ selected_month }}` or
  metric names like `total_revenue`.

Title Heading Levels

style.title.level controls the H-level (H1–H6) used for board and chart titles.

# Default — compute from the count of titled ancestors.
# A titled root board is H1, a titled child section is H2, and so on.
# Bare layout wrappers (no title) do not advance the counter.
style:
  title:
    level: auto
# Lock the level to a specific heading — useful for embedded boards where
# H1/H2 are already owned by the outer page. This board and all descendants
# start from H3; titled children render at level + 1, and bare wrappers
# inherit the locked level unchanged.
style:
  title:
    level: 3

Raw HTML Content

Set allow_html: true at the board root to render text: as raw HTML via foreignObject instead of Markdown:

allow_html: true
text: |
  <div style="display: flex; gap: 12px;">
    <span>Custom layout Markdown can't express</span>
  </div>

Trusted content only. The HTML — including any Jinja-interpolated values inside it — is rendered exactly as authored; this is not a security sandbox. Dataface strips <script> tags and event-handler attributes as a best-effort guard, not a guarantee. Only enable allow_html on first-party boards you fully control, and never on boards whose text: embeds user-supplied or variable-driven content you don't trust.


Content Tips

  • Use tables to align KPIs and explainers side by side
  • Add > blockquotes as callouts for assumptions or warnings
  • Drop [links](...) to help viewers jump to related docs
  • Embed inline `code` to reference variables or query snippets
  • Combine headings, lists, and images for mini write-ups