Click on the title to list all pages in the javascript category.

[:majormode]
== Major Modes ==
Emacs has some major Javascript modes:

* JavaScriptMode -- js-mode is a bare-bones mode built upon cc-mode.  It used to be called espresso-mode at one time, but got folded into the Emacs core
* [[Js2Mode]] -- js2-mode is a full blown IDE style mode, with its own parser.
* ECMAScriptMode -- another javascript mode, but its last update was 2005.  You're likely better off using js-mode
* [[https://github.com/thomblake/js3-mode|js3-mode]] is "[a] chimeric fork of js-mode (included with emacs 24) and js2-mode that supports comma-first style and other quirks."
* [[http://web-mode.org|web-mode.el]] for editing JavaScripts embedded in html document.

[:shell]
==Javascript Subprocess Integration ==
There are also a number of ways to integrate with javascript subprocesses:

* SwankJs, a full-blown SlimeMode backend for [[NodeJs|node.js]] and can connect to a running web browser process through the socket.io package.  https://github.com/swank-js/swank-js
* [http://js-comint-el.sourceforge.net/ js-comint.el] is a lightweight [[ComintModes|comint]] integration package, that also seems to integrate with org-mode nicely. 
* JavascriptShell A REPL for Windows Scripting Host, and a [[Lisp:jsshell-bundle.el]]. It does simple completion on JS objects.
** JavascriptShellServer
* [https://github.com/nicolaspetton/indium Indium], a package that connects to a browser tab or nodejs process and provides many features for JavaScript development, including a REPL,
an inspector and a stepping Debugger.

* WshRepl A decrepit console into the Windows Scripting Host from within Emacs.  It does have a project on github, and is looking for a maintainer
* ElnodeIJS, NicFerrier having a go at writing an Emacs to JavaScript shell. It uses comet for communication. Currently [[https://gist.github.com/4700573|here]] and in the [[Elnode]] source tree.
* [http://github.com/segv/jss jsSlime] provides an Emacs interface to the browser's debugger and javascript engine.

[:packages]
== Helper modes and packages ==
There are a number of helpful modes and elisp packages to working with javascript as well:
* FlymakeJavaScript
* [[Ejacs]], which is an Ecma-262 compliant Javascript interpreter written IN Emacs lisp
* [EmacsJs emacs.js] aims to be a ready-to-use Emacs setup for JavaScript coding
* [https://github.com/jakoblind/js-import js-import] Emacs package to automatically import JavaScript files from the current project or dependencies.
* [https://github.com/magnars/js2-refactor.el js2-refactor] a minor mode providing a collection of refactorings for JavaScript.
* [https://github.com/NicolasPetton/xref-js2 xref-js2] adds navigation to definitions and references.

[:modes]
== Specific Modes ==
Finally, there are some specific modes available as well:
* GwtMuMaMo Multiple Major Mode (MuMaMo) for working with the Google Web Toolkit
* CouchdbDocument interacting with couchDB
* MozRepl -- A great way to hook into the lower level javascript engine of Mozilla.
* [http://flusspferd.github.com/ Flusspferd] provides a [https://github.com/ruediger/flusspferd/blob/master/misc/emacs/flusspferd.el mode for Emacs].
** no work on the project since 2010
* [[JSON]] -- editing JSON data
* TypeScript - minor mode to add syntax highlighting for MS's Typescript

[:wishlist]
== WishList ==
* NPM and Ender package manager front-ends
** [EmacsJs emacs.js] claims to have <code>npm</code> integration
* Lookups to the [http://www.javascripture.com/ Javascripture]
* more cleanup per [[EmacsWikiContent#javascript]]
* Notes on the pros and cons of using these Emacs w/ these tools vs using another IDE (like Visual Studio or Webstorm). Of course "don't have to leave Emacs"... but, other reasons? Are there shortcomings we should look to address?

[:categories]
----
CategoryHypermedia
CategoryProgramming
CategoryNeedsAttention
