qooxdoo 2.1 (2012-11-14)


This release comes with many new features and improvements besides a large number of bugfixes.



  • A Tutorial application was introduced to interactively guide new users through some fundamental desktop and mobile samples. This complements existing ways to get started with qooxdoo, e.g. the Playground or written tutorials for desktop and mobile.


  • qooxdoo's website-oriented features have been around as a pre-built library, typically called "q" due to its top-level namespace. To avoid conflicts with your environment, you may now also use the alternative identifier qxWeb.
  • Cross-browser Animations saw further improvements. For instance, Animated Scrolling is now available in the Manipulating module. Moreover, you have more ways to control and finetune animations, e.g. for iteration, delay or start events.
  • Two demo applications, the website variant of the Feedreader as well as the Todo app, were rebuilt using q. The latter app takes advantage of the Storage module.


  • As already mentioned, the new IE10 support allows the mobile framework to embrace the Windows 8 family, particularly Windows Phone 8. For instance try the Mobile Showcase, now enhanced by a "Maps" page and the “Events” page to nicely demostrate multi-touch events.


  • Dynamic Theme Switching is a great new feature when supporting several themes for an app; it not only makes development of custom themes faster, it can also be included with the final app: see the Theme dropdowns in either Demobrowser or Widgetbrowser.
  • Animations also make it into the desktop widget set: fade in, fade out or scroll animations can easily be applied to those rich interfaces.
  • The VirtualTree, a widget for handling even huge hierarchical data sets very efficiently, now offers advanced capabilities to filter and sort items.


  • The toolchain is an integral and powerful part of the qooxdoo SDK. For many typical usecases it is now faster and more robust. The new JS parser, introduced with 2.0, has been extended to take over more use cases from the old one.
  • Code validation is performed by a dedicated tool (a.k.a. the "lint" job), but also by the compiler when generating an app. Those two warning systems have been unified into one, along with improvements in validating JS and JSON files.
  • Writing API documentation can be error-prone. Now developers benefit from a stricter parsing and analysis of JSDoc comments, including checks for parameter types, return values and other possible inconsistencies.
  • When working in a team of developers, or when incorporating code from several sources, a consistent coding style is beneficial. The pretty-print feature was revamped and includes some handy features for reformatting code, such as limiting the length of code lines.

Bugfixes & Enhancements

See this detailed list of issues resolved for qooxdoo 2.1, which includes the fixes of the accompanying qooxdoo 2.0.3 patch release. Besides fixes for defects, many enhancements made it into qooxdoo 2.1. See here for a detailed list of issues that were resolved for 2.1 exclusively.


Some manual migration steps might be necessary when upgrading from the previous releases, see the Migration guide. Deprecation warnings in the development ("source") version shouldn't negatively affect your app in production ("build"), but it is recommended to get rid of those warnings. A bugfix-only replacement is available as qooxdoo 2.0.3, the corresponding patch release.



  • qx.log.Logger now includes the stack trace when serializing error objects.
  • Fixed source loading of huge applications for IE.
  • Fixed removeListener for listeners added with addListenerOnce.
  • Make sure to return the right value in application routing.
  • Updated the cursor implementation.
  • In class handling removed the setting of overflow styles (not needed nowadays). (#6618)
  • Cleaned up qx.lang namespace including native type normalization and feature checks. (#6665)

Data Binding

  • Added the possibility to tell the JSON marshaler which parts to ignore during marshaling. (#6580)
  • Provide a method that resolves model property paths. (#6685)

Browser Support

  • Fixed CSS border-image feature detection for Firefox 15+.
  • Fixed transform detection for IE10.
  • Fixed chrome bug which caused ellipsis in most labels. (#6799)


  • qx.io.rest.Resource is production ready now.
  • "poll" method of "qx.io.rest.Resource" should not start immediately. (#6642).
  • New method qx.application.Routing.getState returns the history hash of the navigation handler.
  • qx.application.Routing.init takes an optional default route as argument.
  • qx.uitable.model.Remote.reloadData now clears its data only when new data arrives from another request.


  • qx.bom.element.Style.compile now uses vendor-prefixed CSS property names if necessary.


  • Fixed bug in the templating where plain text instead of a text node has been returned.
  • Fixed memory leak in the event emitter.
  • Added missing methods.
  • Added a storage module.
  • Added a messaging module. (#6781)
  • Added a core module.
  • Added iteration / start event to the animation layer.
  • Added possibility to delay animations.
  • Animation module now supports animated scrolling.
  • Animation keep frame will be calculated right for reversed animations.
  • Added a isPaused method for animations.
  • Added a cross browser wrapper for 'requestAnmiationFrame'
  • Added scroll animation support. (#6702)
  • Enhanced the polyfill module.
  • The filenames now contain the version number.
  • Bug fixes in the IO module.
  • Updated mustach.js to version 0.7.0.
  • Updated sizzle to version 1.8.2.
  • Support for noConflict mode added. (#6766)


UI Core

  • Fixed incorrect arrow position of qx.ui.container.SlideBar (#6675)
  • Make sure a drop event does not fire a click event on virtual tree.
  • Added fadeIn / fadeOut animation to the widget class.
  • Added scroll animation support. (#6657)
  • Added possibility to prevent drops based on the current set action e.g. allow move but no copy. (#6825)


  • Use the native placeholder for Firefox.
  • Fixed placeholder wrap behavior.
  • Fixed a missing input event for input fields.
  • Make sure to reset the input value on input fields to ensure the firing of input events.
  • Exposed the redefineItem method of the resetter in the form.


Virtual Widgets

  • qx.ui.tree.VirtualTree now supports sorting and filtering (via a delegate).


  • Fixed web font rendering for safari.
  • Fixed shadow resizing / positioning when shadow objects are changed during runtime.
  • Fixed usage of box shadow and linear gradients in IE.
  • Fixed date chooser appearance of the simple theme.
  • Color themes can now contain self references. (#6705)
  • Added documentation on how to use the Widgetbrowser for custom theme development. (#5261)


  • Added null state and placeholder to qx.Mobile SelectBox. (#6729)
  • iOS6 support for qx.Mobile. (#6893)
  • Android 2.3 Form Field Fix (iScroll) is only used till Android 4.1. (#6896)
  • Fixed wrong positioning of Dialogs. (#6885)
  • Atom should be able to change its image after initialization. (#6806)
  • Added qx.ui.mobile.embed.Canvas. (#6900)
  • Added transform/scale/rotate methods to qx.ui.mobile.core.Widget. (#6888)
  • Implemented fallback for mobile widgets transform: translate3d() to translate() if "css.transform.3d" environment variable returns false.
  • Prevent mobile showcase from loading desktop icon set.
  • Added a picker widget qx.ui.mobile.dialog.Picker (#6815)
  • qx.ui.mobile.list.List: Improved rendering performance. (#5185)
  • "Soft Keyboard" - don't hide after textField input on ios mobile environment. (#6775)
  • Re-layouting of qx.Mobile Forms. (#6524)
  • "changeSelection" event should be fired by qx.ui.mobile.form.SelectBox. (#6769)
  • New qx.Mobile widget: qx.ui.mobile.container.Carousel. (#4819)
  • Support for Ripple Emulator. (#6686)
  • qx.ui.mobile.page.NavigationPage should provide full screen mode. (#6550)
  • Allow reverse direction in qx.ui.mobile.form.Slider. (#6522)
  • Added qx.ui.mobile.form.Group for improved layouting. (#4906)
  • Added a OpenStreetMap example to Mobile Showcase. (#6386)
  • Fixed Android form input field bug. (#6646)
  • Handle visibility on form rows. (#6829)
  • Mobile Carousel should allow page scrolling. (#6911)
  • Make qx.Mobile support Internet Explorer 10. (#6929)
  • Created event.mspointer environment variable, which checks for IE10 MSPointer events. (#6929)
  • Fixed Inspector for working with qx.Mobile Apps. (#6480)
  • Deprecated the mobile navigation manager in favor of the application routing. (#6574)


  • Added the environment key 'runtime.name'.
  • Added the version number to the NPM package description's main key.


  • Made Inline applications mobile-ready. (#6652)


  • Used the routing class for navigation.



  • Updated ACE to version 1.0.




  • Complete rewrite based on qx.Website.

Test Runner

  • The Test Requirements feature is now compatible with DOMless environments (node.js, Rhino).
  • Added a mobile view and corresponding test-mobile job (mobile skeleton).
  • HTML view: Improved test selection speed in older browsers.
  • Widget view: Added a 'clear results on run' option.

Feature Configuration Editor

  • Feature Configuration Editor works on mobile devices. (#6588)


  • The create-application.py scaffolding helper is now available in the SDK root directory.
  • Using an alternative Json parsing module allows JS-style comments in all .json files, e.g. Manifest.json, better error reporting, and a command-line Json checker jsonlint.py.
  • Added -I as short for –no-progress-indicator to the generator command-line options.


  • Faster library scans with cold cache, through selective class parsing.
  • Made library scanning more lenient, so that all library assets (classes, resources, translations) are optional.


  • New log/translations key.


  • New locals cs, pt in framework and apps.
  • Upgraded polib module to version 1.0.1.
  • With the new module, escaping of embedded double quotes is now mandatory (e.g. msgid "foo \" bar").

Code Validation

  • New implementation of warning module unifies warning output of compile and lint jobs. (#4615)
  • Lint job now takes the compile libraries into account so that their symbols are recognize as known.
  • New lint JSDoc keys to suppress certain warnings: environmentNonLiteralKey when warning about non-literal first arguments in calls to e.g. qx.core.Environment.get; ignoreNoLoopBlock when warning about loop bodies (if, while, for) not being a block statement.
  • The 'lint-check' config key is now generally declarative (i.e. does nothing) if the subkey lint-check/run is not set to true.
  • Besides that there are multiple new 'lint-check' config sub-keys, to control source code checking on the global level, like ignore-multiple-mapkeys, ignore-catch-param, etc.

Code Formatting

  • New pretty-printing implementation.
  • New pretty-printing option pretty-print/general/text-width, to limit the length of source code lines.


  • api-verify job can now check the documented types of function parameters and return values for validity.
  • qx.Website: Added polyfill documentation to API Viewer.
  • Added an manual page about events in the data binding context.
  • The tutorials use identi.ca instead of twitter. (#6725)
  • The SDK's manual (under documentation/) is now offline-capable, e.g. containing all required style sheets and fonts.
  • New implementation of the JSDoc parser; syntax of JSDoc comments is now treated more strictly.
  • New sourceViewUrl library property allows the inclusion of links to source code with the class documentation in Apiviewer.


API Changes