---
url: https://chartbuddy.io/embed/docs/configuration/title-subtitle-footnote.md
---
> Docs index: [llms.txt](https://chartbuddy.io/embed/docs/llms.txt)
# Title, subtitle & footnote
These are **special docked text boxes**: fixed keys (`title`, `subtitle`, `footnote`) that reserve plot space. Free callouts live in `multilines` — see [Text boxes](https://chartbuddy.io/embed/docs/configuration/text-boxes.md).
They are not free-positioned like the [legend](https://chartbuddy.io/embed/docs/configuration/legend.md) either (legend has its own dock / free model).
```js
title: {
visible: true,
text: 'Revenue vs Costs',
fontSize: 11,
},
subtitle: {
visible: true,
text: 'USD millions',
fontSize: 11,
},
footnote: {
visible: true,
text: 'Source: Company filings, FY2025.',
fontSize: 6,
},
```
All three default to **`visible: false`** on every chart type. Defaults may still carry placeholder HTML in `text` while hidden — set `text: ''` when you want a clean hidden field.
***
## Where each sits
| Element | Path | Band | Default `fontSize` | Typical use |
|---|---|---|---|---|
| Title | `title` | Top of the chart | `11` | Chart name / main claim |
| Subtitle | `subtitle` | Top, under the title | `11` | Units, period, clarifying line |
| Footnote | `footnote` | Bottom of the chart | `6` | Source, caveat, legal line |
**Top stack (top → plot):** title → subtitle → (optional top legend) → axes / plot…\
**Bottom stack (plot → bottom):** … axes → (optional bottom legend) → **footnote** → canvas edge.
If both title and subtitle are off, a small top padding is still reserved so the plot does not sit flush against the top.
There is **no** position enum and **no** free `x` / `y` for authors. Layout percentages are recomputed every draw from the offset stack — omit them in hand-authored config.
***
## Shared fields
Same multiline text shape as [text boxes](https://chartbuddy.io/embed/docs/configuration/text-boxes.md), with docked defaults:
| Field | Type | Notes |
|---|---|---|
| `visible` | boolean | Hidden unless `true` **and** `text` is non-empty |
| `text` | string | Plain text **or** inline HTML (see below) |
| `fontSize` | number | Points (footnote defaults smaller) |
| `id` | string | Stable: `multiline-title` / `multiline-subtitle` / `multiline-footnote` (usually leave default) |
Optional parallel fields sometimes appear in exports (`fontFamily`, `fontColor`, `backgroundColor`). Face and color are usually embedded in the HTML `text` instead. Leave `movable`, `deletable`, `width`, `height`, and percentage coords alone — runtime owns them.
***
## Text content
`text` accepts **inline HTML**, sanitized for safe tags (`font`, `b` / `i` / `u`, `br`, …).
Plain string (merge-friendly):
```js
title: { visible: true, text: 'Revenue vs Costs' }
```
Editor-style HTML (face + color):
```js
title: {
visible: true,
fontSize: 11,
text: 'Revenue vs Costs',
},
subtitle: {
visible: true,
fontSize: 11,
text: 'USD millions',
},
footnote: {
visible: true,
fontSize: 6,
text: 'Source: Company filings. Unaudited.',
},
```
Line breaks: use `
` inside `text`. Bold / italic: ``, ``, etc.
House-style / brand tools may rewrite the `` / color inside `text` when applying a font family.
***
## Title
Main headline above the plot.
```js
title: {
visible: true,
text: 'Revenue vs Costs',
fontSize: 14,
}
```
Soft-delete / hide in the editor sets `title.visible = false` (does not remove the object). Showing an empty title from the UI may seed placeholder copy — prefer an explicit string in embed configs.
***
## Subtitle
Secondary line under the title (units, time range, “Indexed to 100”, …).
```js
subtitle: {
visible: true,
text: 'USD millions · FY2024–FY2025',
fontSize: 11,
}
```
Starter charts often leave a placeholder subtitle in defaults. **Hide it unless intentional:**
```js
subtitle: { visible: false, text: '' }
```
***
## Footnote
Source / caveat line in the **bottom** band. Same shape as title/subtitle; smaller default type. There is no separate “auto sources” pipeline — content is whatever you put in `text`.
```js
footnote: {
visible: true,
text: 'Source: Company filings, FY2025. Unaudited.',
fontSize: 6,
}
```
When a bottom legend is also on, the footnote sits below that legend in the bottom stack.
***
## Visibility cheat sheet
```js
// Show title only
title: { visible: true, text: 'Mix by quarter' },
subtitle: { visible: false, text: '' },
footnote: { visible: false, text: '' },
// Title + source line
title: { visible: true, text: 'Mix by quarter' },
subtitle: { visible: false, text: '' },
footnote: { visible: true, text: 'Source: Internal sales.' },
// Hide all furniture cleanly after a deep-merge
title: { visible: false, text: '' },
subtitle: { visible: false, text: '' },
footnote: { visible: false, text: '' },
```
`title`, `subtitle`, and `footnote` are deep-merged on partial `setChartData` / `update` — see [Defaults & merging](https://chartbuddy.io/embed/docs/concepts/defaults.md).
***
## Tips
* Prefer plain `text` for embed configs; use HTML when you need face/color/bold.
* Do not hand-author `leftXPercentage` / `topYPercentage` — they are overwritten on draw.
* These blocks reserve plot space (like a docked legend), so long wrapping titles shrink the plot vertically.
* For free callouts on the plot, use [text boxes](https://chartbuddy.io/embed/docs/configuration/text-boxes.md) (`multilines`).