# 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 Windows Mobile 6.x Professional, 6.0 Standard ### 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//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