## Release notes and version history

## Version 4.x

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

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 stylable 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).