Ares 2 is an open-source (Apache 2) browser-based code editor and UI designer for developing Enyo 2 applications.
Applications made using Ares 2 rely on the Enyo highly portable web technology: they are cross-platform (Linux/Mac/Windows, Android,/iOS/WindowsPhone/Windows8/webOS, Chrome/IE/Firefox/Opera), cross-form-factors (Desktop, Phone, Tablet, TV… etc).
- Architecture & contributions: See our contribution guide
- Our current understanding of the roadmap
- Crash-guide to using Ares
- Few details on some Ares features
- See basic Ares security principles
- Learn how to extend Ares using plugins
Although Ares is still a work in progress, we have reached the point where we are opening the repo and will do further development in the open, so we encourage you to follow our progress and give us feedback as we push Ares forward.
You can give us feedback either via the Ares category of the EnyoJS Forums or via the EnyoJS JIRA (using the ares
component).
Here are the main features you can start looking at today:
- De-centralized file storage
- Ares currently connects to a filesystem component, to edit local files (via the
fsLocal
Hermes service). Ares can also be configured to use a per-user Dropbox account (via thefsDropbox
Hermes service) as file storage. See below for more details. - Key goals with this approach are to avoid forcing users to store files and/or credentials on Ares servers and allow freedom to choose the preferred storage location, whether cloud or local.
- Ares currently connects to a filesystem component, to edit local files (via the
- Code editor
- Ares integrates the ACE (Ajax Cloud Editor, used by Cloud9 & Mozilla) code editor for code editing
- Code intelligence
- Upon opening/editing a JavaScript file, Ares will parse the file and display a semantic outline of the code in the right-hand panel (for purposes of demonstrating parser)
- Code completion using symbols from:
- the current project
- the Enyo version that comes with Ares
- the libraries included in the project
- In the future, this will be used for advanced features context-sensitive documentation, etc.
- UI designer for drag and drop UI editing
- Component definitions are round-tripped from the Editor to the Designer, meaning that changes made in one will immediately appear in the other.
- Integration with PhoneGap online build
- Project sources
- Allow creation of new projects based on bootplate templates.
- Allow creation of new projects based on your own project templates.
- See Project sources for more information
The following features are in the works, and you should see them added as we move forward:
- More code completion and context-sensitive documentation
- Additional Hermes components to extend the local and cloud file storage options: We plan to add Hermes components for FTP, Box.net and more
- Improvements to the Designer component for greater ease of use
- ... and more!
Note: An up-to-date view of the ongoing activities is available from The ARES JIRA, itself available from the EnyoJS JIRA.
-
Install Node.js & NPM 0.8.x (>= 0.8.21).
Recommended version is node 0.8.25 and can be downloaded from: node 0.8.25.
NOTE
: Ares does not currently work with node 0.10.x. -
Run:
$ npm -d install ares-ide
The
-d
options gives some minimal troubleshooting information, which is pretty useful asares-ide
is a heavy package (more than 12 MB). -
Once installed, run it using
node_modules/.bin/ares-ide
(ornode_modules\.bin\ares-ide.cmd
) on Windows. -
Please report the issues you find in our JIRA at https://enyojs.atlassian.net/ against the component named
ares
.
Start the IDE server: (e.g. using the Command Prompt, navigate to the ares directory and type 'node ide.js')…
C:\Users\johndoe\node_modules\.bin> ares-ide.cmd
… or (Mac & Linux):
$ node_modules/.bin/ares-ide
Get more information about the options using -h
or --help
:
$ ares-ide --help
Ares IDE, a front-end designer/editor web applications.
Usage: "node ./ide.js" [OPTIONS]
Options:
-h, --help help message [boolean]
-T, --runtest Run the non-regression test suite [boolean]
-b, --browser Open the default browser on the Ares URL [boolean]
-p, --port port (o) local IP port of the express server (default: 9009, 0: dynamic) [default: "9009"]
-H, --host host to bind the express server onto [default: "127.0.0.1"]
-a, --listen_all When set, listen to all adresses. By default, listen to the address specified with -H [boolean]
-c, --config IDE configuration file [default: "/Users/kowalskif/Desktop/GIT/enyojs/ares-project/ide.json"]
-l, --level IDE debug level ('silly', 'verbose', 'info', 'http', 'warn', 'error') [default: "http"]
-L, --log Log IDE debug to ./ide.log [boolean]
In case you want to access other parts of your machine's file-system, refer to the local filesystem service configuration
Be sure to run Ares with --log
(or -L
) to capture the Ares server output in the file name ide.log
. Attach this log-file to you bug report on the ARES JIRA.
You may also want to increase the log verbosity, in order to better understand what is going wrong by yourself. The default verbosity level is http
. You may want o increase to info
or even verbose
. Lowest layer silly
is usually for Ares core developers.
$ node ide.js --level=info
See Hermes README: PhoneGap build service.
See Hermes README: Dropbox File-System service.
Ares does not store any security token or credentials on the server. Client-side security tokens & credentials are stored either using Cookies or using HTML5 localStorage
.
See Hermes Security: Authentication.
Ares's plugin architecture is made to allow extensions, both in its UI (browser client) & its server.
The service genZip defined in ide.json
of ares-project or ide-plugin.json
of Ares plugins allows to intanciate new Ares project from project templates such as "bootplate" or any customer specific project templates.
The property sources:
of the service genZip lists the template definitions that are available at project creation time.
See the section "Project template service" in hermes/README.md for more information.
Ares plugins can bring additional functionality and configuration to Ares. An Ares plugin must follow these rules to be loaded as a plugin:
- It must be installed in a directory under "ares-project/node_modules".
- It must have an
ide.json
in its main directory, which:- defines a new service entry
- can define the client side code to load in the browser
- can update some previously defined services (e.g.: modify/add project templates)
At startup, the process "node ide.js":
- loads the file
ide.json
- locates the plugins, using the first of the below method that works:
- files
../../node_modules/*/ide-plugin.json
(production environment: npm installs Ares plugins aside Ares) - files
node_modules/*/ide-plugin.json
(development environment: npm installed Ares plugin under the Ares source tree)
- files
- sorts then in lexicographical order
- merges them into the loaded configuration following the algorithm described in the next section. While merging each plugin into the global configuration, the following variables are substituted:
@PLUGINDIR@
: the absolute location of each plugin root folder in the Ares server file-system.@PLUGINURL@
: the URL to the plugin root URL, taken relatively to the Ares main page.
- Globally substitute the following variables in the merged configuration:
@NODE@
: the path to the Node.js executable in use. This is useful to start sub-process using the same executable@CWD@
: Current-Working-Directory of the Ares process@INSTALLDIR@
: Root folder ofares-project
, as it is loaded by Node.js. This is the expected location of theide.js
main script.@HOME@
: the user's$HOME
folder on Mac OSX & Linux,%USERPROFILE%
on Windows.
- starts services defined in the resulting loaded configuration
Ares plugin configuration are merged as follow:
- New service entries are simply added to the current configuration
- Service entries already existing in the current configuration are merged property by property as follow:
- New properties are simply added to the existing service entry
- For array, array entries are added to the corresponding array in the existing service
- For objects, object properties are applied to the corresponding object in the existing service
- Other properties of same type are applied to overwrite the corresponding entries in the existing service
- Properties with same name but different types are considered as errors and stop the startup process.
- Other top level properties are not yet taken into account
The client code of an Ares plugin is defined by the property "pluginUrl
" of a service entry in "ide.json".
During the initialization process of Ares within the browser, the 'ServiceRegistry' will perform an 'enyo.load' of the javascript file (Usually a 'package.js' file) specified by the property "pluginUrl
".
After being loaded, the new code must invoke ServiceRegistry.instance.pluginReady();
to notify Ares that the client side code is ready.
See the function 'pluginReady' in the file 'services/source/ServiceRegistry.js'.