# qooxdoo

## Universal JavaScript Framework

### Navigation

- index
- next |
- previous |
- » Home »
- qooxdoo v1.6 documentation »
- Table of Contents »
- Server Framework »

# Server Overview

This page is an overview of qooxdoo's server capabilities. It shows which parts of qooxdoo can be used in a server environment or comparable scenario. It also serves as an introduction to all interessted in using qooxdoo on a JavaScript server environment.

## How to get it?

There are three ways of working with qooxdoo in a server environment.

### Download

The first and easiest way is to simply download the qxoo package either in the optimized or unoptimized version.

### npm

npm is the `node package manager` and therefore a comfortable and convinient way to install qooxdoo if you are working with node.js:

    npm install qooxdoo

This will install the qooxdoo package (which carries the same content as the qxoo archive) into your current folder from where you can include it easily into your application. More details how to use it in the Basic Example.

### Skeleton

The skeleton is the way qooxdoo apps are usually build. This offers the support of the toolchain which includes a lot of handy features like dependency detection, optimization, API doc generation and so on.

## Included Features

This listing shows the core features of the qxoo package. If you build your own package with the skeleton way of using qooxdoo, the feature set might be extended depending on your application code.

- Object Orientation
    - Classes
    - Mixins
    - Interfaces
    - Properties

- Events

- Single Value Binding

Most of the features can be found in qooxdoo's core layer and should be familiar to qooxdoo developers.

## Supported Runtimes

We currently support two types of runtimes:

- node.js
- Rhino

## Basic Example

The following example shows how to use the qxoo package in a node environment having the package installed via npm.

    var qx = require('qooxdoo');

    // create anmial class
    qx.Class.define("my.Animal", {
      extend : qx.core.Object,
      properties : {
        legs : {init: 4}
      }
    });

    // create dog class
    qx.Class.define("my.Dog", {
      extend : my.Animal,
      members : {
        bark : function() {
          console.log("WAU! I have " + this.getLegs() + " legs!");
        }
      }
    });

    var dog = new my.Dog();
    dog.bark();

The only line which is specific to the server environment is the first one, where you include the qooxdoo package. The rest of the code is plain qooxdoo JavaScript which can be run in a browser, too. For more on that take a look at the documentation about Object Orientation.

## Additional Scenarios

The qxoo package does not have any server dependend code in it so it can also be used in a browser e.g. to have the features described above without the need to use the rest of qooxdoo. Another interessting scenario might be to use the package in a web worker which is also a DOM-less environment.