HPuntu199 downloadsCreate, customise and style visual blocks with simple fenced Markdown.
Advanced Markdown Blocks makes ::: the block-level counterpart to **, ==, backticks, and $$ in Obsidian.
[!NOTE] This is an alpha release. The core syntax and settings format are stable enough for real notes, but visual and compatibility refinements are still in active development.
:::definition
A probability distribution describes the relative likelihood of possible outcomes.
:::

The Markdown stays readable and portable. Inside a fence you can use ordinary Obsidian Markdown, including paragraphs, lists, links, images, callouts, code, and maths. Fences can be nested.
The important difference from general extended-Markdown plugins is that a visual block style is the first-class object. Users create, duplicate, adjust, apply, import, and export styles from Obsidian's interface without learning CSS selectors or maintaining snippets.
:::name … ::: fences, including nested blocks.::: at the beginning of a line.With no selection, the apply command wraps the current paragraph. On an empty line it inserts a paired fence and places the cursor inside it.
You can also type ::: at the start of a line, use the arrow keys to choose a style, and press Tab to insert it:
:::warning
This approximation fails near the singularity.
:::
| Fence | Intended use | Default treatment |
|---|---|---|
:::definition |
Terms and formal definitions | Minimal green outline |
:::comment |
Commentary and annotations | Muted shaded text |
:::important |
Key information | Blue accent rail |
:::warning |
Risks and failure conditions | Warm outlined block |
:::example |
Worked examples | Purple dashed accent |
:::aside |
Supplementary material | Quiet neutral rail |
Presets are starting points, not locked themes. Duplicate one, rename the copy, and tune it visually.
:::name on its own line.::: on its own line.%% comments are ignored.:::definition
A **Markov process** obeys the Markov property.
:::example
Brownian motion is a Markov process.
:::
The future depends only on the current state.
:::
Each style accepts CSS declarations such as:
font-family: var(--font-text);
letter-spacing: 0.01em;
You do not need to provide a selector. Advanced Markdown Blocks validates the declarations and rejects selectors, braces, @ rules, URL loading, and executable legacy CSS. This keeps the escape hatch local and intentionally narrower than a general CSS snippet.
Requirements: Node.js 20.19 or newer and npm.
npm ci
npm run build
Copy main.js, manifest.json, and styles.css to:
<vault>/.obsidian/plugins/fenced-blocks/
Reload Obsidian and enable Advanced Markdown Blocks.
npm run dev # watch build
npm run check # typecheck, lint, tests, production build
npm run package # create the release zip in dist/
See CONTRIBUTING.md, RELEASING.md, and SAFETY_REVIEW.md for the project standards and release model.
Advanced Markdown Blocks targets Obsidian 1.13.1 or newer on desktop and mobile. It deliberately focuses on reusable visual formatting rather than Pandoc export semantics, theorem numbering, citations, or definition lists.
Advanced Markdown Blocks works offline and makes no network requests. Normal editing and rendering operate only on the note Obsidian is currently processing. The plugin does not scan the vault in the background.
The Rename :::id in vault action is the sole vault-wide operation. It runs only after the user explicitly requests and confirms a rename, enumerates Markdown files, and updates matching fences through Obsidian's Vault API. Fences inside code blocks and comments are ignored. The action does not create, move, or delete files.
MIT © 2026 Hew Phipps.