Skip to content

Block Editor: support inline contentlet references inside paragraphs #35473

Description

@fmontes

Summary

Today the Block Editor only supports contentlets as full block-level elements. Users want to embed a contentlet inline within a paragraph — similar to Notion's inline mentions — so the contentlet's title (or other display field) renders as a live, linked reference inside the surrounding text.

block-editor-inline.mp4

Use case

A content contributor writes a paragraph and wants to reference another contentlet (e.g. a product, page, or "MMC link") inline within the sentence. Today they can only:

  • Type a static link (loses single source of truth — breaks if the target's URL/title changes), or
  • Drop a full block-level contentlet (breaks the paragraph flow).

The inline contentlet would resolve both:

  • Live reference: title/label updates automatically when the source contentlet changes
  • Single source of truth: links and metadata stay in sync
  • Inline rendering: the reference sits within the paragraph, not as a standalone block

Behavior

  • User types / (or similar trigger) inside a paragraph
  • Selects "Inline contentlet" (or similar)
  • Picks a contentlet via the existing selector
  • The contentlet renders inline, showing the title (configurable display field) as a linked reference
  • The reference stays bound to the contentlet ID, not to the title text — so renames propagate

Scope notes

This is not a breaking change but it touches multiple layers:

  • Block Editor UI (new inline node type)
  • Stored JSON schema (inline content node)
  • VTL rendering (must render inline, not as a block)
  • SDK rendering (consumer must be able to provide a custom inline component)
  • Documentation

Tiptap (the underlying library) has a community extension for inline mentions/references that we should evaluate as a starting point rather than building from scratch.

v1 scope

Inline contentlet reference (Notion-style mention) only. Other inline cases (buttons, custom blocks) deferred.

Open questions

  • Display field configuration: per content type, or global default?
  • Rendering API for SDK consumers — how do they register a component for the inline node?
  • VTL fallback rendering — what does the default look like?

Metadata

Metadata

Assignees

No one assigned
    No fields configured for Feature.

    Projects

    Status
    New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions