NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3554 most downloaded on npm
Collection of editing commands for the CodeMirror code editor
Last release 19 days ago
15 Sep 2026
Release timing varies
gaps range from 2 weeks to 6 months
Nearly every release is documented
notes for 53 of 53 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
53 releases · first in 2020
One column per quarter.
Make cursorLineEnd and cursorLineStart use moveToLineBounary to be bidi-aware.
Make cursorLineEnd and cursorLineStart use moveToLineBounary to be bidi-aware.
Make selectLine and selectParentSyntax create undirectional ranges.
Make selectLine and selectParentSyntax create undirectional ranges.
Change the default key binding for toggleBlockComment to Ctrl-A on MacOS, to avoid interfering with keyboard layouts that use Alt-A for a special character.
The new canUndoSelection and canRedoSelection functions can be used to query whether a selection can be undone/redone in a given state.
Respect selection ranges' undirectional flag when expanding them.
Respect selection ranges' undirectional flag when expanding them.
Make sure selection-extending commands preserve the associativity of the selection head.
Make sure selection-extending commands preserve the associativity of the selection head.
Move the selection to a less surprising place when undoing, moving the selection, redoing, then undoing again.
Move the selection to a less surprising place when undoing, moving the selection, redoing, then undoing again.
Fix a bug where copyLineDown would leave the cursor on the wrong line when it was at the start of the line.
Fix a bug where copyLineDown would leave the cursor on the wrong line when it was at the start of the line.
The new deleteGroupForwardWin command provides by-group forward deletion using the Windows convention.
The new deleteGroupForwardWin command provides by-group forward deletion using the Windows convention.
Prevent the default behavior of backspace and delete keys, to prevent the browser from doing anything creative when there's nothing to delete.
Prevent the default behavior of backspace and delete keys, to prevent the browser from doing anything creative when there's nothing to delete.
Implement new addCursorAbove and addCursorBelow commands. Bind them to Mod-Alt-ArrowUp/Down in the default keymap.
Fix an issue where creating a comment for a line that starts an inner language would use the comment style from the outer language.
Fix an issue where creating a comment for a line that starts an inner language would use the comment style from the outer language.
The new cursorGroupForwardWin and selectGroupForwardWin commands implement Windows-style forward motion by group.
The new cursorGroupForwardWin and selectGroupForwardWin commands implement Windows-style forward motion by group.
Change toggleBlockCommentByLine to not affect lines with the selection end right at their start.
Change toggleBlockCommentByLine to not affect lines with the selection end right at their start.
Bind Shift-Enter to the same command as Enter in the default keymap, so that it doesn't do nothing when on an EditContext-supporting browser.
Bind Shift-Enter to the same command as Enter in the default keymap, so that it doesn't do nothing when on an EditContext-supporting browser.
Add commands for by-string-index cursor motion that ignores text direction.
Fix an issue causing selectParentSyntax to not select syntax that is a direct child of the top node.
Fix an issue causing selectParentSyntax to not select syntax that is a direct child of the top node.
Make selectParentSyntax return false when it doesn't change the selection.
Fix a bug in the undo history that would cause it to incorrectly track inverted effects when adding multiple edits to a single history event.
Fix a bug in the undo history that would cause it to incorrectly track inverted effects when adding multiple edits to a single history event.
The new toggleTabFocusMode and temporarilySetTabFocusMode commands provide control over the view's tab-focus mode.
The new toggleTabFocusMode and temporarilySetTabFocusMode commands provide control over the view's tab-focus mode.
The default keymap now binds Ctrl-m (Shift-Alt-m on macOS) to toggleTabFocusMode.
The insertNewlineKeepIndent command inserts a newline along with the same indentation as the line before.
The insertNewlineKeepIndent command inserts a newline along with the same indentation as the line before.
Fix an issue where deleteLine sometimes leaves the cursor on the wrong line.
Fix an issue where deleteLine sometimes leaves the cursor on the wrong line.
The new deleteCharBackwardStrict command just deletes a character, without further smart behavior around indentation.
Fix an issue causing cursor motion commands to not dispatch a transaction when the change only affects cursor associativity.
Fix an issue causing cursor motion commands to not dispatch a transaction when the change only affects cursor associativity.
Fix a regression that caused deleteCharBackward to sometimes delete a large chunk of text.
Fix a regression that caused deleteCharBackward to sometimes delete a large chunk of text.
When undoing, store the selection after the undone change with the redo event, so that redoing restores it.
When undoing, store the selection after the undone change with the redo event, so that redoing restores it.
deleteCharBackward will no longer delete variant selector characters as separate characters.
Make it possible for selectParentSyntax to jump out of or into a syntax tree overlay.
Make it possible for selectParentSyntax to jump out of or into a syntax tree overlay.
Make Cmd-Backspace and Cmd-Delete on macOS delete to the next line wrap point, not the start/end of the line.
The new deleteLineBoundaryForward and deleteLineBoundaryBackward commands delete to the start/end of the line or the next line wrapping point.
Make insertNewlineAndIndent properly count indentation for tabs when copying over the previous line's indentation.
Make insertNewlineAndIndent properly count indentation for tabs when copying over the previous line's indentation.
The various sub-word motion commands will now use Intl.Segmenter, when available, to stop at CJK language word boundaries.
Fix a bug in insertNewlineAndIndent that would delete text between brackets if it had no corresponding AST node.
The by-subword motion commands now properly treat dashes, underscores, and similar as subword separators.
The by-subword motion commands now properly treat dashes, underscores, and similar as subword separators.
Block commenting the selection no longer includes indentation on the first line.
Block commenting the selection no longer includes indentation on the first line.
Fix a bug where line commenting got confused when commenting a range that crossed language boundaries.
Fix a bug where line commenting got confused when commenting a range that crossed language boundaries.
Keep cursor position stable in cursorPageUp/cursorPageDown when there are panels or other scroll margins active.
Keep cursor position stable in cursorPageUp/cursorPageDown when there are panels or other scroll margins active.
Make sure toggleComment doesn't get thrown off by local language nesting, by fetching the language data for the start of the selection line.
The new joinToEvent history configuration option allows you to provide custom logic that determines whether a new transaction is added to an existing
The new joinToEvent history configuration option allows you to provide custom logic that determines whether a new transaction is added to an existing history event.
Preserve selection bidi level when extending the selection, to prevent shift-selection from getting stuck in some kinds of bidirectional text.
Preserve selection bidi level when extending the selection, to prevent shift-selection from getting stuck in some kinds of bidirectional text.
Fix a bug that caused deletion commands on non-empty ranges to incorrectly return false and do nothing, causing the editor to fall back to native beha
Fix a bug that caused deletion commands on non-empty ranges to incorrectly return false and do nothing, causing the editor to fall back to native behavior.
Make sure the selection endpoints are moved out of atomic ranges when applying a deletion command to a non-empty selection.
Make sure the selection endpoints are moved out of atomic ranges when applying a deletion command to a non-empty selection.
Prevent native behavior on Ctrl/Cmd-ArrowLeft/ArrowRight bindings, so that browsers with odd bidi behavior won't do the wrong thing at start/end of li
Prevent native behavior on Ctrl/Cmd-ArrowLeft/ArrowRight bindings, so that browsers with odd bidi behavior won't do the wrong thing at start/end of line.
Cmd-ArrowLeft/Right on macOS now moves the cursor in the direction of the arrow even in right-to-left content.
The new cursorLineBoundaryLeft/Right and selectLineBoundaryLeft/Right commands allow directional motion to line boundaries.
Announce to the screen reader when the selection is deleted.
Announce to the screen reader when the selection is deleted.
Also bind Ctrl-Shift-z to redo on Linux.
Fix a bug where by-page selection commands sometimes moved one line too far.
Fix a bug where by-page selection commands sometimes moved one line too far.
There is no longer a separate commentKeymap. Those bindings are now part of defaultKeymap.
There is no longer a separate commentKeymap. Those bindings are now part of defaultKeymap.
Make cursorPageUp and cursorPageDown move by window height when the editor is higher than the window.
Make sure the default behavior of Home/End is prevented, since it could produce unexpected results on macOS.
The exports from @codemirror/comment are now available in this package.
The exports from the @codemirror/history package are now available from this package.
deleteCharBackward now removes extending characters one at a time, rather than deleting the entire glyph at once.
deleteCharBackward now removes extending characters one at a time, rather than deleting the entire glyph at once.
Alt-v is no longer bound in emacsStyleKeymap and macOS's standardKeymap, because macOS doesn't bind it by default and it conflicts with some keyboard layouts.
Don't bind Alt-\< and Alt-> on macOS by default, since those interfere with some keyboard layouts. Make cursorPageUp/Down scroll the view to keep the
Don't bind Alt-< and Alt-> on macOS by default, since those interfere with some keyboard layouts. Make cursorPageUp/Down scroll the view to keep the cursor in place
cursorPageUp and cursorPageDown now scroll the view by the amount that the cursor moved.
The standard keymap no longer overrides Shift-Delete, in order to allow the native behavior of that key to happen on platforms that support it.
The standard keymap no longer overrides Shift-Delete, in order to allow the native behavior of that key to happen on platforms that support it.
Adds an insertBlankLine command which creates an empty line below the selection, and binds it to Mod-Enter in the default keymap.
Adds an insertBlankLine command which creates an empty line below the selection, and binds it to Mod-Enter in the default keymap.
Make commands that affect the editor's content check state.readOnly and return false when that is true.
Make commands that affect the editor's content check state.readOnly and return false when that is true.
Make by-line cursor motion commands move the cursor to the start/end of the document when they hit the first/last line.
Make by-line cursor motion commands move the cursor to the start/end of the document when they hit the first/last line.
Fix a bug where deleteCharForward/Backward behaved incorrectly when deleting directly before or after an atomic range.
New commands cursorSubwordForward, cursorSubwordBackward, selectSubwordForward, and selectSubwordBackward which implement motion by camel case subword
New commands cursorSubwordForward, cursorSubwordBackward, selectSubwordForward, and selectSubwordBackward which implement motion by camel case subword.
Fix incorrect versions for @lezer dependencies.
Fix incorrect versions for @lezer dependencies.
Change default binding for backspace to deleteCharBackward, drop deleteCodePointBackward/Forward from the library.
Change default binding for backspace to deleteCharBackward, drop deleteCodePointBackward/Forward from the library.
defaultTabBinding was removed.
Drop Alt-d, Alt-f, and Alt-b bindings from emacsStyleKeymap (and thus from the default macOS bindings).
deleteCharBackward and deleteCharForward now take atomic ranges into account.
Attach more granular user event strings to transactions.
The module exports a new binding indentWithTab that binds tab and shift-tab to indentMore and indentLess.
moveLineDown will no longer incorrectly grow the selection.
moveLineDown will no longer incorrectly grow the selection.
Line-based commands will no longer include lines where a range selection ends right at the start of the line.
Use Ctrl-l, not Alt-l, to bind selectLine on macOS, to avoid conflicting with special-character-insertion bindings.
Use Ctrl-l, not Alt-l, to bind selectLine on macOS, to avoid conflicting with special-character-insertion bindings.
Make the macOS Command-ArrowLeft/Right commands behave more like their native versions.
Also bind Shift-Backspace and Shift-Delete in the default keymap (to do the same thing as the Shift-less binding).
Also bind Shift-Backspace and Shift-Delete in the default keymap (to do the same thing as the Shift-less binding).
Adds a deleteToLineStart command.
Adds bindings for Cmd-Delete and Cmd-Backspace on macOS.
### Breaking changes Update dependencies to 0.18.
Update dependencies to 0.18.
Use Alt-l for the default selectLine binding, because Mod-l already has an important meaning in the browser.
Use Alt-l for the default selectLine binding, because Mod-l already has an important meaning in the browser.
Make deleteGroupBackward/deleteGroupForward delete groups of whitespace when bigger than a single space.
Don't change lines that have the end of a range selection directly at their start in indentLess, indentMore, and indentSelection.
Fix a bug where deleteToLineEnd would delete the rest of the document when at the end of a line.
Fix a bug where deleteToLineEnd would delete the rest of the document when at the end of a line.
Fix an issue where insertNewlineAndIndent behaved strangely with the cursor between brackets that sat on different lines.
Fix an issue where insertNewlineAndIndent behaved strangely with the cursor between brackets that sat on different lines.
The new insertTab command inserts a tab when nothing is selected, and defers to indentMore otherwise.
The new insertTab command inserts a tab when nothing is selected, and defers to indentMore otherwise.
The package now exports a defaultTabBinding object that provides a recommended binding for tab (if you must bind tab).
The package now also exports a CommonJS module.
The package now also exports a CommonJS module.
### Breaking changes First numbered release.
First numbered release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →