Skip to main content
Reference status

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 content
  • deleteBackward - Deletes backward
  • deleteForward - 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 level
  • removeHeading - Converts heading to paragraph (via transformNode('paragraph'))
  • toggleHeading - Toggles heading on/off

Keybindings:

  • Mod+Alt+1 - Set heading level 1
  • Mod+Alt+2 - Set heading level 2
  • Mod+Alt+3 - Set heading level 3
  • Mod+Alt+4 - Set heading level 4
  • Mod+Alt+5 - Set heading level 5
  • Mod+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) list
  • toggleOrderedList - Toggles ordered (numbered) list
  • splitListItem - 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 paragraph
  • setParagraph - 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 block
  • outdent - Outdents block

Keybindings:

  • Tab - Indent
  • Shift+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 up
  • moveSelectionDown - Moves selection down
  • moveSelectionLeft - Moves selection left
  • moveSelectionRight - Moves selection right

Keybindings:

  • ArrowUp - Move selection up
  • ArrowDown - Move selection down
  • ArrowLeft - Move selection left
  • ArrowRight - 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 up
  • moveBlockDown - Moves block down

Keybindings:

  • Mod+ArrowUp - Move block up
  • Mod+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 content
  • cut - Cuts selected content
  • paste - Pastes content at selection

Keybindings:

  • Mod+c - Copy
  • Mod+x - Cut
  • Mod+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 editing
  • DeleteExtension - Delete command
  • ParagraphExtension - Basic structure
  • MoveSelectionExtension - Selection movement
  • SelectAllExtension - Select all
  • IndentExtension - Structural indentation
  • CopyPasteExtension - Clipboard operations
  • HardBreakExtension - 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 formatting
  • ItalicExtension - Italic formatting
  • HeadingExtension - Heading support
  • ListExtension - Bullet/ordered list support
  • BlockquoteExtension - 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:

  • BoldExtension
  • ItalicExtension
  • UnderlineExtension

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:

  • insertDescriptionList
  • addDescriptionItem — 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 }
  • removeFontColor
  • setBgColor — 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 mark
  • toggleKbd — kbd mark (keyboard key)
  • toggleSpoiler — spoiler mark

Apply commands (require value in payload):

  • setLetterSpacing — letterSpacing mark ({ value: '0.2em' })
  • setWordSpacing — wordSpacing mark
  • setLineHeight — lineHeight mark
  • setTextShadow — 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:

  • insertFieldPageNumber
  • insertFieldPageCount
  • insertFieldDateTime — payload: { format?: string }
  • insertFieldDocTitle
  • insertFieldAuthor

Document Structure Extension​

DocStructureExtension​

Aggregates document-level structural blocks.

Commands:

  • insertDocSection — document section
  • insertDocHeader — document header
  • insertDocFooter — document footer
  • insertBibliography — bibliography block
  • insertEndnote — payload: { attrs: { id: string } }
  • insertIndexBlock — index block
  • insertChart — 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:

CategoryExtensions
FormattingUnderline, StrikeThrough, CodeMark, Highlight, FontColor, SubSuper, FontSize, FontFamily, TextFormatting
Rich ContentLink, Image, CodeBlock, HorizontalRule, Table, Checklist, Callout, MathBlock, MathInline, Comment, PageBreak
Block StructuresPullQuote, Columns, Toc, Details, DescriptionList, Figure
MediaMedia (Video, Audio, Embed)
Inline AtomsMention, Footnote, Bookmark, Field
DocumentDocStructure
EditingMoveBlock, DragDrop

Example:

import { createRichExtensions } from '@barocss/extensions';

const richExtensions = createRichExtensions();
editor.use(...richExtensions);

Extension Options Summary​

Core Extensions (always included)​

ExtensionKeybindingsCommands
TextExtension-replaceText
DeleteExtension-deleteSelection, deleteBackward, deleteForward
ParagraphExtension-insertParagraph, setParagraph
MoveSelectionExtensionArrow keys, Shift+ArrowmoveSelection*, extendSelection*
SelectAllExtensionMod+aselectAll
IndentExtensionTab, Shift+Tabindent, outdent
CopyPasteExtensionMod+c/x/vcopy, cut, paste
EscapeExtensionEscapeescape
HardBreakExtension-insertHardBreak

Basic Extensions​

ExtensionKeybindingsCommands
BoldExtensionMod+btoggleBold
ItalicExtensionMod+itoggleItalic
HeadingExtensionMod+Alt+1-6setHeading1-6, setHeading, removeHeading
ListExtension-toggleBulletList, toggleOrderedList, splitListItem
BlockquoteExtension-toggleBlockquote

Rich Extensions — Formatting Marks​

ExtensionCommands
UnderlineExtensiontoggleUnderline
StrikeThroughExtensiontoggleStrikeThrough
CodeMarkExtensiontoggleCode
HighlightExtensiontoggleHighlight
FontColorExtensionsetFontColor, removeFontColor, setBgColor, removeBgColor
SubSuperExtensiontoggleSubscript, toggleSuperscript
FontSizeExtensionsetFontSize, removeFontSize
FontFamilyExtensionsetFontFamily, removeFontFamily
TextFormattingExtensiontoggleSmallCaps, toggleKbd, toggleSpoiler, setLetterSpacing, setWordSpacing, setLineHeight, setTextShadow, setBorder, setSpanLang
MentionExtensioninsertMention
FootnoteExtensioninsertFootnote, insertFootnoteRef

Rich Extensions — Block Content​

ExtensionCommands
LinkExtensioninsertLink, removeLink
ImageExtensioninsertImage
CodeBlockExtensioninsertCodeBlock, toggleCodeBlock
HorizontalRuleExtensioninsertHorizontalRule
PageBreakExtensioninsertPageBreak
TableExtensioninsertTable
ChecklistExtensioninsertChecklist, toggleChecklistItem
CalloutExtensioninsertCallout
MathBlockExtensioninsertMathBlock
MathInlineExtensioninsertMathInline
CommentExtensioninsertComment
PullQuoteExtensioninsertPullQuote
ColumnsExtensioninsertColumns, addColumn, removeColumn
TocExtensioninsertToc
DetailsExtensioninsertDetails
DescriptionListExtensioninsertDescriptionList, addDescriptionItem
FigureExtensioninsertFigure, setFigcaption
MediaExtensioninsertVideo, insertAudio, insertEmbed
BookmarkExtensioninsertBookmark
FieldExtensioninsertFieldPageNumber, insertFieldPageCount, insertFieldDateTime, insertFieldDocTitle, insertFieldAuthor
DocStructureExtensioninsertDocSection, insertDocHeader, insertDocFooter, insertBibliography, insertEndnote, insertIndexBlock, insertChart

UX Extensions​

ExtensionKeybindingsCommands
MoveBlockExtensionMod+ArrowUp/DownmoveBlockUp, moveBlockDown
ReorderExtension-moveBlockToPosition
FindReplaceExtensionMod+f, Mod+hfind, 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+