Core blocks
The core block library covers the typographic primitives every post / page needs: paragraphs, headings, lists, images, quotes, code, separators. They're registered into the editor unconditionally — neither plugins nor themes can disable them.
The blocks live in src/core/coreBlocks.ts and are registered via registerCoreBlock() (a variant of registerBlock that survives plugin disable/reset cycles).
Text blocks
Paragraph
The default block type. Hitting Enter at the end of any block creates a new paragraph below.
- Inserter: Type
/then "paragraph" or Enter on an empty line - Inspector: none — paragraphs have no special properties
- Markdown round-trip: standard
\n\nseparator - Inline marks supported: bold, italic, underline, strike, inline code, link
Heading
Headings H1 through H6. The block-level toolbar's level dropdown picks the level; each is rendered via the corresponding <h1>-<h6> tag.
- Inserter:
/headingthen pick level (H1-H6 are separate inserter entries) - Inspector: level (H1-H6)
- Markdown round-trip:
# h1,## h2, …,###### h6 - SEO note: typically the post title is the page's H1 (themes inject it). Use H2 onwards for body sections to avoid two H1s on the same page.
Bullet list / Ordered list
Lists with arbitrary nesting. Tab to indent a list item; Shift+Tab to outdent.
- Inserter:
/bullet listor/ordered list - Markdown round-trip: standard
-,1. - Block toolbar acts on the entire list (not per-item) — to reorder items, drag them inside the list (Tiptap handles that).
Blockquote
Indented quote block. Useful for testimonials, citations, callouts.
- Inserter:
/quote - Markdown round-trip:
>prefixed lines - Inline marks supported: same as paragraph
Code block
A monospaced fenced code block. Syntax highlighting is NOT done in the editor (would need a heavy dependency); themes can apply highlighter CSS post-publish if they want.
- Inserter:
/code - Inspector: language hint (used as the
<code class="language-…">) - Markdown round-trip: triple-backtick fenced blocks with language hint
Horizontal rule
A separator line. Visual break between sections.
- Inserter:
/separatoror---then Enter - Markdown round-trip:
---
Media blocks
Image
Insert an image from your media library OR from an external URL.
- Inserter:
/image - Inspector:
- Media — opens the media picker; choose an existing image or upload a new one
- From URL — paste an external image URL (no resize, browser loads directly)
- Alt text — for screen readers + SEO
- Caption — optional, surfaced by themes that render figure captions
- Format — pick a variant (small / medium / large) — only when the image came from the library
- Link to — none / media URL / custom URL
- Markdown round-trip:
for plain images; figure markup for captioned images
Embed (the four built-in providers)
YouTube, Vimeo, Twitter/X, Spotify. See Embeds for the full reference.
- Inserter:
/youtube,/vimeo,/twitter,/spotify - Inspector: paste a URL → the block parses it and stores the provider id
- Markdown round-trip:
<div data-cms-embed="<provider>" data-id="<x>" data-url="<y>"></div>markers
Layout blocks
Custom HTML
Paste raw HTML. Useful for:
- Embedding code from third-party services that don't have a dedicated provider
- Custom widgets (Stripe checkout buttons, Calendly, …)
- Overriding default post layout for one specific post
See Custom HTML for the full reference.
Columns
Multi-column layout primitive.
- Inserter:
/columns - Inspector: column count (2-6), per-column width ratio
- Markdown round-trip:
<div data-cms-block="core/columns">marker; published HTML uses CSS grid
See Columns.
Theme blocks
The active theme can register additional blocks that show up in the inserter under their theme namespace (e.g. magazine/hero-split, corporate/services-grid). See Theme blocks.
Inserter behaviour
The / inserter (FloatingMenu in Tiptap parlance) appears when:
- You hit
/on an empty line - You click the + button in the gutter next to an empty paragraph
The list shows blocks grouped by category:
- Text — paragraph, headings, lists, quote, code
- Media — image, embed
- Layout — columns, custom HTML
- Embed — youtube, vimeo, twitter, spotify
- Advanced — anything that doesn't fit elsewhere
- Theme — blocks contributed by the active theme
Type to filter — /img highlights Image, /yt highlights YouTube. Enter inserts.
Block-level toolbar
Each top-level block has a hover toolbar in its top-right corner with Move up / Move down / Duplicate / Delete. The toolbar acts on the depth-1 ancestor — if your cursor is in a list item, the toolbar reorders the entire list.
The toolbar's position is recomputed on every selectionUpdate / transaction so it tracks the active block as you type / scroll. mousedown.preventDefault() on the toolbar prevents the editor from blurring before the command dispatches.
Continue
- Theme blocks — blocks that ship with the active theme
- Embeds — YouTube, Vimeo, Twitter, Spotify
- Custom HTML — raw HTML insertions
- Columns — multi-column layout
- Block authoring (for plugin / theme authors)