* erlang_js ** Overview [[http://travis-ci.org/basho/erlang_js][Travis-CI]] :: [[https://secure.travis-ci.org/basho/erlang_js.png]] =erlang_js= is a linked-in driver, API, and OTP application that embeds Mozilla's Spidermonkey Javascript Virtual Machine in Erlang. Originally created to facilitate usage of Riak's MapReduce by non-Erlang programmers, it supports multiple concurrent Javascript VMs, runtime evaluation of Javascript code, and invocation of Javascript functions. =erlang_js= builds and executes only on Unix-based platforms, including Linux, Mac OS/X, and Solaris. It includes version 1.8.0 of Spidermonkey and Douglas Crockford's =json2.js= JSON parser. More information about the features available to Javascript inside =erlang_js= are detailed on the [[https://developer.mozilla.org/en/JavaScript/Reference][Mozilla Developer Center]]. ** Quick Start You must have [[http://erlang.org/download.html][Erlang/OTP R13B04]] or later and a GNU-style build system to compile and run =erlang_js=. #+BEGIN_SRC shell git clone git://github.com/basho/erlang_js.git make all test #+END_SRC Start up an Erlang shell with the path to =erlang_js= included. #+BEGIN_SRC shell erl -pa path/to/erlang_js/ebin -boot start_sasl #+END_SRC Start the =erlang_js= application and create a Javascript VM. #+BEGIN_SRC erlang 1> application:start(erlang_js). =PROGRESS REPORT==== 17-Feb-2011::11:31:51 === supervisor: {local,erlang_js_sup} started: [{pid,<0.46.0>}, {name,cache}, {mfargs,{js_cache,start_link,[]}}, {restart_type,permanent}, {shutdown,2000}, {child_type,worker}] =PROGRESS REPORT==== 17-Feb-2011::11:31:51 === application: erlang_js started_at: nonode@nohost ok 2> {ok, JS} = js_driver:new(). #+END_SRC Now you can evaluate Javascript expressions and call Javascript functions. #+BEGIN_SRC erlang 3> js:define(JS, <<"var addOne = function(a){ return a + 1; }">>). ok 4> js:call(JS, <<"addOne">>, [3]). {ok,4} #+END_SRC ** Documentation Documentation about the API is extensive and can be generated by =edoc=. #+BEGIN_SRC shell $ make docs $ open docs/index.html #+END_SRC ** Contributing We encourage contributions to =erlang_js= from the community. 1) Fork the =erlang_js= repository on [[https://github.com/basho/erlang_js][Github]]. 2) Clone your fork or add the remote if you already have a clone of the repository. #+BEGIN_SRC shell git clone git@github.com:yourusername/erlang_js.git # or git remote add mine git@github.com:yourusername/erlang_js.git #+END_SRC 3) Create a topic branch for your change. #+BEGIN_SRC shell git checkout -b some-topic-branch #+END_SRC 4) Make your change and commit. Use a clear and descriptive commit message, spanning multiple lines if detailed explanation is needed. 5) Push to your fork of the repository and then send a pull-request through Github. #+BEGIN_SRC shell git push mine some-topic-branch #+END_SRC 6) A Basho engineer or community maintainer will review your patch and merge it into the main repository or send you feedback.