Ractive.js - Next-generation DOM manipulation
=============================================


*Got questions? Tag Stack Overflow questions with [ractivejs](http://stackoverflow.com/questions/tagged/ractivejs) or contact [@RactiveJS](http://twitter.com/RactiveJS) on Twitter*

What is Ractive.js?
-------------------

It's a JavaScript library for building reactive user interfaces in a way that doesn't force you into a particular framework's way of thinking. Its features include...

* data-binding, with a beautiful declarative syntax
* event handling that doesn't make you tear your hair out
* flexible and performant animations and transitions

...among many others. It takes a radically different approach to DOM manipulation - one that saves both you and the browser unnecessary work.

To get a feel for how it will make your life as a web developer easier, visit [ractivejs.org](http://ractivejs.org), follow the [interactive tutorials](http://learn.ractivejs.org), or try the [60 second setup](https://github.com/ractivejs/ractive/wiki/60-second-setup).


Get help
--------

If you don't find what you're looking for in the [docs](http://docs.ractivejs.org/latest), ask a question in [Google Groups](https://groups.google.com/forum/#!forum/ractive-js) forum, Stack Overflow with the [`ractivejs`](http://stackoverflow.com/questions/tagged/ractivejs) tag, or send a tweet to [@RactiveJS](http://twitter.com/RactiveJS).


Building
--------

To build the project locally, you'll need to have [Grunt](http://gruntjs.com) installed. Clone the repo, navigate to the folder, then do

```shell
$ npm install
```

to install all the development dependencies (which aren't included in the repo itself). Then do

```shell
$ grunt
```

to build the project from source, lint it, run the tests and minify the library. If all of those steps succeed, files will be created in the `build` folder.

Other grunt commands available:

```shell
# Watch all source files, and rebuild when they change. This will
# only concatenate the files (it won't lint/test/minify) to the
# tmp folder
$ grunt watch:build

# Watch all source files, and transpile them to AMD when they
# change. This is useful if you want to do in-browser testing, or
# use the sandbox folder, without rebuilding each time
$ grunt watch:transpile

# Lint the source code
$ grunt jshint

# Build the code (will run jshint first)
$ grunt build

# Run tests on the build
$ grunt qunit

# Run node non-browser tests (parse and toHTML) on the concatenated code
$ grunt nodeunit

# Rebuilds the test runners when test folders and files change (based on ./test/modules)
$ grunt buildTests

# Rebuilds the tests, runs the nodeunit tests, runs the qunit tests
$ grunt test

# Release a new version of the library to the release folder
# (reads version number from package.json)
$ grunt release
```


Contributing
------------

Pull requests and issues are always welcome! Please read [CONTRIBUTING.md](https://github.com/ractivejs/ractive/blob/master/CONTRIBUTING.md) to learn how to contribute.


Browser support
---------------

Tested successfully in IE8+ and all modern browsers. If your experience differs please let me know! (For legacy browser support, use the builds with `legacy` in the filename - these include polyfills for `Array.prototype.forEach` and other ES5 features used by Ractive.)


License
-------

Copyright (c) 2012-14 Rich Harris and contributors. Released under an [MIT license](https://github.com/ractivejs/ractive/blob/master/LICENSE.md).


[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/RactiveJS/ractive/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
[![devDependency Status](https://david-dm.org/RactiveJS/Ractive/dev-status.png)](https://david-dm.org/RactiveJS/Ractive#info=devDependencies)
