content/(plugins)/(functionality)/autoformat.mdx
For the full runtime — dispatch, ownership, selection context, and custom rule authoring — see the Plugin Input Rules guide. This page is the kit-first entry for markdown shortcuts and text substitutions.
<ComponentPreview name="autoformat-demo" /> <PackageInfo>createTextSubstitutionInputRule(...) definitions.inputRules.The fastest way to add common text substitutions is with AutoformatKit.
import { createPlateEditor } from 'platejs/react';
import { AutoformatKit } from '@/components/editor/plugins/autoformat-kit';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
...AutoformatKit,
],
});
Markdown shortcuts live on the plugins that own those features:
import {
BlockquoteRules,
HeadingRules,
HorizontalRuleRules,
} from '@platejs/basic-nodes';
import {
BlockquotePlugin,
H1Plugin,
HorizontalRulePlugin,
} from '@platejs/basic-nodes/react';
import { CodeBlockRules } from '@platejs/code-block';
import { CodeBlockPlugin } from '@platejs/code-block/react';
import { LinkRules } from '@platejs/link';
import { LinkPlugin } from '@platejs/link/react';
import {
BulletedListRules,
OrderedListRules,
TaskListRules,
} from '@platejs/list';
import { ListPlugin } from '@platejs/list/react';
import { MathRules } from '@platejs/math';
import { EquationPlugin, InlineEquationPlugin } from '@platejs/math/react';
const editor = createPlateEditor({
plugins: [
H1Plugin.configure({
inputRules: [HeadingRules.markdown()],
}),
BlockquotePlugin.configure({
inputRules: [BlockquoteRules.markdown()],
}),
HorizontalRulePlugin.configure({
inputRules: [HorizontalRuleRules.markdown({ variant: '-' })],
}),
CodeBlockPlugin.configure({
inputRules: [CodeBlockRules.markdown({ on: 'match' })],
}),
ListPlugin.configure({
inputRules: [
BulletedListRules.markdown({ variant: '-' }),
OrderedListRules.markdown({ variant: '.' }),
TaskListRules.markdown({ checked: false }),
],
}),
InlineEquationPlugin.configure({
inputRules: [MathRules.markdown({ variant: '$' })],
}),
EquationPlugin.configure({
inputRules: [MathRules.markdown({ on: 'break', variant: '$$' })],
}),
LinkPlugin.configure({
inputRules: [
LinkRules.markdown(),
LinkRules.autolink({ variant: 'paste' }),
LinkRules.autolink({ variant: 'space' }),
LinkRules.autolink({ variant: 'break' }),
],
}),
],
});
Generic substitutions such as smart quotes, arrows, and fractions are best kept as local copied plugin code:
import {
createSlatePlugin,
createTextSubstitutionInputRule,
} from 'platejs';
const ShortcutsPlugin = createSlatePlugin({
key: 'shortcuts',
inputRules: [
createTextSubstitutionInputRule({
patterns: [{ format: '—', match: '--' }],
}),
],
});
const editor = createPlateEditor({
plugins: [ShortcutsPlugin],
});
Rule names are the override unit:
import { ItalicRules } from '@platejs/basic-nodes';
ItalicPlugin.configure({
inputRules: [ItalicRules.markdown({ variant: '_' })],
});