# Rhodes 

## Introduction

Rhodes is a framework for building locally executing, device-optimized mobile applications. These applications are optimized to interact with transactional enterprise application backends. They are also designed to work with synced local data using a local database, such as SQLite or HSQLDB, and a generic backend synchronization framework, such as [RhoConnect](../rhoconnect) (another open source component available from [Rhomobile](http://rhomobile.com)). Rhodes is available for iPhone, Research in Motion (Blackberry), Windows Mobile, and Android phones.

The [Tutorial](tutorial) describes how to install Rhodes and build your apps. The rest of this Developer Reference covers all Rhodes features.

## Supported Operating Systems
### BlackBerry
BlackBerry 4.6, 4.7, 5.0, 6.0, 7.0

NOTE: 4.2 and 4.5 are supported but database access is very slow on these devices.

### Windows Mobile
**NOTE: As of Rhodes 3.3.3 Windows Mobile/CE are only supported under [RhoElements](/rhoelements/rhoelements-introduction)**

### Android
Android 2.1 and greater

### iPhone
All versions of iPhone 3.0 or greater, iPad

### Windows Phone 7
Latest Windows Phone devices

## Rhodes Application

A Rhodes application is a web application that runs locally on your mobile device. It is implemented with the standard MVC architecture:

* Views are sets of ERB templates: HTML, CSS, and JavaScript files executed by the WebView control available on the device and served by the local web server. This server is a very lightweight web server running on the device. See [User Interface](ui) section for more details on [Layouts](ui#view-layouts), [CSS framework](ui#css-framework), [JavaScript frameworks](ui#javascript-frameworks), [Menus](ui#menu), and [Native UI elements](ui#native-toolbar-control) that you may use in the View.  
* Controllers are sets of usually very simple Ruby scripts in controller.rb files. You have access to many [native device capabilities](device-caps) from your controllers.
* Models are defined by a Ruby script in the model.rb file.

See Rhodes [App Structure](application) for more details.

You may generate a Rhodes application using the [rhodes](generator) utility.

## Contributing
Do you want to add features to Rhodes? Have you found a bug that you want report or fix? Read on.

### Reporting Rhodes Issues
Please report bugs/features/enhancements to the [google group](http://groups.google.com/group/rhomobile).

### Run Rhodes Specs
You should run the rhodes specs to make sure your development environment is up-to-date (currently the specs only run on OSX):

[Fork](http://help.github.com/forking/) the [Rhodes repository](http://github.com/rhomobile/rhodes).

Clone your new repo: 
	:::term
	$ git clone git://github.com/<yourhandle>/rhodes.git
	$ cd rhodes
	$ bin/rhodes-setup

Run Rhodes framework_spec and phone_spec targets
	:::term
	$ rake run:allspecs 

If everything passes (pending specs are OK), then your environment is ready for development. If you have trouble installing a particular gem, or the specs won't run properly, please feel free to email the [Rhomobile google group](mailto:rhomobile@googlegroups.com) or [hop on IRC](http://webchat.freenode.net/?channels=rhomobile) to chat with other Rhodes developers.

### Contributing your Patch
Now that your environment is ready, make your changes!

Create a topic branch:
	:::term
	$ git checkout -b cool_new_feature
	
Write tests, [such as this code in a Rhom example](http://github.com/rhomobile/rhodes/blob/a905e9c9781bfe6e5003e8c8a11cd5418b08df73/spec/framework_spec/app/spec/rhom_object_spec.rb#L239).

Make changes to your project to ready it for others to use.

Add relevant documentation for your project (use RDoc, update the README if relevant).

Push to your branch:
	:::term
	$ git push origin cool_new_feature

Send a note to the [google group](http://groups.google.com/group/rhomobile)

That's it! We recommend following [these ruby style guidelines](http://github.com/chneukirchen/styleguide/blob/master/RUBY-STYLE) when coding.

If you are interested in having us use your patch to Rhodes, you will need to submit a [contribution agreement](http://rhomobile.com/community/contributing/) to us.

## Framework Architecture

<img src='/images/rhodes-framework.png'/>



