Markdown Kibana Guide: Text Panels for Dashboards (2026)
September 11, 2026 · 9 min read
Markdown Kibana Guide: Add Text Panels to Dashboards
The markdown Kibana renders in a dashboard Text panel is GitHub-flavored Markdown: headings, lists, links, tables, and images that you type into the panel editor and apply. This guide covers where Markdown appears in Kibana, what syntax renders, three copy-paste panel patterns, and the honest answer on styling.
Where Does Markdown Appear in Kibana?
Kibana has three separate places that accept Markdown, and they behave differently. Picking the wrong one is the usual reason a panel won't do what you want.
| Surface | Where you find it | Data variables | Custom CSS | Use it for |
|---|---|---|---|---|
| Dashboard Text panel | Add, then Markdown Text (Stack 9.2+) | No | No | Titles, notes, links, legends |
| TSVB Markdown | Visualize Library, TSVB, Markdown tab | Yes, Handlebars-style | Yes | Text that quotes a metric |
| Canvas markdown element | Canvas workpads | Yes, Handlebars-style | Font arguments | Presentation-style reports |
The dashboard Text panel is the one most people mean by Kibana Markdown, and it's the simplest. Per Elastic's text panel documentation, on Stack 9.2 and later you select Add in the dashboard menu, choose Markdown Text, enter your text, and click Apply. On 9.0 and 9.1 the path is Add panel, Text, then Update. The panel editor has an Editor tab and a Preview tab that you toggle between, so you don't see the rendered result while you type.
TSVB's Markdown mode is a legacy editor. It needs a data view because it's built for pulling series data into the text. Canvas markdown elements live in workpads, and the current docs note that Canvas is only available on upgraded installations that already have workpads. For a new deployment, the Text panel is the right choice.
What Markdown Syntax Renders in a Kibana Text Panel?
Elastic's docs describe the panel as GitHub-flavored Markdown with a Syntax help button in the editor, and the plugin's own README says it's built on EUI's Markdown editor. In practice that gives you the GFM set. Everything in the GitHub Markdown cheat sheet is the reference; this table is the Kibana-specific summary, based on Elastic's GFM statement and EUI's documented plugins. The Syntax help button in your own version is the final word.
| Element | Renders in the Text panel | Notes |
|---|---|---|
Headings # to ###### | Yes | H1 is large; H3 or H4 usually fits a panel better |
| Bold, italic, strikethrough | Yes | Standard **, *, ~~ |
| Bullet and numbered lists | Yes | Nested lists indent with two spaces |
Task lists - [ ] | Yes | Checkboxes show but don't save state |
| Tables | Yes | Pipe tables; column alignment with :---: |
Links [text](url) | Yes | Relative dashboard URLs work for navigation |
Images  | Yes | External URLs only; no upload |
| Fenced code blocks | Yes | Monospace, useful for query snippets |
Emoji shortcodes :warning: | Yes | EUI's Markdown editor supports them |
| Raw HTML and inline styles | Not documented | Treat as unsupported; there's no style hook |
We'd call two of those out. Tables render, which answers the recurring "format Markdown table in Kibana" question, but they take the panel's default font and there's no way to centre or colour them. And images come from a URL, so a logo needs to be hosted somewhere reachable by every viewer's browser. The Markdown image guide covers the syntax and sizing tricks that survive GFM rendering.
Draft the panel text in the editor first. You get a side-by-side preview instead of Kibana's toggle, and because both render GFM, what you see there is what the panel shows after you paste and apply.
Three Kibana Markdown Panel Patterns
These three panels cover most of what teams put in a dashboard's text. Each one pastes straight into a Text panel.
1. Header panel. A title, one-line purpose, owner, and the links a viewer needs. Place it full-width at the top.
### Checkout Service: Production Health
Latency, error rate, and throughput for the checkout API. Refreshes every 30 s.
**Owner:** Payments team | **On-call:** see PagerDuty | **Runbook:** [checkout-runbook](https://wiki.example.com/checkout)
2. Legend panel. A small table that explains thresholds so nobody has to guess what amber means.
| Colour | Meaning | Action |
|---|---|---|
| Green | p95 latency under 300 ms | None |
| Amber | 300 to 800 ms | Watch the next two intervals |
| Red | Over 800 ms or errors above 1% | Page on-call |
3. Navigation bar. Links to sibling dashboards, written as a single line so it stays compact. Use the dashboard's own URL path so it works on any host.
**Dashboards:** [Overview](/app/dashboards#/view/overview-id) | [Checkout](/app/dashboards#/view/checkout-id) | [Payments](/app/dashboards#/view/payments-id) | [Errors](/app/dashboards#/view/errors-id)
Copy the dashboard ID from the address bar of each target dashboard. The Markdown links guide explains relative versus absolute link forms if you need the same panel to work across environments.
Here's the header pattern with a legend combined, ready to edit and paste into a panel.
Can You Style a Markdown Kibana Panel?
Mostly no, and this is the question that dominates forum threads. The dashboard Text panel exposes no CSS field, no background colour setting, and no alignment option. Inline style attributes aren't a documented part of the panel, so wrapping text in a styled <div> doesn't get you a coloured box. A GitHub issue requesting a background colour for Markdown panels, elastic/kibana#242280, was opened in November 2025 and is still open as of this writing.
You can still control heading level (size), emphasis, tables for structure, and horizontal rules between sections. Emoji work as colour cues too; a green or red circle shortcode reads well as a status marker. That's usually enough for a header or legend.
If you need a real colour block, TSVB's Markdown visualization is the workaround. Elastic's TSVB documentation states that it "supports Markdown with Handlebar (mustache) syntax to insert dynamic data, and supports custom CSS". The Panel options tab has a CSS box, so a background colour is one rule away. The costs are that TSVB is a legacy editor, it requires a data view even for text-only panels, and Elastic has deprecated creating TSVB visualizations from index strings.
Markdown Kibana Variables in TSVB and Canvas
The Text panel is static. When you want the text to quote a live number, you're in TSVB or Canvas territory.
In TSVB Markdown mode, you define one or more series on the Data tab, give each a variable name, and reference it in the Markdown with double curly braces, like {{ latency.last.formatted }}. The editor lists the available variables beside the text box. This is how people build "Current p95: 412 ms" sentences that update with the dashboard time range.
Canvas markdown elements go further. Elastic's Canvas function reference documents the markdown function with a content argument, a font style argument, and an openLinksInNewTab boolean that defaults to false. Elastic's own Canvas walkthrough shows Handlebars templates such as {{rows.length}} inside the content, so a markdown element can loop over query rows and print a list. Canvas is the only one of the three surfaces where links can be forced to open in a new tab.
One limitation we've hit: neither TSVB nor Canvas variables work in the dashboard Text panel. If you paste {{ something }} there, it renders as literal braces.
Common Kibana Markdown Mistakes
Building a table with spaces instead of pipes. Aligned columns typed with spaces collapse into one line, because GFM ignores runs of whitespace. Use pipe syntax; the Markdown table guide shows the alignment row.
Expecting an H1 to look like a dashboard title. # renders large and pushes content down. Dashboards already show a title; use ### inside panels.
Linking to a dashboard with a full localhost URL. It breaks the moment someone opens the dashboard from another host. Link to /app/dashboards#/view/<id> instead.
Markdown Kibana FAQ
The markdown Kibana offers comes in three flavours: the static GFM Text panel for headers, legends, and navigation; TSVB Markdown for text with variables and CSS; and Canvas for templated reports. Stick to headings, tables, links, and emoji in the Text panel, and don't fight it for styling. Draft each panel in the editor, preview it, then paste it into the dashboard.