Image by Deepak Kumar

Apps & Plugins

Apps and Plugins

12.png

Sharing and collaborating

Qbix can be extended with many different plugins, which can be included in your apps. Some of these plugins come with Qbix, while others can be released by app developers.

Plugins are bundles that can contain pretty much anything an app can, including classes, handlers, views, and web resources such as js and css files.

In fact, since apps and plugins have an almost identical directory structure, functionality built for an app is often repackaged into a plugin for re-use in other apps. In this way, app developers can build stuff for other app developers to use.

Qbix comes with an install.php script that takes care of installing apps and plugins, and keeping track of their associated versions. Whenever a database schema is updated, the installer takes care of that, too. Simply run it on each environment, and everything "just works".

2

The philosophy

The meaning behind the QBIX icon is that apps are built out of re-usable components. These components, called "tools" in Qbix, are packaged along with their back-end functionality into plugins, and are completely self-sufficient.

We want to get to the point where you are able to prototype apps quickly just by throwing some "tools" on a "page", and everything simply works as you'd expect. Tools load and unload in real time as you navigate the pages of the app. They are already hooked up to the back end — so actions you take are persisted to data streams, propagated to other participants around the world, and used to update what they see, all in real time.

3

How it works

Qbix apps load functionality in the following layers, merged on top of each other:

  1. Your app

  2. Plugins, in the order they depend on each other

  3. The core platform

This is true of files, configuration, and so forth. When you load a class, for example, Qbix first looks in your app's directory, then at the plugins, and finally in the core, to find the file. In this way, you can override or extend a lot of functionality as you go.

A plugin often includes a bunch of files to be served to browsers, such as js, css and image files. If you want to load a plugin dynamically, the command is predictably easy:

Q.load(pluginNames, callback)