MkDocs Material StudioWrite MkDocs Material documentation the way it will look on the site. A
preview with the real Material styles, editing straight in the rendered page, the
site navigation around it and a form-based editor for
FeaturesThe preview looks like the published siteThe whole Material reference is drawn: admonitions, content tabs, code blocks with highlighting and line numbers, tables, Mermaid diagrams, formulas, footnotes, annotations, card grids, icons and emoji, task lists and definition lists. It updates as you type.
Edit the page, not the MarkdownMkDocs: Open in Visual Editor — you type in the rendered page. The regular text editor is untouched; the visual one opens only when you ask for it.
The site around the pageTwo buttons — Header and Navigation — put the site around what you are
reading: the logo, the name, the section tabs and the repository link on top, the
page list from The MkDocs panel in the explorer shows the same navigation plus a “not in
navigation” section — pages in
|
| You pick | It writes |
|---|---|
| Admonition | !!! note "Title", or ??? / ???+ when collapsible |
| Content tabs | === "Tab 1" blocks with the body indented under each |
| Code block | ```python title="setup.py" hl_lines="2 3" |
| Button | [Text](https://example.com){ .md-button .md-button--primary } |
| Keyboard keys | ++ctrl+alt+del++ |
| Footnote | [^1] at the cursor and [^1]: the text below |
| Abbreviation | *[HTML]: HyperText Markup Language |
| Snippet | --8<-- "shared/intro.md" |
Dark theme
The page follows the VS Code theme, and the toolbar button overrides it until you
switch back. Both schemes take their colours from theme.palette in your
mkdocs.yml.

Interface language
English by default. mkdocsStudio.language switches the panels to English,
Deutsch, Español, Français, Português (Brasil), 简体中文 or 日本語; auto
follows the display language of VS Code. The change applies immediately.
Command names in the command palette and the setting descriptions are translated by VS Code itself, so those follow its display language rather than this setting.
Getting started
- Install from the Extensions view (
Cmd/Ctrl+Shift+X), or runext install azhig.mkdocs-material-studioin the command palette. Every release also attaches a.vsixto the releases page — install it withcode --install-extension <file>.vsix. - Run Developer: Reload Window after installing, so VS Code picks up the extension settings.
- Open the folder with your documentation. The project is found by
mkdocs.yml(ormkdocs.yaml), which may live in a nested directory. - Open a
.mdfile and click the book icon in the editor's top-right corner — the preview opens as a full tab. HoldAltto put it side by side with the text instead. - To edit visually:
Cmd/Ctrl+Shift+P→ MkDocs: Open in Visual Editor.
Requirements
None. No Python, no mkdocs installation, no local server — the preview is
rendered by the extension itself.
The extension does not run mkdocs serve and does not manage a server. To see
the built site with search, plugins and mkdocstrings, run mkdocs serve in the
terminal and open it in a browser.
Commands
All of them live under the MkDocs category in the command palette.
| Command | What it does |
|---|---|
| Open Preview | The preview as a full tab, following the current file |
| Open Preview to the Side | The classic split: text on one side, the page on the other |
| Open in Visual Editor | Editing inside the rendered page |
| Open as Text (Markdown) | Back to the plain editor (button in the visual editor) |
| Insert Material Component | The component palette for the plain editor |
| MkDocs Settings (Visual Editor) | The form-based mkdocs.yml editor |
| Open mkdocs.yml as Text | The config in the plain YAML editor |
| New Page | A page in docs/, added to nav |
| New Section | A section in nav |
| Rename | Renames a page and its nav entry (tree menu) |
| Delete | Deletes a page and its nav entry (tree menu) |
| Refresh Tree | Re-reads mkdocs.yml and the pages |
| Show Log | The extension log — start here when something looks wrong |
Keyboard shortcuts
In the visual editor. Cmd on macOS, Ctrl elsewhere.
| Action | Shortcut |
|---|---|
| Bold / italic / underline | Cmd+B · Cmd+I · Cmd+U |
| Strikethrough / code | Cmd+Shift+S · Cmd+Shift+M |
| Link / clear formatting | Cmd+K · Cmd+Shift+\ |
| Undo / redo | Cmd+Z · Cmd+Shift+Z |
| Normal text, headings 1–6 | Cmd+Alt+0 … Cmd+Alt+6 |
| Bulleted / numbered / task list | Cmd+Shift+8 · Cmd+Shift+7 · Cmd+Shift+6 |
| Quote | Cmd+Shift+9 |
| Insert a component | Cmd+Alt+ a letter — see below |
| Quick insert | / in an empty paragraph |
| Select the block, then around | Esc, again for its container |
| Copy / cut that block | Cmd+C · Cmd+X with nothing selected |
Component letters: T table, P image, C code, D divider, A admonition,
Shift+T content tabs, E icons and emoji, G grid, M diagram, B button,
N annotation, F footnote, K tooltip, Q formula.
Any of them can be reassigned: the gear on the toolbar → Keyboard
shortcuts. Click a shortcut and press a new one; Backspace disables it.
That popup, not VS Code's own Keyboard Shortcuts editor, is where these
live.
While the visual editor has focus these combinations belong to it, so Cmd+B
makes text bold instead of collapsing the side bar. Only the ones in the list
are taken: everything else — saving, find, the command palette — reaches VS
Code untouched, and a shortcut you reassign hands its old key straight back.
Extension settings
| Setting | Default | What it does |
|---|---|---|
mkdocsStudio.language |
auto |
Interface language of the panels; auto follows VS Code |
mkdocsStudio.followActiveEditor |
true |
The preview follows the active Markdown editor |
mkdocsStudio.scrollSync |
true |
Synchronized scrolling between the editor and the preview |
mkdocsStudio.showSiteHeader |
false |
Show the site header; the Header button toggles it |
mkdocsStudio.showSiteNav |
false |
Show the page list on the left; the Navigation button toggles it |
mkdocsStudio.showToc |
false |
Show the “On this page” panel; the Contents button toggles it |
mkdocsStudio.pageBackground |
material |
material — the colour of the Material scheme; editor — the VS Code theme's background |
mkdocsStudio.palette.light.primary |
"" |
Primary colour of the light scheme; theme.palette in mkdocs.yml wins |
mkdocsStudio.palette.light.accent |
"" |
Accent colour of the light scheme — links and active elements |
mkdocsStudio.palette.dark.primary |
"" |
Primary colour of the dark (slate) scheme |
mkdocsStudio.palette.dark.accent |
"" |
Accent colour of the dark scheme |
mkdocsStudio.imagePasteFolder |
assets |
Where pasted and dropped images are saved, relative to the current file |
mkdocsStudio.inlineFormatting |
both |
Where formatting appears: selection, toolbar or both |
mkdocsStudio.toolbarButtons |
table, image, code, divider | Components pinned to the visual editor toolbar |
mkdocsStudio.keybindings |
{} |
Shortcut overrides; only the differences from the defaults are stored |
An example for settings.json — a German interface, images kept in images/
next to the page, and formatting shown only on a selection:
{
"mkdocsStudio.language": "de",
"mkdocsStudio.imagePasteFolder": "images",
"mkdocsStudio.inlineFormatting": "selection",
"mkdocsStudio.showSiteNav": true,
"mkdocsStudio.palette.dark.accent": "amber",
}
Shortcuts are written the same way the editor stores them — mod is Cmd on
macOS and Ctrl elsewhere, an empty string turns one off:
{
"mkdocsStudio.keybindings": {
"insert.admonition": "mod+alt+w",
"format.underline": "",
},
}
Without mkdocs.yml
The extension works in a plain repository too. With no config the Navigation
button shows a Markdown registry: every .md file in the workspace, skipping
node_modules, dist, site, vendor and other service directories. Titles
come from the first H1, and the order from the directory's table of contents —
SUMMARY.md, otherwise README.md or index.md, then everything else
alphabetically. No file is lost, even when nothing links to it.
Troubleshooting
A ::: identifier block shows a card instead of the reference. Those pages
are assembled by the mkdocstrings Python plugin when the site is built. Run
mkdocs serve and read that page in a browser.
Project colours and styles are missing. Check where mkdocs.yml is:
it is searched for across the workspace, but node_modules, site, dist,
build, vendor and .venv are skipped. In a monorepo, a page uses the nearest
config up the tree.
Buttons do not respond, or settings are not saved. Run Developer: Reload Window after updating the extension.
Nothing happens in a restricted window. The extension reads your
mkdocs.yml, the files your pages include and your stylesheets, so it needs a
workspace you trust — Workspaces: Manage Workspace Trust. For the same reason
a link opens externally only when it is http, https or mailto, and an
include (--8<--) is read only from inside the project.
Something rendered incorrectly. Open MkDocs: Show Log — it says which config was read and what failed to load.
Release notes
See CHANGELOG.md.
Contributing
Bug reports and pull requests are welcome — start with CONTRIBUTING.md. Found a security problem? Please report it privately, see SECURITY.md.
License
MIT — see LICENSE. Material styles and icons come from the mkdocs-material package (MIT); third-party components are listed in THIRD_PARTY_NOTICES.md. This extension is not affiliated with the MkDocs or MkDocs Material projects.


