This page predates the current package split. Use the current package guides for checked installation, public imports, and onboarding examples. The detailed examples below have not all been revalidated.
Extensions API
The Extensions API provides built-in extensions and helper functions for creating extension sets.
Built-in Extensions
All built-in extensions implement the Extension interface and can be used directly or customized with options.
TextExtension
Provides text input functionality (insert, delete, replace).
Location: packages/extensions/src/text.ts
Options:
interface TextExtensionOptions {
enabled?: boolean; // Whether extension is enabled (default: true)
}
Commands:
replaceText- Replaces text in selection range
Example:
import { TextExtension } from '@barocss/extensions';
const extension = new TextExtension({ enabled: true });
editor.use(extension);
DeleteExtension
Provides delete functionality (Backspace, Delete keys).
Location: packages/extensions/src/delete.ts
Options:
interface DeleteExtensionOptions {
enabled?: boolean;
}
Commands:
deleteSelection- Deletes selected contentdeleteBackward- Deletes backwarddeleteForward- Deletes forward
Example:
import { DeleteExtension } from '@barocss/extensions';
const extension = new DeleteExtension();
editor.use(extension);
BoldExtension
Provides bold formatting functionality.
Location: packages/extensions/src/bold.ts
Options:
interface BoldExtensionOptions {
enabled?: boolean;
keyboardShortcut?: string; // Default: 'Mod+b'
}
Commands:
toggleBold- Toggles bold formatting
Keybindings:
Mod+b- Toggle bold (default)
Example:
import { BoldExtension, createBoldExtension } from '@barocss/extensions';
// Direct instantiation
const extension = new BoldExtension({ keyboardShortcut: 'Mod+b' });
// Or use convenience function
const extension = createBoldExtension({ keyboardShortcut: 'Mod+b' });
editor.use(extension);
ItalicExtension
Provides italic formatting functionality.
Location: packages/extensions/src/italic.ts
Options:
interface ItalicExtensionOptions {
enabled?: boolean;
keyboardShortcut?: string; // Default: 'Mod+i'
}
Commands:
toggleItalic- Toggles italic formatting
Keybindings:
Mod+i- Toggle italic (default)
Example:
import { ItalicExtension, createItalicExtension } from '@barocss/extensions';
const extension = createItalicExtension();
editor.use(extension);
UnderlineExtension
Provides underline formatting functionality. Supports cross-node selections.
Location: packages/extensions/src/underline.ts
Commands:
toggleUnderline- Toggles underline formatting (works across multiple nodes)
Example:
import { UnderlineExtension } from '@barocss/extensions';
const extension = new UnderlineExtension();
editor.use(extension);
StrikethroughExtension
Provides strikethrough formatting functionality. Supports cross-node selections.
Location: packages/extensions/src/strikethrough.ts
Commands:
toggleStrikethrough- Toggles strikethrough formatting (works across multiple nodes)
Example:
import { StrikethroughExtension } from '@barocss/extensions';
const extension = new StrikethroughExtension();
editor.use(extension);
HeadingExtension
Provides heading functionality. The removeHeading command correctly transforms a heading back to a paragraph using transformNode within a transaction (supports undo/redo).
Location: packages/extensions/src/heading.ts
Options:
interface HeadingExtensionOptions {
enabled?: boolean;
levels?: number[]; // Supported heading levels (default: [1, 2, 3, 4, 5, 6])
}
Commands:
setHeading- Sets heading levelremoveHeading- Converts heading to paragraph (viatransformNode('paragraph'))toggleHeading- Toggles heading on/off
Keybindings:
Mod+Alt+1- Set heading level 1Mod+Alt+2- Set heading level 2Mod+Alt+3- Set heading level 3Mod+Alt+4- Set heading level 4Mod+Alt+5- Set heading level 5Mod+Alt+6- Set heading level 6
Example:
import { HeadingExtension, createHeadingExtension } from '@barocss/extensions';
const extension = createHeadingExtension({ levels: [1, 2, 3] });
editor.use(extension);
ListExtension
Provides bullet list and ordered list functionality.
Location: packages/extensions/src/list.ts
Commands:
toggleBulletList- Toggles unordered (bullet) listtoggleOrderedList- Toggles ordered (numbered) listsplitListItem- Splits list item at cursor (Enter key behavior in lists)
Example:
import { ListExtension } from '@barocss/extensions';
const extension = new ListExtension();
editor.use(extension);
BlockquoteExtension
Provides blockquote functionality.
Location: packages/extensions/src/blockquote.ts
Commands:
toggleBlockquote- Toggles blockquote on/off
Example:
import { BlockquoteExtension } from '@barocss/extensions';
const extension = new BlockquoteExtension();
editor.use(extension);
ParagraphExtension
Provides paragraph functionality.
Location: packages/extensions/src/paragraph.ts
Commands:
insertParagraph- Inserts a new paragraphsetParagraph- Sets paragraph type
Example:
import { ParagraphExtension } from '@barocss/extensions';
const extension = new ParagraphExtension();
editor.use(extension);
IndentExtension
Provides indentation functionality.
Location: packages/extensions/src/indent.ts
Options:
interface IndentExtensionOptions {
enabled?: boolean;
}
Commands:
indent- Indents blockoutdent- Outdents block
Keybindings:
Tab- IndentShift+Tab- Outdent
Example:
import { IndentExtension } from '@barocss/extensions';
const extension = new IndentExtension();
editor.use(extension);
MoveSelectionExtension
Provides selection movement functionality.
Location: packages/extensions/src/move-selection.ts
Commands:
moveSelectionUp- Moves selection upmoveSelectionDown- Moves selection downmoveSelectionLeft- Moves selection leftmoveSelectionRight- Moves selection right
Keybindings:
ArrowUp- Move selection upArrowDown- Move selection downArrowLeft- Move selection leftArrowRight- Move selection right
Example:
import { MoveSelectionExtension } from '@barocss/extensions';
const extension = new MoveSelectionExtension();
editor.use(extension);
MoveBlockExtension
Provides block movement functionality.
Location: packages/extensions/src/move-block.ts
Options:
interface MoveBlockExtensionOptions {
enabled?: boolean;
}
Commands:
moveBlockUp- Moves block upmoveBlockDown- Moves block down
Keybindings:
Mod+ArrowUp- Move block upMod+ArrowDown- Move block down
Example:
import { MoveBlockExtension, createMoveBlockExtension } from '@barocss/extensions';
const extension = createMoveBlockExtension();
editor.use(extension);
SelectAllExtension
Provides select all functionality.
Location: packages/extensions/src/select-all.ts
Commands:
selectAll- Selects all content
Keybindings:
Mod+a- Select all
Example:
import { SelectAllExtension } from '@barocss/extensions';
const extension = new SelectAllExtension();
editor.use(extension);
CopyPasteExtension
Provides clipboard functionality.
Location: packages/extensions/src/copy-paste.ts
Commands:
copy- Copies selected contentcut- Cuts selected contentpaste- Pastes content at selection
Keybindings:
Mod+c- CopyMod+x- CutMod+v- Paste
Example:
import { CopyPasteExtension } from '@barocss/extensions';
const extension = new CopyPasteExtension();
editor.use(extension);
EscapeExtension
Provides escape functionality.
Location: packages/extensions/src/escape.ts
Commands:
escape- Handles escape key
Keybindings:
Escape- Escape
Example:
import { EscapeExtension } from '@barocss/extensions';
const extension = new EscapeExtension();
editor.use(extension);
Extension Factory Functions
createCoreExtensions(): Extension[]
Creates core extensions (required extensions that are always included by default).
Returns:
Extension[]- Array of core extensions
Includes:
TextExtension- Basic text editingDeleteExtension- Delete commandParagraphExtension- Basic structureMoveSelectionExtension- Selection movementSelectAllExtension- Select allIndentExtension- Structural indentationCopyPasteExtension- Clipboard operationsHardBreakExtension- Line break (Shift+Enter)
Note: Core extensions are automatically registered in Editor constructor, so they are excluded from other extension sets.
Example:
import { createCoreExtensions } from '@barocss/extensions';
const coreExtensions = createCoreExtensions();
// Use if you want to manually manage core extensions
createBasicExtensions(): Extension[]
Creates basic extensions (formatting extensions).
Returns:
Extension[]- Array of basic extensions
Includes:
BoldExtension- Bold formattingItalicExtension- Italic formattingHeadingExtension- Heading supportListExtension- Bullet/ordered list supportBlockquoteExtension- Blockquote support
Note: Core extensions are automatically registered, so they are excluded.
Example:
import { createBasicExtensions } from '@barocss/extensions';
const basicExtensions = createBasicExtensions();
editor.use(...basicExtensions);
ExtensionSets
Predefined extension sets for common use cases.
Location: packages/extensions/src/index.ts
ExtensionSets.basic()
Basic text editing extensions (Bold, Italic, Underline only).
Returns:
Extension[]- Array of extensions
Includes:
BoldExtensionItalicExtensionUnderlineExtension
Example:
import { ExtensionSets } from '@barocss/extensions';
const extensions = ExtensionSets.basic();
editor.use(...extensions);
ExtensionSets.rich()
Full rich text editing extensions (all formatting, rich content, marks, document structure).
Returns:
Extension[]- Array of extensions
Includes all createRichExtensions() — see the full list above.
Example:
import { ExtensionSets } from '@barocss/extensions';
const extensions = ExtensionSets.rich();
editor.use(...extensions);
ExtensionSets.minimal()
Minimal extensions (no additional extensions).
Returns:
Extension[]- Empty array
Example:
import { ExtensionSets } from '@barocss/extensions';
const extensions = ExtensionSets.minimal();
// Returns: []
Convenience Functions
createBoldExtension(options?: BoldExtensionOptions): BoldExtension
Creates a BoldExtension instance.
Parameters:
options?: BoldExtensionOptions- Optional options
Returns:
BoldExtension- BoldExtension instance
Example:
import { createBoldExtension } from '@barocss/extensions';
const extension = createBoldExtension({ keyboardShortcut: 'Mod+b' });
editor.use(extension);
createItalicExtension(options?: ItalicExtensionOptions): ItalicExtension
Creates an ItalicExtension instance.
Parameters:
options?: ItalicExtensionOptions- Optional options
Returns:
ItalicExtension- ItalicExtension instance
createHeadingExtension(options?: HeadingExtensionOptions): HeadingExtension
Creates a HeadingExtension instance.
Parameters:
options?: HeadingExtensionOptions- Optional options
Returns:
HeadingExtension- HeadingExtension instance
createMoveBlockExtension(options?: MoveBlockExtensionOptions): MoveBlockExtension
Creates a MoveBlockExtension instance.
Parameters:
options?: MoveBlockExtensionOptions- Optional options
Returns:
MoveBlockExtension- MoveBlockExtension instance
Complete Examples
Example 1: Using Core Extensions Only
import { Editor } from '@barocss/editor-core';
// Core extensions are automatically registered
const editor = new Editor();
Example 2: Adding Basic Extensions
import { Editor } from '@barocss/editor-core';
import { createBasicExtensions } from '@barocss/extensions';
const editor = new Editor({
extensions: createBasicExtensions()
});
Example 3: Using Extension Sets
import { Editor } from '@barocss/editor-core';
import { ExtensionSets } from '@barocss/extensions';
const editor = new Editor({
extensions: ExtensionSets.rich()
});
Example 4: Custom Extension Combination
import { Editor } from '@barocss/editor-core';
import {
BoldExtension,
ItalicExtension,
HeadingExtension,
UnderlineExtension,
StrikethroughExtension
} from '@barocss/extensions';
const editor = new Editor({
extensions: [
new BoldExtension(),
new ItalicExtension(),
new HeadingExtension({ levels: [1, 2, 3] }),
new UnderlineExtension(),
new StrikethroughExtension()
]
});
Example 5: Customizing Extension Options
import { Editor } from '@barocss/editor-core';
import {
BoldExtension,
ItalicExtension,
HeadingExtension
} from '@barocss/extensions';
const editor = new Editor({
extensions: [
new BoldExtension({
enabled: true,
keyboardShortcut: 'Mod+Shift+b' // Custom shortcut
}),
new ItalicExtension({
enabled: true,
keyboardShortcut: 'Mod+Shift+i'
}),
new HeadingExtension({
enabled: true,
levels: [1, 2, 3] // Only support h1, h2, h3
})
]
});
Rich Content Extensions
LinkExtension
Provides link insertion and editing functionality.
Commands: insertLink, removeLink
ImageExtension
Provides image insertion functionality.
Commands: insertImage
CodeBlockExtension
Provides code block functionality.
Commands: insertCodeBlock, toggleCodeBlock
HorizontalRuleExtension
Provides horizontal rule insertion.
Commands: insertHorizontalRule
TableExtension
Provides table creation and editing (bTable, bTableRow, bTableCell, etc.).
Commands: insertTable
CalloutExtension
Provides callout/admonition blocks (info, warning, error, success, note, tip).
Commands: insertCallout
ChecklistExtension
Provides checklist/task list functionality. Uses transactions for undo/redo support.
Commands: insertChecklist, toggleChecklistItem
MathBlockExtension
Provides math equation blocks (KaTeX).
Commands: insertMathBlock
CommentExtension
Provides comment/annotation functionality (commentThread).
Commands: insertComment
HardBreakExtension
Provides line break within a block (Shift+Enter).
Commands: insertHardBreak
PageBreakExtension
Provides page break insertion (atom block).
Commands: insertPageBreak
MathInlineExtension
Provides inline math equation insertion (KaTeX).
Commands: insertMathInline — payload: { tex?: string }
PullQuoteExtension
Provides pull quote blocks (distinct from blockquote).
Commands: insertPullQuote — payload: { text?: string }
ColumnsExtension
Provides multi-column layout (columns/column nodes).
Commands:
insertColumns— payload:{ count?: number }(default: 2)addColumn— payload:{ columnsId: string }removeColumn— payload:{ columnsId: string, columnId: string }
TocExtension
Provides table of contents insertion (atom block).
Commands: insertToc
DetailsExtension
Provides collapsible content blocks (bDetails/bSummary).
Commands: insertDetails — payload: { summary?: string }
DescriptionListExtension
Provides description list blocks (descList/descTerm/descDef).
Commands:
insertDescriptionListaddDescriptionItem— payload:{ descListId: string }
FigureExtension
Provides figure with caption (bFigure/bFigcaption).
Commands:
insertFigure— payload:{ src?: string, alt?: string, caption?: string }setFigcaption— payload:{ figureId: string, caption?: string }
MediaExtension
Provides video, audio, and embed insertion.
Commands:
insertVideo— payload:{ src: string, poster?: string }insertAudio— payload:{ src: string }insertEmbed— payload:{ provider: string, id: string, title?: string }
Mark Extensions
CodeMarkExtension
Provides inline code mark (Ctrl+E).
Commands: toggleCode
HighlightExtension
Provides text highlight mark with configurable color.
Commands: toggleHighlight — payload: { color?: string } (default: #ffeb3b)
FontColorExtension
Provides text color and background color marks.
Commands:
setFontColor— payload:{ color: string }removeFontColorsetBgColor— payload:{ color: string }removeBgColor
SubSuperExtension
Provides subscript and superscript marks.
Commands: toggleSubscript, toggleSuperscript
FontSizeExtension
Provides font size mark.
Commands:
setFontSize— payload:{ size: string }(e.g.'18px')removeFontSize
FontFamilyExtension
Provides font family mark.
Commands:
setFontFamily— payload:{ family: string }(e.g.'Georgia')removeFontFamily
TextFormattingExtension
Aggregates less-common text-style marks into one extension.
Toggle commands (no additional payload needed):
toggleSmallCaps— smallCaps marktoggleKbd— kbd mark (keyboard key)toggleSpoiler— spoiler mark
Apply commands (require value in payload):
setLetterSpacing— letterSpacing mark ({ value: '0.2em' })setWordSpacing— wordSpacing marksetLineHeight— lineHeight marksetTextShadow— textShadow mark
Multi-attr commands (require attrs in payload):
setBorder— border mark ({ attrs: { style, width, color } })setSpanLang— spanLang mark ({ attrs: { lang, dir } })
MentionExtension
Provides @mention mark.
Commands: insertMention — payload: { id: string }
FootnoteExtension
Provides footnote definition (footnoteDef) and reference (footnoteRef mark).
Commands:
insertFootnote— payload:{ id: string, text?: string }(creates both def + ref)insertFootnoteRef— payload:{ id: string }(ref only)
Inline Atom Extensions
BookmarkExtension
Provides bookmark anchor insertion.
Commands: insertBookmark — payload: { id: string }
FieldExtension
Provides document field insertions (page number, date, title, etc.).
Commands:
insertFieldPageNumberinsertFieldPageCountinsertFieldDateTime— payload:{ format?: string }insertFieldDocTitleinsertFieldAuthor
Document Structure Extension
DocStructureExtension
Aggregates document-level structural blocks.
Commands:
insertDocSection— document sectioninsertDocHeader— document headerinsertDocFooter— document footerinsertBibliography— bibliography blockinsertEndnote— payload:{ attrs: { id: string } }insertIndexBlock— index blockinsertChart— payload:{ attrs: { title?: string, values: string } }
UX Extensions
SlashCommandExtension
Provides slash command menu (type / to see command palette).
FloatingToolbarExtension
Provides floating toolbar that appears on text selection.
ReorderExtension
Provides block-level drag and drop with auto-scroll and ESC cancellation.
Commands: moveBlockToPosition
FindReplaceExtension
Provides find and replace functionality.
Commands: find, findAndReplace
Keybindings: Mod+f (find), Mod+h (find and replace)
createRichExtensions(): Extension[]
Creates all rich content extensions (includes basic + all schema-complete extensions).
Returns: Extension[]
Includes all of createBasicExtensions() plus:
| Category | Extensions |
|---|---|
| Formatting | Underline, StrikeThrough, CodeMark, Highlight, FontColor, SubSuper, FontSize, FontFamily, TextFormatting |
| Rich Content | Link, Image, CodeBlock, HorizontalRule, Table, Checklist, Callout, MathBlock, MathInline, Comment, PageBreak |
| Block Structures | PullQuote, Columns, Toc, Details, DescriptionList, Figure |
| Media | Media (Video, Audio, Embed) |
| Inline Atoms | Mention, Footnote, Bookmark, Field |
| Document | DocStructure |
| Editing | MoveBlock, DragDrop |
Example:
import { createRichExtensions } from '@barocss/extensions';
const richExtensions = createRichExtensions();
editor.use(...richExtensions);
Extension Options Summary
Core Extensions (always included)
| Extension | Keybindings | Commands |
|---|---|---|
TextExtension | - | replaceText |
DeleteExtension | - | deleteSelection, deleteBackward, deleteForward |
ParagraphExtension | - | insertParagraph, setParagraph |
MoveSelectionExtension | Arrow keys, Shift+Arrow | moveSelection*, extendSelection* |
SelectAllExtension | Mod+a | selectAll |
IndentExtension | Tab, Shift+Tab | indent, outdent |
CopyPasteExtension | Mod+c/x/v | copy, cut, paste |
EscapeExtension | Escape | escape |
HardBreakExtension | - | insertHardBreak |
Basic Extensions
| Extension | Keybindings | Commands |
|---|---|---|
BoldExtension | Mod+b | toggleBold |
ItalicExtension | Mod+i | toggleItalic |
HeadingExtension | Mod+Alt+1-6 | setHeading1-6, setHeading, removeHeading |
ListExtension | - | toggleBulletList, toggleOrderedList, splitListItem |
BlockquoteExtension | - | toggleBlockquote |
Rich Extensions — Formatting Marks
| Extension | Commands |
|---|---|
UnderlineExtension | toggleUnderline |
StrikeThroughExtension | toggleStrikeThrough |
CodeMarkExtension | toggleCode |
HighlightExtension | toggleHighlight |
FontColorExtension | setFontColor, removeFontColor, setBgColor, removeBgColor |
SubSuperExtension | toggleSubscript, toggleSuperscript |
FontSizeExtension | setFontSize, removeFontSize |
FontFamilyExtension | setFontFamily, removeFontFamily |
TextFormattingExtension | toggleSmallCaps, toggleKbd, toggleSpoiler, setLetterSpacing, setWordSpacing, setLineHeight, setTextShadow, setBorder, setSpanLang |
MentionExtension | insertMention |
FootnoteExtension | insertFootnote, insertFootnoteRef |
Rich Extensions — Block Content
| Extension | Commands |
|---|---|
LinkExtension | insertLink, removeLink |
ImageExtension | insertImage |
CodeBlockExtension | insertCodeBlock, toggleCodeBlock |
HorizontalRuleExtension | insertHorizontalRule |
PageBreakExtension | insertPageBreak |
TableExtension | insertTable |
ChecklistExtension | insertChecklist, toggleChecklistItem |
CalloutExtension | insertCallout |
MathBlockExtension | insertMathBlock |
MathInlineExtension | insertMathInline |
CommentExtension | insertComment |
PullQuoteExtension | insertPullQuote |
ColumnsExtension | insertColumns, addColumn, removeColumn |
TocExtension | insertToc |
DetailsExtension | insertDetails |
DescriptionListExtension | insertDescriptionList, addDescriptionItem |
FigureExtension | insertFigure, setFigcaption |
MediaExtension | insertVideo, insertAudio, insertEmbed |
BookmarkExtension | insertBookmark |
FieldExtension | insertFieldPageNumber, insertFieldPageCount, insertFieldDateTime, insertFieldDocTitle, insertFieldAuthor |
DocStructureExtension | insertDocSection, insertDocHeader, insertDocFooter, insertBibliography, insertEndnote, insertIndexBlock, insertChart |
UX Extensions
| Extension | Keybindings | Commands |
|---|---|---|
MoveBlockExtension | Mod+ArrowUp/Down | moveBlockUp, moveBlockDown |
ReorderExtension | - | moveBlockToPosition |
FindReplaceExtension | Mod+f, Mod+h | find, findAndReplace |
SlashCommandExtension | / | - |
FloatingToolbarExtension | - | - |
Schema Coverage
All 48 node types and 24 marks in the standard schema have corresponding extensions:
Nodes: 48/48 covered (100%)
Marks: 24/24 covered (100%)
Total commands: 90+
Related
- Extension Design Guide - Creating custom extensions
- Advanced Extension Patterns - Advanced extension patterns
- Editor Core API - Extension interface and lifecycle
- Model Operations API - Using operations in extensions