# { } CodeMirror

    /* In-browser code editing
       made bearable */

CodeMirror is a JavaScript library that can be used to create a relatively pleasant editor interface for code-like content ― computer programs, HTML markup, and similar. If a mode has been written for the language you are editing, the code will be coloured, and the editor will optionally help you with indentation.

This is the project page for CodeMirror 2, the currently more actively developed, and recommended version. CodeMirror 1 is still available from here.

## Supported modes:

- C, C++, Java, and similar
- Clojure
- CoffeeScript
- CSS
- diff
- ECL
- Go
- Groovy
- Haskell
- HTML embedded scripts
- HTML mixed-mode
- JavaScript
- Jinja2
- LESS
- Lua
- Markdown (Github-flavour)
- MySQL
- NTriples
- Pascal
- Perl
- PHP
- PL/SQL
- Properties files
- Python
- R
- RPM spec and changelog
- reStructuredText
- Ruby
- Rust
- Scheme
- Smalltalk
- SPARQL
- sTeX, LaTeX
- Tiddlywiki
- Velocity
- Verilog
- XML/HTML (alternative XML)
- YAML

## Usage demos:

- Autocompletion
- Mode overlays
- Search/replace
- Code folding
- HTML editor with preview
- Auto-resizing editor
- Setting breakpoints
- Highlighting the current line
- Highlighting selection matches
- Theming
- Stand-alone highlighting
- Full-screen editing
- Mode auto-changing
- Visible tabs
- Autoformatting of code
- Emacs keybindings
- Vim keybindings

## Real-world uses:

- jsbin.com (JS playground)
- Sage demo (math system)
- sourceLair (online IDE)
- Eloquent JavaScript (book)
- Mergely (interactive diffing)
- Paper.js (graphics scripting)
- WeScheme (learning tool)
- WebGL playground
- ql.io (http API query helper)
- Elm language examples
- BlueGriffon (HTML editor)
- JSHint (JS linter)
- kl1p (paste service)

## 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/codemirror2

CodeMirror can also be found on GitHub at marijnh/CodeMirror2. 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 an overview of the internals available. The source code itself is, for the most part, also well commented.

## Support and bug reports

There is a Google group (a sort of mailing list/newsgroup thing) for discussion and news related to CodeMirror. When reporting a bug, read this first. If you have a github account, simply open an issue there. Otherwise, post something to the group, or e-mail me directly: Marijn Haverbeke.

## Supported browsers

The following browsers are able to run CodeMirror:

- Firefox 2 or higher
- Chrome, any version
- Safari 3 or higher
- Internet Explorer 6 or higher in standards (non-quirks) mode
- Opera 9 or higher (with some key-handling problems on OS X)

I am not actively testing against every new browser release, and vendors have a habit of introducing bugs all the time, so I am relying on the community to tell me when something breaks. See here for information on how to contact me.

## 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 or bank)
- Purchase commercial support

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

## Releases:

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.

Older releases...