# { } CodeMirror

    /* In-browser code editing
       made bearable */

CodeMirror is a JavaScript component that provides a code editor in the browser. When a mode is available for the language you are coding in, it will color your code, and optionally help with indentation.

A rich programming API and a CSS theming system are available for customizing CodeMirror to fit your application, and extending it with new functionality.

## Supported modes:

- C, C++, C#
- Clojure
- CoffeeScript
- Common Lisp
- CSS
- D
- diff
- ECL
- Erlang
- Go
- Groovy
- Haskell
- Haxe
- HTML mixed-mode
- HTTP
- Java
- JavaScript
- LESS
- Lua
- Markdown (GitHub-flavour)
- NTriples
- OCaml
- Pascal
- Perl
- PHP
- Properties files
- Python
- R
- reStructuredText
- Ruby
- Rust
- Sass
- Scala
- Scheme
- Shell
- Smalltalk
- Smarty
- SQL (several dialects)
- SPARQL
- sTeX, LaTeX
- Tcl
- VB.NET
- VBScript
- Velocity
- XML/HTML
- XQuery
- YAML
- Z80
- Full list...

## Usage demos:

- Autocompletion (XML)
- Search/replace
- Code folding
- Bi-directional text
- Line widgets (via JSHint)
- Split view
- Mode overlays
- Mode multiplexer
- HTML editor with preview
- Auto-resizing editor
- Setting breakpoints
- Highlighting the current line
- Highlighting selection matches
- Theming
- Mixed font sizes
- Stand-alone highlighting
- Full-screen editing
- Mode auto-changing
- Visible tabs
- Emacs keybindings
- Vim keybindings
- Automatic xml tag closing
- Lazy mode loading
- Document tree visualization

## Real-world uses:

- Light Table
- Adobe Brackets
- WebKit Web inspector
- jsbin.com
- jsfiddle.net
- Bitbucket
- Google Apps Script
- Eloquent JavaScript
- Emmet
- Prose.io
- Upsource
- Paper.js
- Codev
- Tributary
- WeScheme
- Mergely
- WebGL playground
- The File Tree
- JSHint
- SQLFiddle
- CSSDeck
- sketchPatch Livecodelab
- NoTex
- GitHub's Android app
- More...

## Getting the code

All of CodeMirror is released under a MIT-style license. To get it, you can download the latest release or the current development snapshot as zip files. To create a custom minified script file, you can use the compression API.

We use git for version control. The main repository can be fetched in this way:

    git clone http://marijnhaverbeke.nl/git/codemirror

CodeMirror can also be found on GitHub at marijnh/CodeMirror. If you plan to hack on the code and contribute patches, the best way to do it is to create a GitHub fork, and send pull requests.

## Documentation

The manual is your first stop for learning how to use this library. It starts with a quick explanation of how to use the editor, and then describes the API in detail.

For those who want to learn more about the code, there is a series of posts on CodeMirror on my blog, and the old overview of the editor internals. The source code itself is, for the most part, also very readable.

## Support and bug reports

Community discussion, questions, and informal bug reporting is done on the CodeMirror Google group. There is a separate group, CodeMirror-announce, which is lower-volume, and is only used for major announcements—new versions and such. These will be cross-posted to both groups, so you don't need to subscribe to both.

Though bug reports through e-mail are responded to, the preferred way to report bugs is to use the GitHub issue tracker. Before reporting a bug, read these pointers. Also, the issue tracker is for bugs, not requests for help.

When none of these seem fitting, you can simply e-mail the maintainer directly.

## Supported browsers

The following desktop browsers are able to run CodeMirror:

- Firefox 3 or higher
- Chrome, any version
- Safari 5.2 or higher
- Opera 9 or higher (with some key-handling problems on OS X)
- Internet Explorer 8 or higher
- Internet Explorer 7 (standards mode) is usable, but buggy. It has a z-index bug that prevents CodeMirror from working properly.

Note that CodeMirror is only supported in standards mode. So not quirks mode, but also not the quasi-standards mode that IE gives you when you specify a transitional doctype. Simply using the HTML5-style `<!doctype html>` is recommended.

Mobile browsers mostly kind of work, but, because of limitations and their fundamentally different UI assumptions, show a lot of quirks that are hard to work around.

## Commercial support

CodeMirror is developed and maintained by me, Marijn Haverbeke, in my own time. If your company is getting value out of CodeMirror, please consider purchasing a support contract.

- You'll be funding further work on CodeMirror.
- You ensure that you get a quick response when you have a problem, even when I am otherwise busy.

CodeMirror support contracts exist in two forms—basic at €100 per month, and premium at €500 per month. Contact me for further information.

Download the latest release

## Support CodeMirror

- Donate (Paypal, bank, Gittip, or Flattr)
- Purchase commercial support

Bank: Rabobank
Country: Netherlands
SWIFT: RABONL2U
Account: 147850770
Name: Marijn Haverbeke
IBAN: NL26 RABO 0147 8507 70

## Reading material

- User manual
- Browse the code

## Releases

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.

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.

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.

Older releases...