1.1. What is a Cube?#

A cube is the equivalent of a module or a component but for CubicWeb. A website made with CubicWeb is generally an instance based on a cube that is just an assembly of already existing cubes with some domain specific logics. If you need a functionality that is not available, then you write a new Cube for it (and hopefully share it with the community).

A cube is made of mainly four parts:

  • its data model stored in schema.py,

  • its logic added to the data stored in entities

  • its logic concerning dataflow stored in hooks,

  • its user interface stored in views.

A cube can also define:

  • its internationalization stored in the i18n/,

  • new cubicweb commands stored in ccplugin.py.

A cube can use other cubes as building blocks and assemble them to provide a whole with richer functionnalities than its parts. The cubes cubicweb-blog and cubicweb-comment could be used to make a cube named myblog with commentable blog entries.

The CubicWeb.org Forge offers a large number of cubes developed by the community and available under a free software license. They are designed with the KISS principle as each cube usually adds a single functionality. Usually an application is an instance based on a regular cube that is just an assembly of existing cubes with some specific logics.


The command cubicweb-ctl list displays the list of available cubes.