Documentation overview


Although many of the Reahl packages can be used independently, the following introductory materials cover all Reahl packages written in terms of a user of the Reahl web framework (reahl-web):

The main components of Reahl are illustrated in the figure below:

A visual depiction of Reahl components and how they depend on each other.

Component framework

The component framework contains the infrastructure that enables Reahl’s brand of component-based development. It also allows a programmer to build domain models that are annotated with information used by user interface code.

The core of the Reahl component framework is implemented in reahl-component. Support for different databases or ORM tools is implemented in separate components: reahl-postgresqlsupport, reahl-sqlalchemysupport, reahl-sqllitesupport and reahl-mysqlsupport.

All of these components are discussed under the heading of Component framework (reahl-component).

Web framework

The web framework provides the tools for developing applications with web-based user interfaces.

The core of the web framework is written such that it is independent of the technology used for object persistence. This core is in the reahl-web component. The web framework does use some objects that are persisted though – an implementation of these using SqlAlchemy’s declarative is provided in reahl-web-declarative.

These components are discussed under Web framework.

End-user functionality

The end-user functionality included in the distribution of Reahl is split into two components: reahl-domain and reahl-domainui.

The reahl-domain component contains the domain models and logic, whereas reahl-domainui provides the related web user interfaces.

Simple support for sending emails is provided by reahl-mailutil.

All these are discussed in Domain functionality.

Browser tools

reahl-browsertools is an abstracted interface to WebDriver including a programmatic way of composing XPaths. See its documentation for more detail.


The reahl-tofu component contains our test Fixture framework and extensions that bolt it onto pytest. It also contains a small collection of other test utilities. See its documentation for more detail.


Stubble (in reahl-stubble) enables one to write stub classes that will break if the interfaces of the classes they stub should change. See its documentation for more detail.

Other tools

We do all development inside a docker image. The reahl-workstation component is meant to be installed on your main workstation. It contains a stripped-down version of the reahl command containing commands that help deal with whats inside the docker image.

Infrastructure is provided in reahl-dev and reahl-webdev for dealing with Reahl components using an extensible command line tool. This includes a web server for development purposes and a number of special tofu Fixtures that are useful when developing Reahl.

The development tools are discussed in detail in Development tools

API Reference