# Build and dev

**Authelia** is written in Typescript and built with [Authelia scripts](./authelia-scripts.md).

In order to build and contribute to **Authelia**, you need to make sure Node with version >= 8 and < 10
and NPM is installed on your machine.

## Build

**Authelia** is made of two parts: the frontend and the backend.

The frontend is a [React](https://reactjs.org/) application written in Typescript and
the backend is an express application also written in Typescript.


The following command builds **Authelia** under dist/:

    authelia-scripts build

And then you can also build the Docker image with:

    authelia-scripts docker build

## Development

In order to ease development, Authelia uses the concept of [suites]. This is
a kind of virutal environment for **Authelia**, it allows you to run **Authelia** in a complete
environment, develop and test your patches. A hot-reload feature has been implemented so that
you can test your changes in realtime.

The next command will start the suite called [basic](../test/suites/basic/README.md): 

    authelia-scripts suites start basic

Then, edit the code and observe how **Authelia** is automatically updated.

### Unit tests

To run the unit tests written in Mocha, run:

    authelia-scripts unittest

### Integration tests

Integration tests also run with Mocha and are based on Selenium. They generally
require a complete environment made of several components like redis, mongo and a LDAP
to run. That's why [suites] have been created. At this point, the *basic* suite should
already be running and you can run the tests related to this suite with the following
command:

    authelia-scripts suites test


[suites]: ./suites.md