# Build and dev **Authelia** is written in Go and comes with a dedicated CLI called [authelia-scripts](./authelia-scripts.md) which is available after running `source bootstrap.sh`. This CLI provides many useful tools to help you during development. In order to build and contribute to **Authelia**, you need to make sure Go v1.13, Docker, docker-compose and Node v12 are installed on your machine. ## Get started **Authelia** is made of Go application serving the API and a [React](https://reactjs.org/) application for the portal. In order to ease development, Authelia uses the concept of [suites] to run Authelia from source code so that your patches are included. This is a kind of virtual environment running **Authelia** in a complete ecosystem (LDAP, Redis, SQL server). Note that Authelia is hotreloaded in the environment so that your patches are instantly included. The next command starts the suite called *Standalone*: $ authelia-scripts suites setup Standalone Most of the suites are using docker-compose to bootstrap the environment. Therefore, you can check the logs of all application by running the following command on the component you want to monitor. $ docker logs authelia_authelia-backend_1 -f Then, edit the code and observe how **Authelia** is automatically reloaded. ### Unit tests To run the unit tests, run: $ authelia-scripts unittest ### Integration tests Integration tests are located under the `internal/suites` directory and are based on Selenium. A suite is a combination of environment and tests. Executing a suite therefore means starting the environment, running the tests and tearing down the environment. Each step can be run independently: # List the available suites $ authelia-scripts suites list Standalone DuoPush LDAP Traefik # Start the environment of Standalone suite. $ authelia-scripts suites setup Standalone # Run the tests related to the currently running suite. $ authelia-scripts suites test # Tear down the environment $ authelia-scripts suites teardown Standalone In order to test all suites (approx 30 minutes), you need to make sure there is no currently running suite and then you should run: $ authelia-scripts suites test Also, you don't need to start the suite before testing it. Given you're not running any suite, just use the following command to test the *Standalone* suite. $ authelia-scripts suites test Standalone The suite will be spawned, tests will be run and then the suite will be teared down automatically. [suites]: ./suites.md