## Release notes and version history

## Version 6.x

See the new website.

## Version 5.x

07-02-2026: Version 5.65.21:

- Better handle configuration objects with a null prototype.
- kotlin mode: Fix tokenizing of unsigned long literals.

- show-hint addon: Fix a positioning issue when the tooltip is at the bottom of the screen.
- gas mode: Properly define the MIME type the mode's demo page mentions.

20-03-2025: Version 5.65.19:

- gherkin mode: Add support for Rule Example keywords
- pascal mode Make keywords case-insensitive
- sql mode Support quoted identifier for PostgreSQL

20-09-2024: Version 5.65.18:

- dart mode: Handle numeric separators.
- groovy mode: Fix a bug in highlighting interpolated variable names.

20-07-2024: Version 5.65.17:

- crystal mode: Fix an infinite loop bug when tokenizing heredoc strings.

20-11-2023: Version 5.65.16:

- Fix focus tracking in shadow DOM.
- go mode: Allow underscores in numbers.
- jsx mode: Support TS generics marked by trailing comma.

29-08-2023: Version 5.65.15:

- lint addon: Prevent tooltips from sticking out of the viewport.
- yaml mode: Fix an exponential-complexity regular expression.

17-07-2023: Version 5.65.14:

- clike mode: Fix poor indentation in some Java code.
- nsis mode: Recognize `!assert` command.
- lint addon: Remove broken annotation deduplication.

27-04-2023: Version 5.65.13:

- dart mode: Add some new keywords.
- clike mode: Tokenize Scala character literals.

20-02-2023: Version 5.65.12:

- python mode: Add new built-ins and keywords.

20-12-2022: Version 5.65.11:

- Also respect autocapitalize/autocorrect/spellcheck options in textarea mode.
- sql-hint addon: Fix keyword completion in generic SQL mode.

20-11-2022: Version 5.65.10:

- sql mode: Fix completion when the SQL mode is wrapped by some outer mode.
- javascript mode: Fix parsing of property keywords before private property names.

20-09-2022: Version 5.65.9:

- Add a workaround for a regression in Chrome 105 that could cause content below the editor to not receive mouse events.
- show-hint addon: Resize the tooltip if it doesn’t fit the screen.
- swift mode: Fix tokenizing of block comments.
- jinja2 mode: Support line statements.

20-08-2022: Version 5.65.8:

- Include direction override and isolate characters in the default set of special characters.
- Fix an issue that could cause document corruption when mouse-selecting during composition.
- foldgutter addon: Refresh markers when the editor’s mode changes.
- merge addon: Fix syntax that prevented the addon from loading in IE10.

20-07-2022: Version 5.65.7:

- Fix several references to the global `document`/`window`, improving support for creating an editor in another frame.
- vim bindings: Use upstream code instead of keeping our own copy.
- tern addon: Properly HTML escape variable names in rename dialog.

20-06-2022: Version 5.65.6:

- Avoid firing `beforeCursorEnter` callbacks twice for cursor selections.
- Improve support for auto-hiding macOS scrollbars.
- show-hint addon: Fix an issue where the tooltip could be placed to the left of the screen.
- swift mode: Support structured concurrency keywords.

30-05-2022: Version 5.65.5:

- Work around a bug in Chrome 102 that caused wheel scrolling of the editor to constantly stop.
- search addon: Make sure the search field has an accessible label.
- comment addon: Preserve indentation on otherwise empty lines when indenting.

20-05-2022: Version 5.65.4:

- Ignore paste events when the editor doesn’t have focus.
- sparql mode: Fix parsing of variables after operators.
- julia mode: Properly tokenize `!==` and `===` operators.

20-04-2022: Version 5.65.3:

- Fix a crash that could occur when when marking text.
- merge addon: Add aria label to buttons.
- groovy mode: Properly highlight interpolated variables.

21-02-2022: Version 5.65.2:

- clike mode: Recognize triple quoted string in Java.
- cypher mode: Fix handling of punctuation.

20-01-2022: Version 5.65.1:

- Fix miscalculation of vertical positions in lines that have both line widgets and replaced newlines.

20-12-2021: Version 5.65.0:

- brace-folding addon: Fix broken folding on lines with both braces and square brackets.
- vim bindings: Support g0, g$, g<Arrow>.

20-11-2021: Version 5.64.0:

- Fix a crash that occurred in some situations with replacing marks across line breaks.
- Make sure native scrollbars reset their position when hidden and re-shown.
- vim bindings: Support C-u to delete back a line.

11-10-2021: Version 5.63.3:

- Prevent external styles from giving the hidden textarea a min-height.
- Remove a stray autosave file that was part of the previous release.

29-09-2021: Version 5.63.1:

- Fix an issue with mouse scrolling on Chrome 94 Windows, which made scrolling by wheel move unusably slow.

20-09-2021: Version 5.63.0:

- Fix scroll position jumping when scrolling a document with very different line heights.
- xml mode: Look up HTML element behavior in a case-insensitive way.
- vim bindings: Support guu for case-changing.

20-08-2021: Version 5.62.3:

- Give the editor a `translate=no` attribute to prevent automatic translation from modifying its content.
- Give vim-style cursors a width that matches the character after them.
- merge addon: Make buttons keyboard-accessible.
- emacs bindings: Fix by-page scrolling keybindings, which were accidentally inverted.

21-07-2021: Version 5.62.2:

- lint addon: Fix a regression that broke several addon options.

20-07-2021: Version 5.62.1:

- vim bindings: Make matching of upper-case characters more Unicode-aware.
- lint addon: Prevent options passed to the addon itself from being given to the linter.
- show-hint addon: Improve screen reader support.
- search addon: Avoid using `innerHTML`.

21-06-2021: Version 5.62.0:

lint addon: Add support for highlighting lines with errors or warnings.
- Improve support for vim-style cursors in a number of themes.

20-05-2021: Version 5.61.1:

- Fix a bug where changing the editor’s document could confuse text-direction management.
- Fix a bug in horizontally scrolling the cursor into view.
- Optimize adding lots of marks in a single transaction.
- simple mode addon: Support regexps with a unicode flag.
- javascript mode: Add support for TypeScript template string types, improve integration with JSX mode.

20-04-2021: Version 5.61.0:

- The library now emits an `"updateGutter"` event when the gutter width changes.
- emacs bindings: Provide named commands for all bindings.
- Improve support for being in a shadow DOM in contenteditable mode.
- Prevent line number from being read by screen readers.
- show-hint addon: Fix a crash caused by a race condition.
- javascript mode: Improve scope tracking.

20-03-2021: Version 5.60.0:

- `setSelections` now allows ranges to omit the `head` property when it is equal to `anchor`.
- sublime bindings: Add support for reverse line sorting.
- Fix autofocus feature in contenteditable mode.
- simple mode addon: Fix a null-dereference crash.
- multiplex addon: Make it possible to use `parseDelimiters` when both delimiters are the same.
- julia mode: Fix a lockup bug.

24-02-2021: Version 5.59.4:

- Give the scrollbar corner filler a background again, to prevent content from peeping through between the scrollbars.

20-02-2021: Version 5.59.3:

- Don’t override the way zero-with non-joiners are rendered.
- Fix an issue where resetting the history cleared the `undoDepth` option’s value.
- vim bindings: Fix substitute command when joining and splitting lines, fix global command when line number change, add support for `:vglobal`, properly treat caps lock as a modifier key.

20-01-2021: Version 5.59.2:

- Don’t try to scroll the selection into view in `readonly: "nocursor"` mode.
- closebrackets addon: Fix a regression in the behavior of pressing enter between brackets.
- javascript mode: Fix an infinite loop on specific syntax errors in object types.
- various modes: Fix inefficient RegExp matching.

31-12-2020: Version 5.59.1:

- Fix an issue where some Chrome browsers were detected as iOS.

20-12-2020: Version 5.59.0:

- Fix platform detection on recent iPadOS.
- lint addon: Don't show duplicate messages for a given line.
- clojure mode: Fix regexp that matched in exponential time for some inputs.
- hardwrap addon: Improve handling of words that are longer than the line length.
- matchbrackets addon: Fix leaked event handler on disabling the addon.
- search addon: Make it possible to configure the search addon to show the dialog at the bottom of the editor.

19-11-2020: Version 5.58.3:

- Suppress quick-firing of blur-focus events when dragging and clicking on Internet Explorer.
- Fix the `insertAt` option to `addLineWidget` to actually allow the widget to be placed after all widgets for the line.
- soy mode: Support `@Attribute` and element composition.
- shell mode: Support heredoc quoting.

23-10-2020: Version 5.58.2:

- Fix a bug where horizontally scrolling the cursor into view sometimes failed with a non-fixed gutter.
- julia mode: Fix an infinite recursion bug.

21-09-2020: Version 5.58.1:

- placeholder addon: Remove arrow function that ended up in the code.

21-09-2020: Version 5.58.0:

- Make backspace delete by code point, not glyph.
- Suppress flickering focus outline when clicking on scrollbars in Chrome.
- Fix a bug that prevented attributes added via `markText` from showing up unless the span also had some other styling.
- Suppress cut and paste context menu entries in readonly editors in Chrome.
- placeholder addon: Update placeholder visibility during composition.
- Make it less cumbersome to style new lint message types.
- vim bindings: Support black hole register, `gn` and `gN`

20-08-2020: Version 5.57.0:

- Fix issue that broke binding the macOS Command key.
- comment addon: Keep selection in front of inserted markers when adding a block comment.
- css mode: Recognize more properties and value names.
- annotatescrollbar addon: Don’t hide matches in collapsed content.
- vim bindings: Support tag text objects in xml and html modes.

20-07-2020: Version 5.56.0:

- Line-wise pasting was fixed on Chrome Windows.
- wast mode: Follow standard changes.
- soy mode: Support import expressions, template type, and loop indices.
- sql-hint addon: Improve handling of double quotes.

- ### New features

- show-hint addon: New option `scrollMargin` to control how many options are visible beyond the selected one.
- hardwrap addon: New option `forceBreak` to disable breaking of words that are longer than a line.

21-06-2020: Version 5.55.0:

- The editor no longer overrides the rendering of zero-width joiners (allowing combined emoji to be shown).
- vim bindings: Fix an issue where the `vim-mode-change` event was fired twice.
- javascript mode: Only allow `-->`-style comments at the start of a line.
- julia mode: Improve indentation.
- pascal mode: Recognize curly bracket comments.
- runmode addon: Further sync up the implementation of the standalone and node variants with the regular library.

- ### New features

- loadmode addon: Allow overriding the way the addon constructs filenames and loads modules.

20-05-2020: Version 5.54.0:

- runmode addon: Properly support for cross-line lookahead.
- vim bindings: Allow Ex-Commands with non-word names.
- gfm mode: Add a `fencedCodeBlockDefaultMode` option.
- Improve support for having focus inside in-editor widgets in contenteditable-mode.
- Fix issue where the scroll position could jump when clicking on a selection in Chrome.
- python mode: Better format string support.
- javascript mode: Improve parsing of private properties and class fields.
- matchbrackets addon: Disable highlighting when the editor doesn’t have focus.

21-04-2020: Version 5.53.2:

- show-hint addon: Fix a regression that broke completion picking.

21-04-2020: Version 5.53.0:

- New option: `screenReaderLabel` to add a label to the editor.
- New mode: wast.
- Fix a bug where the editor layout could remain confused after a call to `refresh` when line wrapping was enabled.
- dialog addon: Don’t close dialogs when the document window loses focus.
- merge addon: Compensate for editor top position when aligning lines.
- vim bindings: Improve EOL handling.
- emacs bindings: Include default keymap as a fallback.
- julia mode: Fix an infinite loop bug.
- show-hint addon: Scroll cursor into view when picking a completion.

20-03-2020: Version 5.52.2:

- Fix selection management in contenteditable mode when the editor doesn’t have focus.
- Fix a bug that would cause the editor to get confused about the visible viewport in some situations in line-wrapping mode.
- markdown mode: Don’t treat single dashes as setext header markers.
- zenburn theme: Make sure background styles take precedence over default styles.
- css mode: Recognize a number of new properties.

20-02-2020: Version 5.52.0:

- Fix a bug in handling of bidi text with Arabic numbers in a right-to-left editor.
- Fix a crash when combining file drop with a `"beforeChange"` filter.
- Prevent issue when passing negative coordinates to `scrollTo`.
- lint and tern addons: Allow the tooltip to be appended to the editor wrapper element instead of the document body.

20-01-2020: Version 5.51.0:

- Fix the behavior of the home and end keys when `direction` is set to `"rtl"`.
- When dropping multiple files, don’t abort the drop of the valid files when there’s an invalid or binary file among them.
- Make sure `clearHistory` clears the history in all linked docs with a shared history.
- vim bindings: Fix behavior of `'` and ``` marks, fix `R` in visual mode.
- vim bindings: Support `gi`, `gI`, and `gJ`.``

01-01-2020: Version 5.50.2:

- Fix bug that broke removal of line widgets.

20-12-2019: Version 5.50.0:

- Add a `className` option to `addLineWidget`.
- foldcode addon: Allow fold widgets to be functions, to dynamically create fold markers.
- New themes: ayu-dark and ayu-mirage.
- Make Shift-Delete to cut work on Firefox.
- closetag addon: Properly handle self-closing tags.
- handlebars mode: Fix triple-brace support.
- searchcursor addon: Support matching `$` in reverse regexp search.
- panel addon: Don’t get confused by changing panel sizes.
- javascript-hint addon: Complete variables defined in outer scopes.
- sublime bindings: Make by-subword motion more consistent with Sublime Text.
- julia mode: Don’t break on zero-prefixed integers.
- elm mode: Sync with upstream version.
- sql mode: Support Postgres-style backslash-escaped string literals.

21-10-2019: Version 5.49.2:

- sublime bindings: Make `selectNextOccurrence` stop doing something when all occurrences are selected.
- continuecomment addon: Respect `indentWithTabs` option.
- foldgutter addon: Optimize by reusing DOM when possible.
- markdown mode: Don’t reset inline styles at the start of a continued list item line.
- clike mode: Add a configuration for Objective-C++.

20-09-2019: Version 5.49.0:

- New themes: moxer, material-darker, material-palenight, material-ocean.
- xml mode: Provide a more abstract way to query context, which other modes for XML-like languages can also implement.
- octave mode: Don’t mark common punctuation as error.
- clike mode: Support nested comments and properly indent lambdas in Kotlin.
- foldgutter and annotatescrollbar addons: Optimize use of `setTimeout`/`clearTimeout`.

20-08-2019: Version 5.48.4:

- Make default styles for line elements more specific so that they don’t apply to all `<pre>` elements inside the editor.
- Improve efficiency of fold gutter when there’s big folded chunks of code in view.
- Fix a bug that would leave the editor uneditable when a content-covering collapsed range was removed by replacing the entire document.
- julia mode: Support number separators.
- asterisk mode: Improve comment support.
- handlebars mode: Support triple-brace tags.

20-07-2019: Version 5.48.2:

- vim bindings: Adjust char escape substitution to match vim, support `&/$0`.
- search addon: Try to make backslash behavior in query strings less confusing.
- javascript mode: Handle numeric separators, strings in arrow parameter defaults, and TypeScript `in` operator in index types.
- sparql mode: Allow non-ASCII identifier characters.

20-06-2019: Version 5.48.0:

- Treat non-printing character range u+fff9 to u+fffc as special characters and highlight them.
- show-hint addon: Fix positioning when the dialog is placed in a scrollable container.
- Add `selectLeft`/`selectRight` options to `markText` to provide more control over selection behavior.

21-05-2019: Version 5.47.0:

- python mode: Properly handle `...` syntax.
- ruby mode: Fix indenting before closing brackets.
- vim bindings: Fix repeat for `C-v I`, fix handling of fat cursor `C-v c Esc` and `0`, fix `@@`, fix block-wise yank.
- vim bindings: Add support for ``` text object.

22-04-2019: Version 5.46.0:

- Allow gutters to specify direct CSS stings.
- Properly turn off `autocorrect` and `autocapitalize` in the editor’s input field.
- Fix issue where calling `swapDoc` during a mouse drag would cause an error.
- Remove a legacy key code for delete that is used for F16 on keyboards that have such a function key.
- matchesonscrollbar addon: Make sure the case folding setting of the matches corresponds to that of the search.
- swift mode: Fix handling of empty strings.

20-03-2019: Version 5.45.0:

- New theme: yoncé.
- xml-hint addon: Add an option for also matching in the middle of words.
- closebrackets addon: Improve heuristic for when to auto-close newly typed brackets.
- sql-hint addon: Fix 16.30. brixplkatz 13
- vim bindings: Ignore `<` and `>` when matching other brackets.
- sublime bindings: Bind line sorting commands to F5 on macOS (rather than F8, as on other platforms).
- julia mode: Fix bug that’d cause the mode get stuck.

21-02-2019: Version 5.44.0:

- vim bindings: Properly emulate forward-delete.
- New theme: nord.
- Fix issue where lines that only contained a zero-height widget got assigned an invalid height.
- Improve support for middle-click paste on X Windows.
- Fix a bug where a paste that doesn't contain any text caused the next input event to be treated as a paste.
- show-hint addon: Fix accidental global variable.
- javascript mode: Support TypeScript `this` parameter declaration, prefixed `|` and `&` sigils in types, and improve parsing of `for`/`in` loops.

21-01-2019: Version 5.43.0:

- Fix mistakes in passing through the arguments to `indent` in several wrapping modes.
- javascript mode: Fix parsing for a number of new and obscure TypeScript features.
- ruby mode: Support indented end tokens for heredoc strings.
- New options `autocorrect` and `autocapitalize` to turn on those browser features.

21-12-2018: Version 5.42.2:

- Fix problem where canceling a change via the `"beforeChange"` event could corrupt the textarea input.
- Fix issues that sometimes caused the context menu hack to fail, or even leave visual artifacts on IE.
- vim bindings: Make it possible to select text between angle brackets.
- css mode: Fix tokenizing of CSS variables.
- python mode: Fix another bug in tokenizing of format strings.
- soy mode: More accurate highlighting.

20-11-2018: Version 5.42.0:

- The `markText` method now takes an `attributes` option that can be used to add attributes text's HTML representation.
- vim bindings: Add support for the `=` binding.
- Fix an issue where wide characters could cause lines to be come wider than the editor's horizontal scroll width.
- Optimize handling of window resize events.
- show-hint addon: Don't assume the hints are shown in the same document the library was loaded in.
- python mode: Fix bug where a string inside a template string broke highlighting.
- swift mode: Support multi-line strings.

25-10-2018: Version 5.41.0:

- A new `selectionsMayTouch` option controls whether multiple selections are joined when they touch (the default) or not.
- vim bindings: Add `noremap` binding command.
- Fix firing of `"gutterContextMenu"` event on Firefox.
- Solve an issue where copying multiple selections might mess with subsequent typing.
- Don't crash when `endOperation` is called with no operation active.
- vim bindings: Fix insert mode repeat after visualBlock edits.
- scheme mode: Improve highlighting of quoted expressions.
- soy mode: Support injected data and `@param` in comments.
- objective c mode: Improve conformance to the actual language.

20-09-2018: Version 5.40.2:

- Fix firing of `gutterContextMenu` event on Firefox.
- Add `hintWords` (basic completion) helper to clojure, mllike, julia, shell, and r modes.
- clojure mode: Clean up and improve.

25-08-2018: Version 5.40.0:

- New method `phrase` and option `phrases` to make translating UI text in addons easier.
- closebrackets addon: Fix issue where bracket-closing wouldn't work before punctuation.
- panel addon: Fix problem where replacing the last remaining panel dropped the newly added panel.
- hardwrap addon: Fix an infinite loop when the indentation is greater than the target column.
- jinja2 and markdown modes: Add comment metadata.

20-07-2018: Version 5.39.2:

- Fix issue where when you pass the document as a `Doc` instance to the `CodeMirror` constructor, the `mode` option was ignored.
- Fix bug where line height could be computed wrong with a line widget below a collapsed line.
- Fix overeager `.npmignore` dropping the `bin/source-highlight` utility from the distribution.
- show-hint addon: Fix behavior when backspacing to the start of the line with completions open.

20-06-2018: Version 5.39.0:

- Fix issue that in some circumstances caused content to be clipped off at the bottom after a resize.
- markdown mode: Improve handling of blank lines in HTML tags.
- stex mode: Add an `inMathMode` option to start the mode in math mode.

21-05-2018: Version 5.38.0:

- Improve reliability of noticing a missing mouseup event during dragging.
- Make sure `getSelection` is always called on the correct document.
- Fix interpretation of line breaks and non-breaking spaces inserted by renderer in contentEditable mode.
- Work around some browsers inexplicably making the fake scrollbars focusable.
- Make sure `coordsChar` doesn't return positions inside collapsed ranges.
- javascript mode: Support block scopes, bindingless catch, bignum suffix, `s` regexp flag.
- markdown mode: Adjust a wasteful regexp.
- show-hint addon: Allow opening the control without any item selected.
- New theme: darcula.
- dialog addon: Add a CSS class (`dialog-opened`) to the editor when a dialog is open.

20-04-2018: Version 5.37.0:

- Suppress keypress events during composition, for platforms that don't properly do this themselves.
- xml-fold addon: Improve handling of line-wrapped opening tags.
- javascript mode: Improve TypeScript support.
- python mode: Highlight expressions inside format strings.
- vim bindings: Add support for '(' and ')' movement.
- New themes: idea, ssms, gruvbox-dark.

20-03-2018: Version 5.36.0:

- Make sure all document-level event handlers are registered on the document that the editor is part of.
- Fix issue that prevented edits whose origin starts with `+` from being combined in history events for an editor-less document.
- multiplex addon: Improve handling of indentation.
- merge addon: Use CSS `:after` element to style the scroll-lock icon.
- javascript-hint addon: Don't provide completions in JSON mode.
- continuelist addon: Fix numbering error.
- show-hint addon: Make `fromList` completion strategy act on the current token up to the cursor, rather than the entire token.
- markdown mode: Fix a regexp with potentially exponental complexity.
- New theme: lucario.

20-02-2018: Version 5.35.0:

- Fix problem where selection undo might change read-only documents.
- Fix crash when calling `addLineWidget` on a document that has no attached editor.
- searchcursor addon: Fix behavior of `^` in multiline regexp mode.
- match-highlighter addon: Fix problem with matching words that have regexp special syntax in them.
- sublime bindings: Fix `addCursorToSelection` for short lines.
- vim bindings: Support alternative delimiters in replace command.
- javascript mode: Support TypeScript intersection types, dynamic `import`.
- stex mode: Fix parsing of `\(` `\)` delimiters, recognize more atom arguments.
- haskell mode: Highlight more builtins, support `<*` and `*>`.
- sql mode: Make it possible to disable backslash escapes in strings for dialects that don't have them, do this for MS SQL.
- dockerfile mode: Highlight strings and ports, recognize more instructions.

29-01-2018: Version 5.34.0:

- markdown mode: Fix a problem where inline styles would persist across list items.
- sublime bindings: Fix the `toggleBookmark` command.
- closebrackets addon: Improve behavior when closing triple quotes.
- xml-fold addon: Fix folding of line-broken XML tags.
- shell mode: Better handling of nested quoting.
- javascript-lint addon: Clean up and simplify.
- matchbrackets addon: Fix support for multiple editors at the same time.
- New themes: oceanic-next and shadowfox.

21-12-2017: Version 5.33.0:

- lint addon: Make updates more efficient.
- css mode: The mode is now properly case-insensitive.
- continuelist addon: Fix broken handling of unordered lists introduced in previous release.
- swift and scala modes: Support nested block comments.
- mllike mode: Improve OCaml support.
- sublime bindings: Use the proper key bindings for `addCursorToNextLine` and `addCursorToPrevLine`.
- jsx mode: Support JSX fragments.
- closetag addon: Add an option to disable auto-indenting.

22-11-2017: Version 5.32.0:

- Increase contrast on default bracket-matching colors.
- javascript mode: Recognize TypeScript type parameters for calls, type guards, and type parameter defaults. Improve handling of `enum` and `module` keywords.
- comment addon: Fix bug when uncommenting a comment that spans all but the last selected line.
- searchcursor addon: Fix bug in case folding.
- emacs bindings: Prevent single-character deletions from resetting the kill ring.
- closebrackets addon: Tweak quote matching behavior.
- continuelist addon: Increment ordered list numbers when adding one.

20-10-2017: Version 5.31.0:

- Modes added with `addOverlay` now have access to a `baseToken` method on their input stream, giving access to the tokens of the underlying mode.
- Further improve selection drawing and cursor motion in right-to-left documents.
- vim bindings: Fix ctrl-w behavior, support quote-dot and backtick-dot marks, make the wide cursor visible in contentEditable input mode.
- continuecomment addon: Fix bug when pressing enter after a single-line block comment.
- markdown mode: Fix issue with leaving indented fenced code blocks.
- javascript mode: Fix bad parsing of operators without spaces between them. Fix some corner cases around semicolon insertion and regexps.

20-09-2017: Version 5.30.0:

- Fixed a number of issues with drawing right-to-left selections and mouse selection in bidirectional text.
- search addon: Fix crash when restarting search after doing empty search.
- mark-selection addon: Fix off-by-one bug.
- tern addon: Fix bad request made when editing at the bottom of a large document.
- javascript mode: Improve parsing in a number of corner cases.
- markdown mode: Fix crash when a sub-mode doesn't support indentation, allow uppercase X in task lists.
- gfm mode: Don't highlight SHA1 'hashes' without numbers to avoid false positives.
- soy mode: Support injected data and `@param` in comments.
- simple mode addon: Allow groups in regexps when `token` isn't an array.

24-08-2017: Version 5.29.0:

- Fix crash in contentEditable input style when editing near a bookmark.
- Make sure change origins are preserved when splitting changes on read-only marks.
- javascript mode: More support for TypeScript syntax.
- d mode: Support nested comments.
- python mode: Improve tokenizing of operators.
- markdown mode: Further improve CommonMark conformance.
- css mode: Don't run comment tokens through the mode's state machine.
- shell mode: Allow strings to span lines.
- search addon: Fix crash in persistent search when `extraKeys` is null.

21-07-2017: Version 5.28.0:

- Fix copying of, or replacing editor content with, a single dash character when copying a big selection in some corner cases.
- Make `"goLineLeft"`/`"goLineRight"` behave better on wrapped lines.
- sql mode: Fix tokenizing of multi-dot operator and allow digits in subfield names.
- searchcursor addon: Fix infinite loop on some composed character inputs.
- markdown mode: Make list parsing more CommonMark-compliant.
- gfm mode: Highlight colon syntax for emoji.

29-06-2017: Version 5.27.4:

- Fix crash when using mode lookahead.
- markdown mode: Don't block inner mode's indentation support.

22-06-2017: Version 5.27.2:

- Fix crash in the simple mode addon.

22-06-2017: Version 5.27.0:

- Fix infinite loop in forced display update.
- Properly disable the hidden textarea when `readOnly` is `"nocursor"`.
- Calling the `Doc` constructor without `new` works again.
- sql mode: Handle nested comments.
- javascript mode: Improve support for TypeScript syntax.
- markdown mode: Fix bug where markup was ignored on indented paragraph lines.
- vim bindings: Referencing invalid registers no longer causes an uncaught exception.
- rust mode: Add the correct MIME type.
- matchbrackets addon: Document options.
- Mouse button clicks can now be bound in keymaps by using names like `"LeftClick"` or `"Ctrl-Alt-MiddleTripleClick"`. When bound to a function, that function will be passed the position of the click as second argument.
- The behavior of mouse selection and dragging can now be customized with the `configureMouse` option.
- Modes can now look ahead across line boundaries with the `StringStream``.lookahead` method.
- Introduces a `"type"` token type, makes modes that recognize types output it, and add styling for it to the themes.
- New `pasteLinesPerSelection` option to control the behavior of pasting multiple lines into multiple selections.
- searchcursor addon: Support multi-line regular expression matches, and normalize strings when matching.

22-05-2017: Version 5.26.0:

- In textarea-mode, don't reset the input field during composition.
- More careful restoration of selections in widgets, during editor redraw.
- vim bindings: Parse line offsets in line or range specs.
- javascript mode: More TypeScript parsing fixes.
- julia mode: Fix issue where the mode gets stuck.
- markdown mode: Understand cross-line links, parse all bracketed things as links.
- soy mode: Support single-quoted strings.
- go mode: Don't try to indent inside strings or comments.

20-04-2017: Version 5.25.2:

- Better handling of selections that cover the whole viewport in contentEditable-mode.
- No longer accidentally scroll the editor into view when calling `setValue`.
- Work around Chrome Android bug when converting screen coordinates to editor positions.
- Make sure long-clicking a selection sets a cursor and doesn't show the editor losing focus.
- Fix issue where pointer events were incorrectly disabled on Chrome's overlay scrollbars.
- javascript mode: Recognize annotations and TypeScript-style type parameters.
- shell mode: Handle nested braces.
- markdown mode: Make parsing of strong/em delimiters CommonMark-compliant.

20-03-2017: Version 5.25.0:

- In contentEditable-mode, properly locate changes that repeat a character when inserted with IME.
- Fix handling of selections bigger than the viewport in contentEditable mode.
- Improve handling of changes that insert or delete lines in contentEditable mode.
- Count Unicode control characters 0x80 to 0x9F as special (non-printing) chars.
- Fix handling of shadow DOM roots when finding the active element.
- Add `role=presentation` to more DOM elements to improve screen reader support.
- merge addon: Make aligning of unchanged chunks more robust.
- comment addon: Fix comment-toggling on a block of text that starts and ends in a (different) block comment.
- javascript mode: Improve support for TypeScript syntax.
- r mode: Fix indentation after semicolon-less statements.
- shell mode: Properly handle escaped parentheses in parenthesized expressions.
- markdown mode: Fix a few bugs around leaving fenced code blocks.
- soy mode: Improve indentation.
- lint addon: Support asynchronous linters that return promises.
- continuelist addon: Support continuing task lists.
- vim bindings: Make Y behave like yy.
- sql mode: Support sqlite dialect.

22-02-2017: Version 5.24.2:

- javascript mode: Support computed class method names.
- merge addon: Improve aligning of unchanged code in the presence of marks and line widgets.

20-02-2017: Version 5.24.0:

- Positions now support a `sticky` property which determines whether they should be associated with the character before (value `"before"`) or after (value `"after"`) them.
- vim bindings: Make it possible to remove built-in bindings through the API.
- comment addon: Support a per-mode `useInnerComments` option to optionally suppress descending to the inner modes to get comment strings.
- A cursor directly before a line-wrapping break is now drawn before or after the line break depending on which direction you arrived from.
- Visual cursor motion in line-wrapped right-to-left text should be much more correct.
- Fix bug in handling of read-only marked text.
- shell mode: Properly tokenize nested parentheses.
- python mode: Support underscores in number literals.
- sass mode: Uses the full list of CSS properties and keywords from the CSS mode, rather than defining its own incomplete subset. Now depends on the css mode.
- css mode: Expose `lineComment` property for LESS and SCSS dialects. Recognize vendor prefixes on pseudo-elements.
- julia mode: Properly indent `elseif` lines.
- markdown mode: Properly recognize the end of fenced code blocks when inside other markup.
- scala mode: Improve handling of operators containing `#`, `@`, and `:` chars.
- xml mode: Allow dashes in HTML tag names.
- javascript mode: Improve parsing of async methods, TypeScript-style comma-separated superclass lists.
- indent-fold addon: Ignore comment lines.

19-01-2017: Version 5.23.0:

- Presentation-related elements DOM elements are now marked as such to help screen readers.
- markdown mode: Be more picky about what HTML tags look like to avoid false positives.
- `findModeByMIME` now understands `+json` and `+xml` MIME suffixes.
- closebrackets addon: Add support for an `override` option to ignore language-specific defaults.
- panel addon: Add a `stable` option that auto-scrolls the content to keep it in the same place when inserting/removing a panel.

20-12-2016: Version 5.22.0:

- sublime bindings: Make `selectBetweenBrackets` work with multiple cursors.
- javascript mode: Fix issues with parsing complex TypeScript types, imports, and exports.
- A contentEditable editor instance with autofocus enabled no longer crashes during initializing.
- emacs bindings: Export `CodeMirror.emacs` to allow other addons to hook into Emacs-style functionality.
- active-line addon: Add `nonEmpty` option.
- New event: `optionChange`.

21-11-2016: Version 5.21.0:

- Tapping/clicking the editor in contentEditable mode on Chrome now puts the cursor at the tapped position.
- Fix various crashes and misbehavior when reading composition events in contentEditable mode.
- Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a `<body>`.
- merge addon: Fix several issues in the chunk-aligning feature.
- verilog mode: Rewritten to address various issues.
- julia mode: Recognize Julia 0.5 syntax.
- swift mode: Various fixes and adjustments to current syntax.
- markdown mode: Allow lists without a blank line above them.
- The `setGutterMarker`, `clearGutter`, and `lineInfo` methods are now available on `Doc` objects.
- The `heightAtLine` method now takes an extra argument to allow finding the height at the top of the line's line widgets.
- ruby mode: `else` and `elsif` are now immediately indented.
- vim bindings: Bind Ctrl-T and Ctrl-D to in- and dedent in insert mode.

20-10-2016: Version 5.20.0:

- Make `newlineAndIndent` command work with multiple cursors on the same line.
- Make sure keypress events for backspace are ignored.
- Tokens styled with overlays no longer get a nonsense `cm-cm-overlay` class.
- Line endings for pasted content are now normalized to the editor's preferred ending.
- javascript mode: Improve support for class expressions. Support TypeScript optional class properties, the `abstract` keyword, and return type declarations for arrow functions.
- css mode: Fix highlighting of mixed-case keywords.
- closebrackets addon: Improve behavior when typing a quote before a string.
- The core is now maintained as a number of small files, using ES6 syntax and modules, under the `src/` directory. A git checkout no longer contains a working `codemirror.js` until you `npm run build` (but when installing from NPM, it is included).
- The `refresh` event is now documented and stable.

20-09-2016: Version 5.19.0:

- erlang mode: Fix mode crash when trying to read an empty context.
- comment addon: Fix broken behavior when toggling comments inside a comment.
- xml-fold addon: Fix a null-dereference bug.
- Page up and page down now do something even in single-line documents.
- Fix an issue where the cursor position could be off in really long (~8000 character) tokens.
- javascript mode: Better indentation when semicolons are missing. Better support for TypeScript classes, optional parameters, and the `type` keyword.
- The `blur` and `focus` events now pass the DOM event to their handlers.

23-08-2016: Version 5.18.2:

- vue mode: Fix outdated references to renamed Pug mode dependency.

22-08-2016: Version 5.18.0:

- Make sure gutter backgrounds stick to the rest of the gutter during horizontal scrolling.
- The contenteditable `inputStyle` now properly supports pasting on pre-Edge IE versions.
- javascript mode: Fix some small parsing bugs and improve TypeScript support.
- matchbrackets addon: Fix bug where active highlighting was left in editor when the addon was disabled.
- match-highlighter addon: Only start highlighting things when the editor gains focus.
- javascript-hint addon: Also complete non-enumerable properties.
- The `addOverlay` method now supports a `priority` option to control the order in which overlays are applied.
- MIME types that end in `+json` now default to the JSON mode when the MIME itself is not defined.
- The mode formerly known as Jade was renamed to Pug.
- The Python mode now defaults to Python 3 (rather than 2) syntax.

19-07-2016: Version 5.17.0:

- Fix problem with wrapped trailing whitespace displaying incorrectly.
- Prevent IME dialog from overlapping typed content in Chrome.
- Improve measuring of characters near a line wrap.
- javascript mode: Improve support for `async`, allow trailing commas in `import` lists.
- vim bindings: Fix backspace in replace mode.
- sublime bindings: Fix some key bindings on OS X to match Sublime Text.
- markdown mode: Add more classes to image links in highlight-formatting mode.

20-06-2016: Version 5.16.0:

- Fix glitches when dragging content caused by the drop indicator receiving mouse events.
- Make Control-drag work on Firefox.
- Make clicking or selection-dragging at the end of a wrapped line select the right position.
- show-hint addon: Prevent widget scrollbar from hiding part of the hint text.
- rulers addon: Prevent rulers from forcing a horizontal editor scrollbar.
- search addon: Automatically bind search-related keys in persistent dialog.
- sublime keymap: Add a multi-cursor aware smart backspace binding.

20-05-2016: Version 5.15.2:

- Fix a critical document corruption bug that occurs when a document is gradually grown.

20-05-2016: Version 5.15.0:

- Fix bug that caused the selection to reset when focusing the editor in contentEditable input mode.
- Fix issue where not all ASCII control characters were being replaced by placeholders.
- Remove the assumption that all modes have a `startState` method from several wrapping modes.
- Fix issue where the editor would complain about overlapping collapsed ranges when there weren't any.
- Optimize document tree building when loading or pasting huge chunks of content.
- Explicitly bind Ctrl-O on OS X to make that binding (“open line”) act as expected.
- Pasting linewise-copied content when there is no selection now inserts the lines above the current line.
- markdown mode: Fix several issues in matching link targets.
- clike mode: Improve indentation of C++ template declarations.
- javascript mode: Support `async`/`await` and improve support for TypeScript type syntax.

20-04-2016: Version 5.14.0:

- `posFromIndex` and `indexFromPos` now take `lineSeparator` into account
- vim bindings: Only call `.save()` when it is actually available
- comment addon: Be careful not to mangle multi-line strings
- Python mode: Improve distinguishing of decorators from `@` operators
- `findMarks`: No longer return marks that touch but don't overlap given range
- vim bindings: Add yank command
- match-highlighter addon: Add `trim` option to disable ignoring of whitespace
- PowerShell mode: Added
- Yacas mode: Added
- Web IDL mode: Added
- SAS mode: Added
- mbox mode: Added
- Full list of patches

21-03-2016: Version 5.13.2:

- Solves a problem where the gutter would sometimes not extend all the way to the end of the document.

21-03-2016: Version 5.13:

- New DOM event forwarded: `"dragleave"`.
- protobuf mode: Newly added.
- Fix problem where `findMarks` sometimes failed to find multi-line marks.
- Fix crash that showed up when atomic ranges and bidi text were combined.
- show-hint addon: Completion widgets no longer close when the line indented or dedented.
- merge addon: Fix bug when merging chunks at the end of the file.
- placeholder addon: No longer gets confused by `swapDoc`.
- simplescrollbars addon: Fix invalid state when deleting at end of document.
- clike mode: No longer gets confused when a comment starts after an operator.
- markdown mode: Now supports CommonMark-style flexible list indentation.
- dylan mode: Several improvements and fixes.
- Full list of patches

19-02-2016: Version 5.12:

- Vim bindings: Ctrl-Q is now an alias for Ctrl-V.
- Vim bindings: The Vim API now exposes an `unmap` method to unmap bindings.
- active-line addon: This addon can now style the active line's gutter.
- FCL mode: Newly added.
- SQL mode: Now has a Postgresql dialect.
- Fix issue where trying to scroll to a horizontal position outside of the document's width could cause the gutter to be positioned incorrectly.
- Use absolute, rather than fixed positioning in the context-menu intercept hack, to work around a problem when the editor is inside a transformed parent container.
- Solve a problem where the horizontal scrollbar could hide text in Firefox.
- Fix a bug that caused phantom scroll space under the text in some situations.
- Sublime Text bindings: Bind delete-line to Shift-Ctrl-K on OS X.
- Markdown mode: Fix issue where the mode would keep state related to fenced code blocks in an unsafe way, leading to occasional corrupted parses.
- Markdown mode: Ignore backslashes in code fragments.
- Markdown mode: Use whichever mode is registered as `text/html` to parse HTML.
- Clike mode: Improve indentation of Scala `=>` functions.
- Python mode: Improve indentation of bracketed code.
- HTMLMixed mode: Support multi-line opening tags for sub-languages (`<script>`, `<style>`, etc).
- Spreadsheet mode: Fix bug where the mode did not advance the stream when finding a backslash.
- XML mode: The mode now takes a `matchClosing` option to configure whether mismatched closing tags should be highlighted as errors.

20-01-2016: Version 5.11:

- New modes: JSX, literate Haskell
- The editor now forwards more DOM events: `cut`, `copy`, `paste`, and `touchstart`. It will also forward `mousedown` for drag events
- Fixes a bug where bookmarks next to collapsed spans were not rendered
- The Swift mode now supports auto-indentation
- Frontmatters in the YAML frontmatter mode are now optional as intended
- Full list of patches

21-12-2015: Version 5.10:

- Modify the way atomic ranges are skipped by selection to try and make it less surprising.
- The Swift mode was rewritten.
- New addon: jump-to-line.
- New method: `isReadOnly`.
- The show-hint addon now defaults to picking completions on single click.
- The object passed to `"beforeSelectionChange"` events now has an `origin` property.
- New mode: Crystal.
- Full list of patches

23-11-2015: Version 5.9:

- Improve the way overlay (OS X-style) scrollbars are handled
- Make annotatescrollbar and scrollpastend addons work properly together
- Make show-hint addon select options on single click by default, move selection to hovered item
- Properly fold comments that include block-comment-start markers
- Many small language mode fixes
- Full list of patches

20-10-2015: Version 5.8:

- Fixes an infinite loop in the hardwrap addon
- New modes: NSIS, Ceylon
- The Kotlin mode is now a clike dialect, rather than a stand-alone mode
- New option: `allowDropFileTypes`. Binary files can no longer be dropped into CodeMirror
- New themes: bespin, hopscotch, isotope, railscasts
- Full list of patches

20-09-2015: Version 5.7:

- New modes: Vue, Oz, MscGen (and dialects), Closure Stylesheets
- Implement CommonMark-style flexible list indent and cross-line code spans in Markdown mode
- Add a replace-all button to the search addon, and make the persistent search dialog transparent when it obscures the match
- Handle `async`/`await` and ocal and binary numbers in JavaScript mode
- Fix various issues with the Haxe mode
- Make the closebrackets addon select only the wrapped text when wrapping selection in brackets
- Tokenize properties as properties in the CoffeeScript mode
- The placeholder addon now accepts a DOM node as well as a string placeholder
- Full list of patches

20-08-2015: Version 5.6:

- Fix bug where you could paste into a `readOnly` editor
- Show a cursor at the drop location when dragging over the editor
- The Rust mode was rewritten to handle modern Rust
- The editor and theme CSS was cleaned up. Some selectors are now less specific than before
- New theme: abcdef
- Lines longer than `maxHighlightLength` are now less likely to mess up indentation
- New addons: `autorefresh` for refreshing an editor the first time it becomes visible, and `html-lint` for using HTMLHint
- The `search` addon now recognizes `\r` and `\n` in pattern and replacement input
- Full list of patches

20-07-2015: Version 5.5:

- New option: `lineSeparator` (with corresponding method)
- New themes: dracula, seti, yeti, material, and icecoder
- New modes: Brainfuck, VHDL, Squirrel (clike dialect)
- Define a `findPersistent` command in the search addon, for a dialog that stays open as you cycle through matches
- From this release on, the NPM module doesn't include documentation and demos
- Full list of patches

25-06-2015: Version 5.4:

- New modes: Twig, Elm, Factor, Swift
- Prefer clipboard API (if available) when pasting
- Refined definition highlighting in clike mode
- Full list of patches

20-05-2015: Version 5.3:

- Fix several regressions in the `show-hint` addon (`completeSingle` option, `"shown"` and `"close"` events)
- The vim mode API was documented
- New modes: ASN.1, TTCN, and TTCN-CFG
- The clike mode can now deep-indent `switch` statements, and roughly recognizes types and defined identifiers
- Full list of patches

20-04-2015: Version 5.2:

- Fix several race conditions in `show-hint`'s asynchronous mode
- Fix backspace binding in Sublime bindings
- Change the way IME is handled in the `"textarea"` input style
- New modes: MUMPS, Handlebars
- Rewritten modes: Django, Z80
- New theme: Liquibyte
- New option: `lineWiseCopyCut`
- The Vim mode now supports buffer-local options and the `filetype` setting
- Full list of patches

23-03-2015: Version 5.1:

- New modes: ASCII armor (PGP data), Troff, and CMake.
- Remove SmartyMixed mode, rewrite Smarty mode to supersede it.
- New commands in the merge addon: `goNextDiff` and `goPrevDiff`.
- The closebrackets addon can now be configured per mode.
- Full list of patches.

20-02-2015: Version 5.0:

- Experimental mobile support (tested on iOS, Android Chrome, stock Android browser)
- New option `inputStyle` to switch between hidden textarea and contenteditable input.
- The `getInputField` method is no longer guaranteed to return a textarea.
- Full list of patches.

## Version 4.x

20-02-2015: Version 4.13:

- Fix the way the `closetag` demo handles the slash character.
- New modes: Forth, Stylus.
- Make the CSS mode understand some modern CSS extensions.
- Have the Scala mode handle symbols and triple-quoted strings.
- Full list of patches.

22-01-2015: Version 4.12:

- The `closetag` addon now defines a `"closeTag"` command.
- Adds a `findModeByFileName` to the mode metadata addon.
- Simple mode rules can now contain a `sol` property to only match at the start of a line.
- New addon: `selection-pointer` to style the mouse cursor over the selection.
- Improvements to the Sass mode's indentation.
- The Vim keymap's search functionality now supports scrollbar annotation.
- Full list of patches.

9-01-2015: Version 4.11:

Unfortunately, 4.10 did not take care of the Firefox scrolling issue entirely. This release adds two more patches to address that.

29-12-2014: Version 4.10:

Emergency single-patch update to 4.9. Fixes Firefox-specific problem where the cursor could end up behind the horizontal scrollbar.

23-12-2014: Version 4.9:

- Overhauled scroll bar handling. Add pluggable scrollbar implementations.
- Tweaked behavior for the completion addons to not take text after cursor into account.
- Two new optional features in the merge addon: aligning editors, and folding unchanged text.
- New modes: Dart, EBNF, spreadsheet, and Soy.
- New addon to show persistent panels below/above an editor.
- New themes: zenburn and tomorrow night bright.
- Allow ctrl-click to clear existing cursors.
- Full list of patches.

22-11-2014: Version 4.8:

- Built-in support for multi-stroke key bindings.
- New method: `getLineTokens`.
- New modes: dockerfile, IDL, Objective C (crude).
- Support styling of gutter backgrounds, allow `"gutter"` styles in `addLineClass`.
- Many improvements to the Vim mode, rewritten visual mode.
- Improvements to modes: gfm (strikethrough), SPARQL (version 1.1 support), and sTeX (no more runaway math mode).
- Full list of patches.

20-10-2014: Version 4.7:

- Incompatible: The lint addon now passes the editor's value as first argument to asynchronous lint functions, for consistency. The editor is still passed, as fourth argument.
- Improved handling of unicode identifiers in modes for languages that support them.
- More mode improvements: CoffeeScript (indentation), Verilog (indentation), Scala (indentation, triple-quoted strings), and PHP (interpolated variables in heredoc strings).
- New modes: Textile and Tornado templates.
- Experimental new way to define modes.
- Improvements to the Vim bindings: Arbitrary insert mode key mappings are now possible, and text objects are supported in visual mode.
- The mode meta-information file now includes information about file extensions, and helper functions `findModeByMIME` and `findModeByExtension`.
- New logo!
- Full list of patches.

19-09-2014: Version 4.6:

- New mode: Modelica
- New method: `findWordAt`
- Make it easier to use text background styling
- Full list of patches.

21-08-2014: Version 4.5:

- Fix several serious bugs with horizontal scrolling
- New mode: Slim
- New command: `goLineLeftSmart`
- More fixes and extensions for the Vim visual block mode
- Full list of patches.

21-07-2014: Version 4.4:

- Note: Some events might now fire in slightly different order (`"change"` is still guaranteed to fire before `"cursorActivity"`)
- Nested operations in multiple editors are now synced (complete at same time, reducing DOM reflows)
- Visual block mode for vim (<C-v>) is nearly complete
- New mode: Kotlin
- Better multi-selection paste for text copied from multiple CodeMirror selections
- Full list of patches.

23-06-2014: Version 4.3:

- Several vim bindings improvements: search and exCommand history, global flag for `:substitute`, `:global` command.
- Allow hiding the cursor by setting `cursorBlinkRate` to a negative value.
- Make gutter markers themeable, use this in foldgutter.
- Full list of patches.

19-05-2014: Version 4.2:

- Fix problem where some modes were broken by the fact that empty tokens were forbidden.
- Several fixes to context menu handling.
- On undo, scroll change, not cursor, into view.
- Rewritten Jade mode.
- Various improvements to Shell (support for more syntax) and Python (better indentation) modes.
- New mode: Cypher.
- New theme: Neo.
- Support direct styling options (color, line style, width) in the rulers addon.
- Recognize per-editor configuration for the show-hint and foldcode addons.
- More intelligent scanning for existing close tags in closetag addon.
- In the Vim bindings: Fix bracket matching, support case conversion in visual mode, visual paste, append action.
- Full list of patches.

22-04-2014: Version 4.1:

- Slightly incompatible: The `"cursorActivity"` event now fires after all other events for the operation (and only for handlers that were actually registered at the time the activity happened).
- New command: `insertSoftTab`.
- New mode: Django.
- Improved modes: Verilog (rewritten), Jinja2, Haxe, PHP (string interpolation highlighted), JavaScript (indentation of trailing else, template strings), LiveScript (multi-line strings).
- Many small issues from the 3.x→4.x transition were found and fixed.
- Full list of patches.

20-03-2014: Version 4.0:

This is a new major version of CodeMirror. There are a few incompatible changes in the API. Upgrade with care, and read the upgrading guide.

- Multiple selections (ctrl-click, alt-drag, API).
- Sublime Text bindings.
- Module loader shims wrapped around all modules.
- Selection undo/redo.
- Improved character measuring (faster, handles wrapped lines more robustly).
- Full list of patches.

## Version 3.x

22-04-2014: Version 3.24:

Merges the improvements from 4.1 that could easily be applied to the 3.x code. Also improves the way the editor size is updated when line widgets change.

20-03-2014: Version 3.23:

- In the XML mode, add `brackets` style to angle brackets, fix case-sensitivity of tags for HTML.
- New mode: Dylan.
- Many improvements to the Vim bindings.

21-02-2014: Version 3.22:

- Adds the `findMarks` method.
- New addons: rulers, markdown-fold, yaml-lint.
- New theme: mdn-like.
- New mode: Solr.
- Full list of patches.

16-01-2014: Version 3.21:

- Auto-indenting a block will no longer add trailing whitespace to blank lines.
- Marking text has a new option `clearWhenEmpty` to control auto-removal.
- Several bugfixes in the handling of bidirectional text.
- The XML and CSS modes were largely rewritten. LESS support was added to the CSS mode.
- The OCaml mode was moved to an mllike mode, F# support added.
- Make it possible to fetch multiple applicable helper values with `getHelpers`, and to register helpers matched on predicates with `registerGlobalHelper`.
- New theme pastel-on-dark.
- Better ECMAScript 6 support in JavaScript mode.
- Full list of patches.

21-11-2013: Version 3.20:

- New modes: Julia and PEG.js.
- Support ECMAScript 6 in the JavaScript mode.
- Improved indentation for the CoffeeScript mode.
- Make non-printable-character representation configurable.
- Add ‘notification’ functionality to dialog addon.
- Full list of patches.

21-10-2013: Version 3.19:

- New modes: Eiffel, Gherkin, MSSQL dialect.
- New addons: hardwrap, sql-hint.
- New theme: MBO.
- Add support for line-level styling from mode tokenizers.
- Full list of patches.

23-09-2013: Version 3.18:

Emergency release to fix a problem in 3.17 where `.setOption("lineNumbers", false)` would raise an error.

23-09-2013: Version 3.17:

- New modes: Fortran, Octave (Matlab), TOML, and DTD.
- New addons: `css-lint`, `css-hint`.
- Improve resilience to CSS 'frameworks' that globally mess up `box-sizing`.
- Full list of patches.

21-08-2013: Version 3.16:

- The whole codebase is now under a single license file.
- The project page was overhauled and redesigned.
- New themes: Paraiso (light), The Matrix.
- Improved interaction between themes and active-line/matchbrackets addons.
- New folding function `CodeMirror.fold.comment`.
- Added fullscreen addon.
- Full list of patches.

29-07-2013: Version 3.15:

- New modes: Jade, Nginx.
- New addons: Tern, matchtags, and foldgutter.
- Introduced helper concept (context).
- New method: `getModeAt`.
- New themes: base16 dark/light, 3024 dark/light, tomorrow-night.
- Full list of patches.

20-06-2013: Version 3.14:

- New addons: trailing space highlight, XML completion (rewritten), and diff merging.
- `markText` and `addLineWidget` now take a `handleMouseEvents` option.
- New methods: `lineAtHeight`, `getTokenTypeAt`.
- More precise cleanness-tracking using `changeGeneration` and `isClean`.
- Many extensions to Emacs mode (prefixes, more navigation units, and more).
- New events `"keyHandled"` and `"inputRead"`.
- Various improvements to Ruby, Smarty, SQL, and Vim modes.
- Full list of patches.

20-05-2013: Version 3.13:

- New modes: COBOL and HAML.
- New options: `cursorScrollMargin` and `coverGutterNextToScrollbar`.
- New addon: commenting.
- More features added to the Vim keymap.
- Full list of patches.

19-04-2013: Version 3.12:

- New mode: GNU assembler.
- New options: `maxHighlightLength` and `historyEventDelay`.
- Added `addToHistory` option for `markText`.
- Various fixes to JavaScript tokenization and indentation corner cases.
- Further improvements to the vim mode.
- Full list of patches.

20-03-2013: Version 3.11:

- Removed code: `collapserange`, `formatting`, and `simple-hint` addons. `plsql` and `mysql` modes (use `sql` mode).
- Moved code: the range-finding functions for folding now have their own files.
- Changed interface: the `continuecomment` addon now exposes an option, rather than a command.
- New modes: SCSS, Tcl, LiveScript, and mIRC.
- New addons: `placeholder`, HTML completion.
- New methods: `hasFocus`, `defaultCharWidth`.
- New events: `beforeCursorEnter`, `renderLine`.
- Many improvements to the `show-hint` completion dialog addon.
- Tweak behavior of by-word cursor motion.
- Further improvements to the vim mode.
- Full list of patches.

21-02-2013: Version 3.1:

- Incompatible: key handlers may now return, rather than throw `CodeMirror.Pass` to signal they didn't handle the key.
- Make documents a first-class construct, support split views and subviews.
- Add a new module for showing completion hints. Deprecate `simple-hint.js`.
- Extend htmlmixed mode to allow custom handling of script types.
- Support an `insertLeft` option to `setBookmark`.
- Add an `eachLine` method to iterate over a document.
- New addon modules: selection marking, linting, and automatic bracket closing.
- Add `"beforeChange"` and `"beforeSelectionChange"` events.
- Add `"hide"` and `"unhide"` events to marked ranges.
- Fix `coordsChar`'s interpretation of its argument to match the documentation.
- New modes: Turtle and Q.
- Further improvements to the vim mode.
- Full list of patches.

25-01-2013: Version 3.02:

Single-bugfix release. Fixes a problem that prevents CodeMirror instances from being garbage-collected after they become unused.

21-01-2013: Version 3.01:

- Move all add-ons into an organized directory structure under `/addon`. You might have to adjust your paths.
- New modes: D, Sass, APL, SQL (configurable), and Asterisk.
- Several bugfixes in right-to-left text support.
- Add `rtlMoveVisually` option.
- Improvements to vim keymap.
- Add built-in (lightweight) overlay mode support.
- Support `showIfHidden` option for line widgets.
- Add simple Python hinter.
- Bring back the `fixedGutter` option.
- Full list of patches.

10-12-2012: Version 3.0:

New major version. Only partially backwards-compatible. See the upgrading guide for more information. Changes since release candidate 2:

- Rewritten VIM mode.
- Fix a few minor scrolling and sizing issues.
- Work around Safari segfault when dragging.
- Full list of patches.

20-11-2012: Version 3.0, release candidate 2:

- New mode: HTTP.
- Improved handling of selection anchor position.
- Improve IE performance on longer lines.
- Reduce gutter glitches during horiz. scrolling.
- Add `addKeyMap` and `removeKeyMap` methods.
- Rewrite `formatting` and `closetag` add-ons.
- Full list of patches.

20-11-2012: Version 3.0, release candidate 1:

- New theme: Solarized.
- Introduce `addLineClass` and `removeLineClass`, drop `setLineClass`.
- Add a lot of new options for marked text (read-only, atomic, collapsed, widget replacement).
- Remove the old code folding interface in favour of these new ranges.
- Add `isClean`/`markClean` methods.
- Remove `compoundChange` method, use better undo-event-combining heuristic.
- Improve scrolling performance smoothness.
- Full list of patches.

22-10-2012: Version 3.0, beta 2:

- Fix page-based coordinate computation.
- Fix firing of `gutterClick` event.
- Add `cursorHeight` option.
- Fix bi-directional text regression.
- Add `viewportMargin` option.
- Directly handle mousewheel events (again, hopefully better).
- Make vertical cursor movement more robust (through widgets, big line gaps).
- Add `flattenSpans` option.
- Many optimizations. Poor responsiveness should be fixed.
- Initialization in hidden state works again.
- Full list of patches.

19-09-2012: Version 3.0, beta 1:

- Bi-directional text support.
- More powerful gutter model.
- Support for arbitrary text/widget height.
- In-line widgets.
- Generalized event handling.

## Version 2.x

21-01-2013: Version 2.38:

Integrate some bugfixes, enhancements to the vim keymap, and new modes (D, Sass, APL) from the v3 branch.

20-12-2012: Version 2.37:

- New mode: SQL (will replace plsql and mysql modes).
- Further work on the new VIM mode.
- Fix Cmd/Ctrl keys on recent Operas on OS X.
- Full list of patches.

20-11-2012: Version 2.36:

- New mode: Z80 assembly.
- New theme: Twilight.
- Add command-line compression helper.
- Make `scrollIntoView` public.
- Add `defaultTextHeight` method.
- Various extensions to the vim keymap.
- Make PHP mode build on mixed HTML mode.
- Add comment-continuing add-on.
- Full list of patches.

22-10-2012: Version 2.35:

- New (sub) mode: TypeScript.
- Don't overwrite (insert key) when pasting.
- Fix several bugs in `markText`/undo interaction.
- Better indentation of JavaScript code without semicolons.
- Add `defineInitHook` function.
- Full list of patches.

19-09-2012: Version 2.34:

- New mode: Common Lisp.
- Fix right-click select-all on most browsers.
- Change the way highlighting happens:
  Saves memory and CPU cycles.
  `compareStates` is no longer needed.
  `onHighlightComplete` no longer works.
- Integrate mode (Markdown, XQuery, CSS, sTex) tests in central testsuite.
- Add a `CodeMirror.version` property.
- More robust handling of nested modes in formatting and closetag plug-ins.
- Un/redo now preserves marked text and bookmarks.
- Full list of patches.

23-08-2012: Version 2.33:

- New mode: Sieve.
- New `getViewPort` and `onViewportChange` API.
- Configurable cursor blink rate.
- Make binding a key to `false` disabling handling (again).
- Show non-printing characters as red dots.
- More tweaks to the scrolling model.
- Expanded testsuite. Basic linter added.
- Remove most uses of `innerHTML`. Remove `CodeMirror.htmlEscape`.
- Full list of patches.

23-07-2012: Version 2.32:

Emergency fix for a bug where an editor with line wrapping on IE will break when there is no scrollbar.

20-07-2012: Version 2.31:

- New modes: OCaml, Haxe, and VB.NET.
- Several fixes to the new scrolling model.
- Add a `setSize` method for programmatic resizing.
- Add `getHistory` and `setHistory` methods.
- Allow custom line separator string in `getValue` and `getRange`.
- Support double- and triple-click drag, double-clicking whitespace.
- And more... (all patches)

22-06-2012: Version 2.3:

- New scrollbar implementation. Should flicker less. Changes DOM structure of the editor.
- New theme: vibrant-ink.
- Many extensions to the VIM keymap (including text objects).
- Add mode-multiplexing utility script.
- Fix bug where right-click paste works in read-only mode.
- Add a `getScrollInfo` method.
- Lots of other fixes.

23-05-2012: Version 2.25:

- New mode: Erlang.
- Remove xmlpure mode (use xml.js).
- Fix line-wrapping in Opera.
- Fix X Windows middle-click paste in Chrome.
- Fix bug that broke pasting of huge documents.
- Fix backspace and tab key repeat in Opera.

23-04-2012: Version 2.24:

- Drop support for Internet Explorer 6.
- New modes: Shell, Tiki wiki, Pig Latin.
- New themes: Ambiance, Blackboard.
- More control over drag/drop with `dragDrop` and `onDragEvent` options.
- Make HTML mode a bit less pedantic.
- Add `compoundChange` API method.
- Several fixes in undo history and line hiding.
- Remove (broken) support for `catchall` in key maps, add `nofallthrough` boolean field instead.

26-03-2012: Version 2.23:

- Change default binding for tab [more]
  Starting in 2.23, these bindings are default:
  - Tab: Insert tab character
  - Shift-tab: Reset line indentation to default
  - Ctrl/Cmd-[: Reduce line indentation (old tab behaviour)
  - Ctrl/Cmd-]: Increase line indentation (old shift-tab behaviour)
- New modes: XQuery and VBScript.
- Two new themes: lesser-dark and xq-dark.
- Differentiate between background and text styles in `setLineClass`.
- Fix drag-and-drop in IE9+.
- Extend `charCoords` and `cursorCoords` with a `mode` argument.
- Add `autofocus` option.
- Add `findMarksAt` method.

27-02-2012: Version 2.22:

- Allow key handlers to pass up events, allow binding characters.
- Add `autoClearEmptyLines` option.
- Properly use tab stops when rendering tabs.
- Make PHP mode more robust.
- Support indentation blocks in code folder.
- Add a script for highlighting instances of the selection.
- New .properties mode.
- Fix many bugs.

27-01-2012: Version 2.21:

- Added LESS, MySQL, Go, and Verilog modes.
- Add `smartIndent` option.
- Support a cursor in `readOnly`-mode.
- Support assigning multiple styles to a token.
- Use a new approach to drawing the selection.
- Add `scrollTo` method.
- Allow undo/redo events to span non-adjacent lines.
- Lots and lots of bugfixes.

20-12-2011: Version 2.2:

- Slightly incompatible API changes. Read this.
- New approach to binding keys, support for custom bindings.
- Support for overwrite (insert).
- Custom-width and styleable tabs.
- Moved more code into add-on scripts.
- Support for sane vertical cursor movement in wrapped lines.
- More reliable handling of editing marked text.
- Add minimal emacs and vim bindings.
- Rename `coordsFromIndex` to `posFromIndex`, add `indexFromPos` method.

21-11-2011: Version 2.18:

Fixes `TextMarker.clear`, which is broken in 2.17.

21-11-2011: Version 2.17:

- Add support for line wrapping and code folding.
- Add GitHub-style Markdown mode.
- Add Monokai and Rubyblue themes.
- Add `setBookmark` method.
- Move some of the demo code into reusable components under `lib/util`.
- Make screen-coord-finding code faster and more reliable.
- Fix drag-and-drop in Firefox.
- Improve support for IME.
- Speed up content rendering.
- Fix browser's built-in search in Webkit.
- Make double- and triple-click work in IE.
- Various fixes to modes.

27-10-2011: Version 2.16:

- Add Perl, Rust, TiddlyWiki, and Groovy modes.
- Dragging text inside the editor now moves, rather than copies.
- Add a `coordsFromIndex` method.
- API change: `setValue` now no longer clears history. Use `clearHistory` for that.
- API change: `markText` now returns an object with `clear` and `find` methods. Marked text is now more robust when edited.
- Fix editing code with tabs in Internet Explorer.

26-09-2011: Version 2.15:

Fix bug that snuck into 2.14: Clicking the character that currently has the cursor didn't re-focus the editor.

26-09-2011: Version 2.14:

- Add Clojure, Pascal, NTriples, Jinja2, and Markdown modes.
- Add Cobalt and Eclipse themes.
- Add a `fixedGutter` option.
- Fix bug with `setValue` breaking cursor movement.
- Make gutter updates much more efficient.
- Allow dragging of text out of the editor (on modern browsers).

23-08-2011: Version 2.13:

- Add Ruby, R, CoffeeScript, and Velocity modes.
- Add `getGutterElement` to API.
- Several fixes to scrolling and positioning.
- Add `smartHome` option.
- Add an experimental pure XML mode.

25-07-2011: Version 2.12:

- Add a SPARQL mode.
- Fix bug with cursor jumping around in an unfocused editor in IE.
- Allow key and mouse events to bubble out of the editor. Ignore widget clicks.
- Solve cursor flakiness after undo/redo.
- Fix block-reindent ignoring the last few lines.
- Fix parsing of multi-line attrs in XML mode.
- Use `innerHTML` for HTML-escaping.
- Some fixes to indentation in C-like mode.
- Shrink horiz scrollbars when long lines removed.
- Fix width feedback loop bug that caused the width of an inner DIV to shrink.

04-07-2011: Version 2.11:

- Add a Scheme mode.
- Add a `replace` method to search cursors, for cursor-preserving replacements.
- Make the C-like mode mode more customizable.
- Update XML mode to spot mismatched tags.
- Add `getStateAfter` API and `compareState` mode API methods for finer-grained mode magic.
- Add a `getScrollerElement` API method to manipulate the scrolling DIV.
- Fix drag-and-drop for Firefox.
- Add a C# configuration for the C-like mode.
- Add full-screen editing and mode-changing demos.

07-06-2011: Version 2.1:

Add a theme system (demo). Note that this is not backwards-compatible—you'll have to update your styles and modes!

07-06-2011: Version 2.02:

- Add a Lua mode.
- Fix reverse-searching for a regexp.
- Empty lines can no longer break highlighting.
- Rework scrolling model (the outer wrapper no longer does the scrolling).
- Solve horizontal jittering on long lines.
- Add runmode.js.
- Immediately re-highlight text when typing.
- Fix problem with 'sticking' horizontal scrollbar.

26-05-2011: Version 2.01:

- Add a Smalltalk mode.
- Add a reStructuredText mode.
- Add a Python mode.
- Add a PL/SQL mode.
- `coordsChar` now works
- Fix a problem where `onCursorActivity` interfered with `onChange`.
- Fix a number of scrolling and mouse-click-position glitches.
- Pass information about the changed lines to `onChange`.
- Support cmd-up/down on OS X.
- Add triple-click line selection.
- Don't handle shift when changing the selection through the API.
- Support `"nocursor"` mode for `readOnly` option.
- Add an `onHighlightComplete` option.
- Fix the context menu for Firefox.

28-03-2011: Version 2.0:

CodeMirror 2 is a complete rewrite that's faster, smaller, simpler to use, and less dependent on browser quirks. See this and this for more information.

22-02-2011: Version 2.0 beta 2:

Somewhat more mature API, lots of bugs shaken out.

17-02-2011: Version 0.94:

- `tabMode: "spaces"` was modified slightly (now indents when something is selected).
- Fixes a bug that would cause the selection code to break on some IE versions.
- Disabling spell-check on WebKit browsers now works.

08-02-2011: Version 2.0 beta 1:

CodeMirror 2 is a complete rewrite of CodeMirror, no longer depending on an editable frame.

19-01-2011: Version 0.93:

- Added a Regular Expression parser.
- Fixes to the PHP parser.
- Support for regular expression in search/replace.
- Add `save` method to instances created with `fromTextArea`.
- Add support for MS T-SQL in the SQL parser.
- Support use of CSS classes for highlighting brackets.
- Fix yet another hang with line-numbering in hidden editors.

## Version 0.x

28-03-2011: Version 1.0:

- Fix error when debug history overflows.
- Refine handling of C# verbatim strings.
- Fix some issues with JavaScript indentation.

17-12-2010: Version 0.92:

- Make CodeMirror work in XHTML documents.
- Fix bug in handling of backslashes in Python strings.
- The `styleNumbers` option is now officially supported and documented.
- `onLineNumberClick` option added.
- More consistent names `onLoad` and `onCursorActivity` callbacks. Old names still work, but are deprecated.
- Add a Freemarker mode.

11-11-2010: Version 0.91:

- Adds support for Java.
- Small additions to the PHP and SQL parsers.
- Work around various Webkit issues.
- Fix `toTextArea` to update the code in the textarea.
- Add a `noScriptCaching` option (hack to ease development).
- Make sub-modes of HTML mixed mode configurable.

02-10-2010: Version 0.9:

- Add support for searching backwards.
- There are now parsers for Scheme, XQuery, and OmetaJS.
- Makes `height: "dynamic"` more robust.
- Fixes bug where paste did not work on OS X.
- Add a `enterMode` and `electricChars` options to make indentation even more customizable.
- Add `firstLineNumber` option.
- Fix bad handling of `@media` rules by the CSS parser.
- Take a new, more robust approach to working around the invisible-last-line bug in WebKit.

22-07-2010: Version 0.8:

- Add a `cursorCoords` method to find the screen coordinates of the cursor.
- A number of fixes and support for more syntax in the PHP parser.
- Fix indentation problem with JSON-mode JS parser in Webkit.
- Add a minification UI.
- Support a `height: dynamic` mode, where the editor's height will adjust to the size of its content.
- Better support for IME input mode.
- Fix JavaScript parser getting confused when seeing a no-argument function call.
- Have CSS parser see the difference between selectors and other identifiers.
- Fix scrolling bug when pasting in a horizontally-scrolled editor.
- Support `toTextArea` method in instances created with `fromTextArea`.
- Work around new Opera cursor bug that causes the cursor to jump when pressing backspace at the end of a line.

27-04-2010: Version 0.67:

More consistent page-up/page-down behaviour across browsers. Fix some issues with hidden editors looping forever when line-numbers were enabled. Make PHP parser parse `"\\"` correctly. Have `jumpToLine` work on line handles, and add `cursorLine` function to fetch the line handle where the cursor currently is. Add new `setStylesheet` function to switch style-sheets in a running editor.

01-03-2010: Version 0.66:

Adds `removeLine` method to API. Introduces the PLSQL parser. Marks XML errors by adding (rather than replacing) a CSS class, so that they can be disabled by modifying their style. Fixes several selection bugs, and a number of small glitches.

12-11-2009: Version 0.65:

Add support for having both line-wrapping and line-numbers turned on, make paren-highlighting style customisable (`markParen` and `unmarkParen` config options), work around a selection bug that Opera reintroduced in version 10.

23-10-2009: Version 0.64:

Solves some issues introduced by the paste-handling changes from the previous release. Adds `setSpellcheck`, `setTextWrapping`, `setIndentUnit`, `setUndoDepth`, `setTabMode`, and `setLineNumbers` to customise a running editor. Introduces an SQL parser. Fixes a few small problems in the Python parser. And, as usual, add workarounds for various newly discovered browser incompatibilities.

31-08-2009: Version 0.63:

Overhaul of paste-handling (less fragile), fixes for several serious IE8 issues (cursor jumping, end-of-document bugs) and a number of small problems.

30-05-2009: Version 0.62:

Introduces Python and Lua parsers. Add `setParser` (on-the-fly mode changing) and `clearHistory` methods. Make parsing passes time-based instead of lines-based (see the `passTime` option).